diff --git a/404.html b/404.html index 8d07996..f9321d7 100644 --- a/404.html +++ b/404.html @@ -70,9 +70,6 @@
  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/adding-an-app.html b/gow/adding-an-app.html index 996661e..5042736 100644 --- a/gow/adding-an-app.html +++ b/gow/adding-an-app.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/components-overview.html b/gow/components-overview.html index 4c8bcf4..9811163 100644 --- a/gow/components-overview.html +++ b/gow/components-overview.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/configuration.html b/gow/configuration.html index 7ea739f..4efc27f 100644 --- a/gow/configuration.html +++ b/gow/configuration.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/connecting.html b/gow/connecting.html index 0edb9fa..17e6c27 100644 --- a/gow/connecting.html +++ b/gow/connecting.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/contributing.html b/gow/contributing.html index 467097c..c591efe 100644 --- a/gow/contributing.html +++ b/gow/contributing.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/docker-build.html b/gow/docker-build.html index 1368cde..698e6d1 100644 --- a/gow/docker-build.html +++ b/gow/docker-build.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/how-to-use.html b/gow/how-to-use.html index f083503..e767c3d 100644 --- a/gow/how-to-use.html +++ b/gow/how-to-use.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/index.html b/gow/index.html index 0ac9d88..6077c64 100644 --- a/gow/index.html +++ b/gow/index.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/installation.html b/gow/installation.html index 79c722c..8fd76d9 100644 --- a/gow/installation.html +++ b/gow/installation.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/kubernetes.html b/gow/kubernetes.html index 28da00d..abd9eda 100644 --- a/gow/kubernetes.html +++ b/gow/kubernetes.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/lutris.html b/gow/lutris.html index fa969f6..d9f7d25 100644 --- a/gow/lutris.html +++ b/gow/lutris.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/monitor.html b/gow/monitor.html index 646debf..35e2aff 100644 --- a/gow/monitor.html +++ b/gow/monitor.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/nvidia.html b/gow/nvidia.html index 2b907dd..48a2eb8 100644 --- a/gow/nvidia.html +++ b/gow/nvidia.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/overview.html b/gow/overview.html index 05fe9c7..c15fe19 100644 --- a/gow/overview.html +++ b/gow/overview.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/primary-gpu.html b/gow/primary-gpu.html index 4ad8652..d96cbcd 100644 --- a/gow/primary-gpu.html +++ b/gow/primary-gpu.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/requirements.html b/gow/requirements.html index e57a547..e9b0155 100644 --- a/gow/requirements.html +++ b/gow/requirements.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/roadmap.html b/gow/roadmap.html index 85ce9f3..22052a0 100644 --- a/gow/roadmap.html +++ b/gow/roadmap.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/run-gow.html b/gow/run-gow.html index 72beaef..1dff11a 100644 --- a/gow/run-gow.html +++ b/gow/run-gow.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/running.html b/gow/running.html index 6e7d117..acac7bf 100644 --- a/gow/running.html +++ b/gow/running.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/steam.html b/gow/steam.html index d79cbd4..3c2b809 100644 --- a/gow/steam.html +++ b/gow/steam.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/troubleshooting.html b/gow/troubleshooting.html index 2562671..e8a8f56 100644 --- a/gow/troubleshooting.html +++ b/gow/troubleshooting.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/which-platform.html b/gow/which-platform.html index e9c4202..584b425 100644 --- a/gow/which-platform.html +++ b/gow/which-platform.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/gow/windows.html b/gow/windows.html index 5babe76..9c935ff 100644 --- a/gow/windows.html +++ b/gow/windows.html @@ -192,9 +192,6 @@

    gow

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • diff --git a/search-index.js b/search-index.js index a86e25b..5754df1 100644 --- a/search-index.js +++ b/search-index.js @@ -1 +1 @@ -antoraSearch.initSearch(lunr, {"index":{"version":"2.3.9","fields":["title","name","text","component"],"fieldVectors":[["title/1-1",[0,63.349]],["name/1-1",[]],["text/1-1",[]],["component/1-1",[]],["title/1",[1,19.056]],["name/1",[2,1.51]],["text/1",[1,1.72,3,2.918,4,2.449,5,2.918,6,2.918,7,1.247,8,2.918,9,2.918,10,1.849,11,2.014,12,2.858,13,2.347,14,1.878,15,3.325,16,3.515,17,3.07,18,3.325,19,2.899,20,1.386,21,1.312,22,1.96,23,2.834,24,2.311,25,2.584,26,2.918,27,1.644,28,1.354,29,2.696,30,2.41,31,1.477,32,2.598,33,1.942,34,1.517,35,2.307,36,2.142,37,2.536,38,1.501,39,1.517,40,2.614,41,2.728,42,2.918,43,1.821,44,2.19,45,2.075,46,2.41,47,1.894,48,3.163,49,1.078,50,2.918,51,2.761,52,1.373,53,2.41,54,2.491,55,2.373,56,3.262,57,2.856,58,4.583,59,2.339,60,1.312,61,1.44,62,2.054,63,1.942,64,1.386,65,2.299,66,1.318,67,2.307,68,1.33,69,1.665,70,2.41,71,2.761,72,2.918,73,2.307,74,2.075,75,1.614,76,2.054,77,1.849,78,1.55,79,2.918,80,1.849,81,1.942,82,2.347,83,1.977,84,2.034,85,1.568,86,2.918,87,2.449,88,1.781,89,1.72,90,4.402,91,2.536,92,2.918,93,3.711,94,1.878,95,2.307,96,2.918,97,2.918,98,1.624,99,2.918,100,2.536,101,2.536,102,2.491,103,1.419,104,2.918,105,2.918,106,2.918,107,2.41,108,1.732,109,2.584,110,1.977,111,2.918,112,2.918,113,2.584,114,2.761,115,2.918,116,2.834]],["component/1",[1,0.433]],["title/2-1",[117,44.6]],["name/2-1",[]],["text/2-1",[]],["component/2-1",[]],["title/2-2",[118,63.349]],["name/2-2",[]],["text/2-2",[]],["component/2-2",[]],["title/2-3",[119,50.661,120,26.479]],["name/2-3",[]],["text/2-3",[]],["component/2-3",[]],["title/2-4",[121,41.211,122,31.377]],["name/2-4",[]],["text/2-4",[]],["component/2-4",[]],["title/2-5",[13,25.784,121,41.211]],["name/2-5",[]],["text/2-5",[]],["component/2-5",[]],["title/2-6",[123,39.531]],["name/2-6",[]],["text/2-6",[]],["component/2-6",[]],["title/2",[124,26.92,125,32.616]],["name/2",[124,0.544,125,0.66]],["text/2",[1,1.323,13,1.017,14,2.355,16,2.079,18,1.968,21,2.326,28,1.569,31,1.012,34,1.039,38,2.66,39,1.039,40,1.133,41,1.614,43,1.247,49,2.472,56,1.14,57,1.238,61,0.987,64,1.606,66,0.903,68,0.911,69,1.93,80,1.267,82,1.017,83,1.355,85,1.074,88,2.064,94,1.287,103,2.516,107,1.651,108,1.186,110,1.355,117,2.381,120,1.045,122,2.723,123,3.228,124,2.748,125,1.287,126,3.382,127,1.999,128,2.808,129,1.436,130,1.706,131,1.847,132,1.999,133,2.939,134,1.559,135,1.999,136,5.027,137,3.382,138,1.849,139,1.942,140,1.148,141,1.468,142,1.626,143,1.678,144,2.839,145,1.999,146,1.891,147,2.313,148,1.002,149,1.737,150,1.484,151,1.737,152,1.999,153,1.999,154,1.737,155,1.847,156,1.999,157,1.999,158,3.201,159,1.52,160,3.285,161,3.193,162,3.571,163,2.381,164,1.452,165,3.382,166,1.133,167,3.641,168,1.999,169,1.297,170,4.397,171,1.52,172,1.737,173,1.942,174,1.999,175,1.891,176,1.999,177,1.942,178,1.999,179,1.891,180,1.999,181,1.422,182,2.712,183,2.572,184,1.999,185,1.828,186,1.106,187,1.319,188,1.367,189,1.713,190,1.999,191,2.143,192,2.751,193,3.632,194,1.737,195,1.068,196,1.308,197,1.871,198,1.737,199,1.678,200,1.367,201,1.891,202,1.367,203,2.723,204,1.343,205,1.999,206,1.452,207,1.436,208,1.126,209,1.229,210,1.891,211,1.942,212,2.572,213,1.999,214,1.211,215,1.58,216,1.999,217,1.068,218,0.987,219,1.999,220,1.58,221,1.58,222,1.267,223,1.308,224,1.999,225,1.999,226,1.106,227,1.942,228,1.999,229,1.737,230,2.794,231,1.999,232,1.999,233,1.602,234,1.737,235,1.737,236,1.737,237,1.737,238,1.737,239,1.502,240,1.297,241,1.626,242,1.155,243,1.163,244,2.146,245,2.066,246,1.807,247,2.066,248,2.146,249,2.674,250,1.807,251,1.343,252,1.999,253,1.999,254,1.999,255,1.999,256,1.999,257,1.367,258,1.559,259,1.407,260,1.999,261,1.087,262,1.651,263,1.559,264,1.14,265,1.999]],["component/2",[1,0.433]],["title/3-1",[38,21.709,185,22.813,266,28.606]],["name/3-1",[]],["text/3-1",[]],["component/3-1",[]],["title/3-2",[267,31.647,268,30.74,269,31.647,270,17.616,271,29.242]],["name/3-2",[]],["text/3-2",[]],["component/3-2",[]],["title/3-3",[34,21.942,49,15.596,120,22.061]],["name/3-3",[]],["text/3-3",[]],["component/3-3",[]],["title/3-4",[85,22.683,120,22.061,203,26.142]],["name/3-4",[]],["text/3-4",[]],["component/3-4",[]],["title/3-5",[120,26.479,272,43.247]],["name/3-5",[]],["text/3-5",[]],["component/3-5",[]],["title/3-6",[120,26.479,273,35.667]],["name/3-6",[]],["text/3-6",[]],["component/3-6",[]],["title/3-7",[274,38.065,275,39.517]],["name/3-7",[]],["text/3-7",[]],["component/3-7",[]],["title/3-8",[276,42.934]],["name/3-8",[]],["text/3-8",[]],["component/3-8",[]],["title/3",[64,24.059,207,36.405]],["name/3",[120,0.536,273,0.721]],["text/3",[1,0.804,7,1.838,12,0.43,13,0.541,14,0.433,15,0.619,20,0.921,21,1.934,24,0.972,27,0.599,28,0.9,30,0.878,31,1.353,32,1.093,33,0.708,34,1.008,36,1.424,37,0.924,38,1.696,40,1.1,41,0.507,43,0.664,44,0.505,45,0.756,47,1.735,49,1.416,52,1.258,55,0.865,57,0.659,62,0.749,63,2.195,64,2.237,65,1.911,66,2.685,67,0.841,68,2.709,69,1.107,75,1.479,85,1.772,89,1.143,93,0.69,94,0.685,103,2.092,108,0.631,110,0.721,120,3.627,134,0.83,138,1.06,140,2.469,144,0.893,161,0.772,163,2.321,166,1.516,172,0.924,181,1.901,185,4.112,188,1.327,189,0.982,197,1.138,200,0.727,202,0.727,203,4.394,207,0.764,208,1.093,209,0.654,214,0.645,217,0.568,227,1.535,240,0.69,242,0.615,243,0.619,246,0.961,251,0.714,261,0.578,266,2.914,273,2.699,277,3.118,278,1.229,279,1.656,280,3.655,281,3.118,282,0.809,283,1.303,284,0.865,285,0.654,286,1.597,287,1.275,288,1.008,289,0.669,290,1.75,291,2.88,292,2.282,293,0.908,294,1.75,295,1.159,296,2.058,297,0.631,298,1.792,299,0.924,300,1.352,301,0.649,302,0.924,303,1.628,304,2.175,305,1.303,306,1.064,307,0.924,308,1.064,309,0.649,310,0.924,311,1.565,312,3.609,313,0.908,314,0.764,315,1.327,316,1.006,317,0.893,318,1.064,319,1.555,320,1.457,321,0.749,322,1.397,323,2.323,324,1.064,325,0.924,326,1.409,327,2.323,328,1.064,329,1.516,330,1.064,331,1.064,332,1.064,333,1.064,334,1.064,335,1.064,336,1.064,337,1.064,338,1.064,339,1.064,340,1.064,341,1.064,342,1.064,343,1.064,344,1.064,345,1.064,346,1.064,347,1.064,348,1.064,349,1.064,350,0.908,351,0.781,352,1.685,353,0.924,354,1.192,355,1.064,356,0.525,357,1.602,358,1.493,359,1.493,360,0.83,361,1.939,362,2.865,363,0.961,364,1.175,365,1.339,366,1.352,367,0.908,368,1.269,369,0.799,370,1.064,371,0.908,372,1.107,373,1.167,374,0.819,375,2.214,376,1.259,377,1.314,378,0.908,379,2.865,380,1.064,381,4.126,382,1.578,383,1.064,384,1.064,385,2.058,386,0.83,387,1.939,388,1.28,389,1.064,390,0.781,391,0.741,392,0.69,393,3.834,394,1.064,395,1.064,396,1.555,397,1.064,398,0.841,399,1.064,400,0.781,401,1.939,402,1.772,403,1.939,404,1.064,405,2.673,406,1.578,407,0.924,408,0.764,409,0.772,410,1.628,411,0.741,412,1.064,413,1.347,414,1.006,415,1.493,416,1.939,417,0.649,418,0.924,419,1.409,420,1.159,421,1.064,422,0.654,423,0.708,424,0.841,425,0.924,426,1.064,427,0.983,428,0.924,429,0.603,430,1.064,431,0.819,432,1.064,433,0.961,434,1.064,435,1.064,436,0.908,437,1.064,438,1.064,439,0.636,440,0.562,441,1.006,442,1.064,443,1.064,444,1.064,445,0.809,446,0.924,447,0.727,448,0.841,449,1.064,450,1.064,451,1.033,452,0.799,453,1.064,454,0.924,455,1.064,456,1.064,457,1.628,458,0.696,459,1.064,460,0.809,461,0.924,462,1.064,463,1.064,464,1.064,465,0.924,466,1.064,467,1.064,468,1.064,469,0.853,470,0.961,471,1.064,472,1.064,473,1.006,474,0.781,475,0.865]],["component/3",[1,0.433]],["title/4-1",[476,33.662]],["name/4-1",[]],["text/4-1",[]],["component/4-1",[]],["title/4-2",[477,40.142]],["name/4-2",[]],["text/4-2",[]],["component/4-2",[]],["title/4-3",[124,33.662]],["name/4-3",[]],["text/4-3",[]],["component/4-3",[]],["title/4",[478,32.075]],["name/4",[478,0.925]],["text/4",[7,0.793,12,2.607,14,2.458,15,1.079,20,0.881,21,0.834,24,0.93,28,2.286,31,0.939,32,2.776,38,0.954,41,1.515,44,1.508,47,1.204,49,1.82,52,1.494,53,3.155,60,2.49,61,3.185,68,1.447,69,1.811,73,1.467,77,2.637,78,0.986,82,0.944,85,0.997,94,1.195,103,1.544,124,2.618,125,1.195,133,1.613,136,2.759,138,1.015,141,1.363,142,1.509,148,1.591,161,2.306,162,2.873,166,1.052,167,1.306,191,2.012,198,1.613,217,3.226,218,0.916,222,2.012,223,1.214,239,1.394,242,1.072,243,1.079,278,1.176,280,1.141,284,1.509,285,2.558,286,2.487,287,0.885,294,1.214,307,1.613,311,1.087,322,0.97,326,2.306,329,1.052,356,2.054,359,1.429,364,1.124,366,1.294,369,3.126,372,2.374,376,1.204,385,1.429,386,1.447,388,1.225,396,1.079,408,1.333,413,0.935,419,1.348,420,1.109,422,1.141,423,1.235,431,2.445,439,1.109,457,1.557,458,2.078,477,4.501,478,2.494,479,1.856,480,1.856,481,1.613,482,1.394,483,1.856,484,1.856,485,1.756,486,1.488,487,1.509,488,2.665,489,3.175,490,1.856,491,1.269,492,3.839,493,1.124,494,2.759,495,1.856,496,1.856,497,1.124,498,1.856,499,1.856,500,3.761,501,1.363,502,1.677,503,2.934,504,1.856,505,1.333,506,1.613,507,3.761,508,1.856,509,1.348,510,4.007,511,1.269,512,3.616,513,1.981,514,1.109,515,1.176,516,2.192,517,1.333,518,1.557,519,1.856,520,1.584,521,1.677,522,1.802,523,1.856,524,1.306,525,1.32,526,1.856,527,2.759,528,2.51,529,1.269,530,1.613,531,1.856,532,1.856,533,3.084,534,4.161,535,1.802,536,1.856,537,1.856,538,3.164,539,1.856,540,1.856,541,1.856,542,1.856,543,1.856,544,1.856,545,1.856,546,1.094,547,1.856,548,1.584,549,1.363,550,1.856,551,1.429,552,1.856,553,1.488,554,0.911,555,1.715,556,1.363,557,1.235,558,1.195,559,1.856,560,1.856,561,1.258,562,1.533,563,1.856,564,1.856,565,1.856]],["component/4",[1,0.433]],["title/5-1",[38,26.057,39,26.336]],["name/5-1",[]],["text/5-1",[]],["component/5-1",[]],["title/5-2",[38,26.057,61,25.009]],["name/5-2",[]],["text/5-2",[]],["component/5-2",[]],["title/5-3",[38,21.709,138,23.079,185,22.813]],["name/5-3",[]],["text/5-3",[]],["component/5-3",[]],["title/5-4",[41,15.1,120,16.541,207,22.741,273,22.28,402,17.007]],["name/5-4",[]],["text/5-4",[]],["component/5-4",[]],["title/5-5",[66,22.883,566,54.392]],["name/5-5",[]],["text/5-5",[]],["component/5-5",[]],["title/5-6",[12,25.595]],["name/5-6",[]],["text/5-6",[]],["component/5-6",[]],["title/5",[288,32.932]],["name/5",[288,0.95]],["text/5",[1,1.19,12,1.903,13,0.883,14,0.707,15,1.01,17,1.156,18,1.01,20,1.424,21,2.392,24,1.502,31,1.518,32,0.978,34,2.057,36,2.201,38,2.993,39,0.902,40,0.984,41,1.888,43,1.871,44,1.879,47,1.127,49,2.15,52,0.817,53,2.78,55,1.412,56,1.711,57,1.075,60,1.348,61,1.953,62,1.222,64,0.824,66,2.817,68,2.424,69,0.99,75,0.96,77,1.9,78,1.593,81,1.156,82,0.883,85,0.933,87,1.457,88,1.059,103,3.207,109,1.538,110,1.176,120,0.907,121,1.412,124,1.593,138,1.639,140,0.997,143,1.457,147,1.187,150,1.289,162,1.199,163,1.222,166,0.984,167,1.222,182,1.392,185,3.564,186,1.659,187,1.979,189,2.004,191,1.1,192,1.412,195,2.842,196,1.136,199,1.457,201,2.837,204,2.014,207,2.154,208,2.23,218,0.857,222,1.1,230,1.434,233,1.392,250,1.569,266,1.176,270,0.966,275,1.354,277,2.439,280,3.577,281,1.412,284,1.412,285,1.067,288,1.559,300,1.21,304,1.412,305,2.014,309,1.059,319,3.776,329,1.7,358,1.337,360,2.339,364,1.052,365,1.199,366,1.21,369,1.304,372,0.99,373,1.045,378,1.482,396,1.01,400,2.201,402,0.933,406,1.412,417,1.83,420,1.792,422,1.067,423,1.156,429,0.984,440,0.917,452,2.253,460,1.32,477,2.508,478,2.385,482,1.304,486,1.392,487,1.412,492,0.938,493,1.052,500,1.569,502,1.569,507,1.569,510,1.412,521,1.569,529,1.187,554,1.473,561,1.176,567,1.289,568,1.864,569,1.304,570,1.864,571,2.732,572,1.304,573,1.864,574,1.412,575,1.337,576,1.434,577,1.864,578,1.864,579,1.176,580,1.289,581,1.176,582,3.219,583,1.059,584,1.864,585,1.795,586,2.837,587,2.37,588,1.794,589,1.434,590,3.219,591,1.569,592,1.864,593,1.392,594,3.219,595,1.794,596,1.779,597,1.864,598,1.482,599,1.686,600,1.569,601,1.864,602,1.604,603,1.864,604,1.234,605,1.569,606,0.966,607,1.864,608,1.864,609,1.864,610,1.32,611,1.538,612,1.864,613,1.794,614,1.864,615,1.864,616,1.247,617,1.794,618,1.569,619,1.457,620,1.864,621,1.864,622,1.569,623,1.372,624,1.604,625,1.794,626,1.075,627,1.392,628,1.412,629,1.864,630,1.003,631,1.32,632,1.686,633,1.457,634,1.538,635,1.864]],["component/5",[1,0.433]],["title/6-1",[7,13.523,440,16.723,623,25.018,636,19.899,637,19.601]],["name/6-1",[]],["text/6-1",[]],["component/6-1",[]],["title/6-2",[1,15.239,638,33.729]],["name/6-2",[]],["text/6-2",[]],["component/6-2",[]],["title/6-3",[478,25.651,639,32.883]],["name/6-3",[]],["text/6-3",[]],["component/6-3",[]],["title/6-4",[195,19.329,196,23.674,572,27.178,639,23.478]],["name/6-4",[]],["text/6-4",[]],["component/6-4",[]],["title/6-5",[1,12.696,440,22.304,640,42.208]],["name/6-5",[]],["text/6-5",[]],["component/6-5",[]],["title/6-6",[1,15.239,641,44.028]],["name/6-6",[]],["text/6-6",[]],["component/6-6",[]],["title/6",[561,28.606,616,30.33,642,36.681]],["name/6",[643,1.828]],["text/6",[1,0.637,7,4.119,10,0.742,13,1.077,21,0.952,27,1.193,28,1.344,32,0.66,34,1.1,40,0.664,44,0.556,49,0.433,52,0.551,63,2.363,66,0.529,68,0.534,69,0.668,74,2.059,75,1.602,83,0.794,85,0.629,93,0.76,103,0.57,110,0.794,123,0.731,128,0.748,149,1.018,166,2.012,167,1.49,169,0.76,194,1.018,195,3.194,196,2.687,199,1.776,204,0.786,240,0.76,243,0.681,251,0.786,257,0.801,261,0.637,270,0.652,274,0.88,276,0.794,288,0.609,309,0.715,315,0.801,321,0.824,329,0.664,354,0.72,356,0.578,362,1.839,417,0.715,420,1.265,425,1.018,429,0.664,440,3.295,454,1.018,458,1.385,477,3.605,478,2.078,497,1.282,509,0.85,525,0.833,538,1.609,551,0.902,554,0.575,561,2.405,572,1.59,574,0.953,581,0.794,596,1.256,618,1.058,623,0.926,631,1.609,636,1.821,637,0.725,638,1.409,639,4.047,641,2.516,642,7.859,644,1.137,645,0.86,646,1.108,647,1.171,648,1.108,649,0.983,650,1.171,651,1.108,652,0.89,653,1.108,654,1.171,655,1.59,656,0.87,657,0.913,658,1.839,659,1.554,660,1.171,661,3.549,662,1.171,663,3.549,664,2.896,665,2.116,666,1.171,667,1.171,668,1.839,669,2.516,670,3.358,671,1.171,672,1.171,673,1.171,674,1.171,675,1.171,676,1.257,677,1.171,678,2.116,679,1.171,680,2.116,681,1.171,682,1.171,683,1.171,684,1.137,685,1.171,686,1.171,687,1.171,688,2.896,689,1.171,690,1.171,691,0.841,692,1.171,693,1.171,694,1.171,695,1.171,696,1.171,697,1.171,698,1.171,699,1.171,700,1.171,701,2.003,702,0.926,703,1.316,704,1.171,705,1.171,706,2.056,707,1.171,708,2.056,709,1.651,710,1.171,711,1.171,712,1.171,713,1.171,714,1.171,715,5.688,716,1.171,717,1.171,718,1.171,719,1.171,720,1.171,721,1.171,722,1.171,723,1.171,724,1.171,725,1.171,726,1.171,727,1.171,728,1.171,729,1.171,730,1.171,731,1.171,732,1.171,733,1.171,734,1.171,735,1.171,736,1.171,737,1.171,738,1.171,739,1.171,740,1.171,741,1.171,742,1.171,743,1.171,744,1.999,745,0.742,746,1.171,747,5.419,748,1.171,749,1.171,750,2.896,751,1.171,752,2.116,753,1.171,754,2.116,755,1.171,756,1.171,757,1.171,758,0.754,759,0.715,760,1.875,761,1.171,762,1.018,763,1.018,764,1.018,765,0.85,766,1.137,767,2.896,768,2.116,769,1.171,770,1.171,771,0.939,772,0.983,773,0.953,774,0.983,775,1.171,776,2.896,777,1.171,778,1.171,779,1.171,780,1.171,781,1.171,782,1.171,783,1.058,784,0.983,785,1.171,786,1.171,787,4.583,788,0.89,789,0.816,790,1.171,791,1.171,792,1.171,793,1.171,794,1.171,795,1.171,796,1.171,797,1.171,798,1.171,799,1.171,800,1.171,801,1.171,802,1.171,803,1.171,804,1.171,805,1.171,806,0.913,807,1.171,808,2.384,809,0.926,810,0.926,811,1.018,812,1.171,813,1.273,814,1.018,815,1.018]],["component/6",[1,0.433]],["title/7-1",[195,27.072,571,34.979]],["name/7-1",[]],["text/7-1",[]],["component/7-1",[]],["title/7-2",[20,24.059,195,27.072]],["name/7-2",[]],["text/7-2",[]],["component/7-2",[]],["title/7-3",[195,27.072,571,34.979]],["name/7-3",[]],["text/7-3",[]],["component/7-3",[]],["title/7-4",[478,32.075]],["name/7-4",[]],["text/7-4",[]],["component/7-4",[]],["title/7-5",[276,42.934]],["name/7-5",[]],["text/7-5",[]],["component/7-5",[]],["title/7",[195,27.072,580,37.624]],["name/7",[195,0.977]],["text/7",[7,0.719,11,0.629,12,0.68,13,1.485,14,0.685,15,0.979,16,2.618,17,1.943,18,0.979,19,0.573,20,2.819,21,0.41,22,0.612,24,1.175,27,0.948,28,0.781,31,1.187,32,0.948,33,0.606,34,1.219,35,1.33,39,0.875,40,0.517,41,1.118,43,2.657,44,1.113,45,1.196,46,0.752,47,1.092,48,3.031,49,1.704,53,1.525,57,1.042,59,0.73,60,1.538,63,1.12,64,0.433,65,0.839,66,1.745,76,4.025,77,1.849,80,0.577,82,0.464,88,0.556,89,1.382,91,1.462,94,0.586,95,0.72,98,0.507,103,0.443,108,0.541,122,1.807,123,0.568,128,1.074,129,1.209,134,1.312,140,2.219,141,0.669,148,1.175,150,0.677,151,0.792,159,0.693,162,2.015,163,0.641,167,0.641,171,0.693,183,0.693,185,1.267,189,0.461,191,1.485,195,3.28,203,0.564,204,1.574,206,0.662,214,1.421,218,0.45,233,0.73,240,1.522,242,0.972,258,0.711,264,0.52,272,2.491,276,0.617,280,1.034,282,1.279,283,1.13,285,1.794,286,1.005,287,0.435,288,0.474,294,0.596,295,0.544,296,1.295,301,1.027,302,0.792,305,0.612,311,0.533,313,0.778,315,1.151,320,0.684,322,0.476,323,0.792,326,1.222,329,0.517,350,0.778,353,1.462,356,0.83,358,0.701,359,0.701,366,0.635,367,0.778,373,2.058,374,0.701,375,0.612,376,0.591,377,1.589,379,0.792,385,1.295,386,1.312,392,0.591,396,0.979,400,1.721,402,1.838,407,0.792,409,0.662,411,1.173,417,1.027,419,0.662,420,1.005,422,0.56,423,0.606,424,0.72,429,0.517,452,0.684,460,0.693,465,0.792,474,1.721,476,0.894,477,1.849,478,2.156,482,2.57,493,2.342,497,0.552,509,0.662,510,5.947,514,0.544,520,0.778,524,1.184,527,0.792,528,0.72,529,1.151,530,2.972,538,0.693,548,0.778,549,1.235,551,1.295,554,0.826,557,0.606,569,0.684,571,4.366,575,2.634,579,0.617,581,0.617,585,0.763,591,0.823,596,0.541,611,0.807,627,0.73,630,0.526,637,1.807,638,0.606,747,0.792,758,0.586,772,0.765,816,1.682,817,0.885,818,0.911,819,0.792,820,0.911,821,1.39,822,0.669,823,0.792,824,0.778,825,0.911,826,0.842,827,0.792,828,0.885,829,0.911,830,0.911,831,1.249,832,0.862,833,4.479,834,0.911,835,0.885,836,0.862,837,1.436,838,1.634,839,2.491,840,0.911,841,1.634,842,1.684,843,0.911,844,2.034,845,0.752,846,0.911,847,0.862,848,0.911,849,0.911,850,5.002,851,0.885,852,0.911,853,0.911,854,1.295,855,0.72,856,0.885,857,1.462,858,3.493,859,0.792,860,2.037,861,0.911,862,0.778,863,0.911,864,1.936,865,0.741,866,0.911,867,2.834,868,0.701,869,1.101,870,0.792,871,0.911,872,0.911,873,2.918,874,0.911,875,2.276,876,0.765,877,0.677,878,0.701,879,0.911,880,2.247,881,0.911,882,0.911,883,3.243,884,2.218,885,0.823,886,2.972,887,0.911,888,0.911,889,0.885,890,0.596,891,0.911,892,1.592,893,0.885,894,1.592,895,0.701,896,0.648,897,0.911,898,0.778,899,1.665,900,1.592,901,0.911,902,0.842,903,3.42,904,1.634,905,0.911,906,0.862,907,0.911,908,0.568,909,0.669,910,0.911,911,0.885,912,0.655,913,0.911,914,0.911,915,0.72,916,0.911,917,0.911,918,0.752,919,0.911,920,1.295,921,0.885,922,0.911,923,0.911,924,0.911,925,1.49,926,0.911,927,0.911,928,0.911,929,2.918,930,1.312,931,0.765,932,0.911,933,0.911,934,1.682,935,0.885,936,0.862,937,0.823,938,0.911,939,0.778,940,0.911,941,0.911,942,0.778,943,0.842,944,0.911,945,0.911,946,0.911,947,0.862,948,0.765,949,0.842,950,0.911,951,0.911,952,0.577,953,0.72,954,0.911,955,0.823,956,0.911,957,0.885,958,0.911,959,0.911,960,0.911,961,0.862,962,0.911,963,0.752]],["component/7",[1,0.433]],["title/8-1",[476,33.662]],["name/8-1",[]],["text/8-1",[]],["component/8-1",[]],["title/8-2",[217,22.555,218,20.836,513,26.338]],["name/8-2",[]],["text/8-2",[]],["component/8-2",[]],["title/8-3",[439,30.274,964,40.051]],["name/8-3",[]],["text/8-3",[]],["component/8-3",[]],["title/8-4",[13,25.784,203,31.377]],["name/8-4",[]],["text/8-4",[]],["component/8-4",[]],["title/8-5",[148,25.389,965,37.201]],["name/8-5",[]],["text/8-5",[]],["component/8-5",[]],["title/8-6",[290,33.157,965,37.201]],["name/8-6",[]],["text/8-6",[]],["component/8-6",[]],["title/8-7",[203,31.377,966,37.201]],["name/8-7",[]],["text/8-7",[]],["component/8-7",[]],["title/8-8",[967,44.028,968,40.051]],["name/8-8",[]],["text/8-8",[]],["component/8-8",[]],["title/8",[82,25.784,197,21.56]],["name/8",[197,0.436,969,0.89]],["text/8",[7,2.21,12,0.808,13,2.238,14,2.724,20,2.088,21,1.521,28,1.569,41,1.614,49,2.321,52,0.94,53,1.768,57,1.238,65,0.997,66,0.903,78,1.062,140,2.525,148,1.695,166,1.133,191,2.143,197,2.462,200,1.367,203,3.204,217,3.356,218,1.67,227,3.606,257,1.367,261,1.087,262,1.651,278,2.143,286,3.457,287,0.954,290,1.308,295,1.194,322,2.298,356,0.987,368,1.308,373,1.203,396,1.968,402,1.074,408,2.431,413,1.007,420,1.194,439,4.529,491,5.011,501,1.468,511,3.007,513,3.228,546,1.178,554,0.982,583,1.22,587,2.674,638,1.331,812,1.106,837,1.706,890,2.878,908,1.247,952,4.457,964,3.476,965,1.468,966,2.484,968,3.476,970,1.999,971,1.737,972,1.999,973,1.999,974,2.214,975,3.786,976,5.458,977,1.559,978,1.393,979,1.308,980,1.194,981,1.148,982,1.999,983,5.024,984,1.999,985,1.942,986,1.468,987,1.436,988,4.397,989,3.382,990,4.397,991,1.539,992,1.737,993,3.382,994,1.999,995,2.939,996,2.16,997,1.999,998,1.942,999,1.58,1000,1.737,1001,1.58,1002,3.382,1003,1.737,1004,1.559,1005,1.999,1006,1.999,1007,1.999,1008,1.999,1009,1.999,1010,1.999,1011,1.999,1012,1.999,1013,1.999,1014,1.999,1015,1.737,1016,1.999,1017,1.737,1018,1.58,1019,1.999,1020,1.58,1021,1.999,1022,1.999,1023,1.999,1024,1.999,1025,1.999,1026,1.999,1027,1.999,1028,1.999,1029,1.999,1030,1.999,1031,1.999,1032,1.999,1033,1.559,1034,1.706,1035,3.382,1036,1.999,1037,1.999,1038,3.821,1039,1.999,1040,1.355,1041,1.58,1042,1.737,1043,1.651,1044,1.999,1045,1.737,1046,1.999,1047,1.737,1048,3.382,1049,1.355]],["component/8",[1,0.433]],["title/9-1",[476,33.662]],["name/9-1",[]],["text/9-1",[]],["component/9-1",[]],["title/9-2",[287,24.173,981,29.091]],["name/9-2",[]],["text/9-2",[]],["component/9-2",[]],["title/9-3",[322,26.479,981,29.091]],["name/9-3",[]],["text/9-3",[]],["component/9-3",[]],["title/9-4",[413,25.519,981,29.091]],["name/9-4",[]],["text/9-4",[]],["component/9-4",[]],["title/9-5",[981,29.091,996,32.356]],["name/9-5",[]],["text/9-5",[]],["component/9-5",[]],["title/9-6",[812,23.354,981,24.236,1049,28.606]],["name/9-6",[]],["text/9-6",[]],["component/9-6",[]],["title/9",[215,40.051,1050,31.377]],["name/9",[812,0.567,1050,0.635]],["text/9",[1,1.212,7,3.144,13,3.002,14,2.647,15,1.436,16,1.517,19,1.552,20,3.879,21,2.297,28,1.87,31,2.041,44,1.914,49,2.577,66,1.115,68,1.837,85,3.169,208,1.391,240,1.602,270,1.374,285,1.517,287,1.923,289,1.552,295,3.053,311,1.445,322,1.29,354,1.517,364,1.496,368,1.615,375,2.707,376,3.316,390,1.812,392,1.602,396,3.431,408,1.774,413,1.243,415,1.9,419,3.711,431,1.9,513,2.515,546,1.455,554,1.212,567,1.833,575,1.9,606,1.374,669,5.649,758,1.589,759,3.6,811,2.145,812,2.23,823,3.503,878,1.9,908,1.54,931,2.072,939,2.107,964,4.039,974,1.615,975,3.86,979,3.86,981,3.387,1050,3.653,1051,3.915,1052,2.468,1053,2.468,1054,2.468,1055,2.107,1056,2.397,1057,2.468,1058,4.031,1059,2.107,1060,2.072,1061,3.503,1062,2.336,1063,3.187,1064,3.383,1065,2.468,1066,1.925,1067,3.441,1068,2.468,1069,2.397,1070,5.109,1071,4.031,1072,5.109,1073,2.336,1074,4.031,1075,2.468,1076,2.468,1077,2.468,1078,2.468,1079,4.031,1080,2.468,1081,2.468,1082,3.503,1083,4.031,1084,2.397,1085,2.468,1086,2.145,1087,2.468,1088,2.468,1089,2.468,1090,2.468,1091,2.397,1092,1.673,1093,2.468,1094,1.576,1095,2.336,1096,2.336]],["component/9",[1,0.433]],["title/10-1",[476,33.662]],["name/10-1",[]],["text/10-1",[]],["component/10-1",[]],["title/10",[14,20.629,122,31.377]],["name/10",[2,1.51]],["text/10",[4,2.787,7,3.39,12,2.509,14,2.077,20,2.949,27,1.871,31,1.681,44,1.577,49,3.151,53,2.666,60,2.294,61,2.518,78,2.71,80,2.104,122,3.846,138,1.816,148,1.664,171,2.525,197,1.413,208,1.871,214,2.012,215,2.625,226,1.837,261,1.805,286,1.984,287,1.584,290,2.173,295,3.71,300,3.555,321,2.338,369,2.495,413,1.673,422,2.042,428,2.886,458,2.173,476,1.765,492,2.757,501,4.559,513,4.347,515,3.232,517,2.386,518,2.787,546,3.006,554,2.505,585,1.507,812,2.822,813,3.736,814,2.886,815,2.886,876,2.787,908,2.072,971,2.886,974,4.559,975,3.338,976,2.886,977,3.978,979,2.173,1050,3.159,1055,2.835,1063,2.625,1067,2.835,1086,5.396,1094,2.121,1097,3.321,1098,2.386,1099,4.909,1100,3.321,1101,3.321,1102,3.321,1103,3.321,1104,3.321,1105,2.886,1106,2.439,1107,2.315,1108,3.321]],["component/10",[1,0.433]],["title/11-1",[186,23.354,604,30.017,930,32.923]],["name/11-1",[]],["text/11-1",[]],["component/11-1",[]],["title/11-2",[186,23.354,604,30.017,1109,36.031]],["name/11-2",[]],["text/11-2",[]],["component/11-2",[]],["title/11-3",[186,28.031,1110,40.051]],["name/11-3",[]],["text/11-3",[]],["component/11-3",[]],["title/11-4",[187,41.814]],["name/11-4",[]],["text/11-4",[]],["component/11-4",[]],["title/11-5",[186,28.031,1111,40.051]],["name/11-5",[]],["text/11-5",[]],["component/11-5",[]],["title/11-6",[186,23.354,1111,33.368,1112,42.208]],["name/11-6",[]],["text/11-6",[]],["component/11-6",[]],["title/11-7",[1113,50.081]],["name/11-7",[]],["text/11-7",[]],["component/11-7",[]],["title/11-8",[1114,55.054]],["name/11-8",[]],["text/11-8",[]],["component/11-8",[]],["title/11-9",[197,26.959]],["name/11-9",[]],["text/11-9",[]],["component/11-9",[]],["title/11-10",[197,21.56,325,44.028]],["name/11-10",[]],["text/11-10",[]],["component/11-10",[]],["title/11-11",[197,21.56,1115,50.661]],["name/11-11",[]],["text/11-11",[]],["component/11-11",[]],["title/11-12",[1116,37.201,1117,44.028]],["name/11-12",[]],["text/11-12",[]],["component/11-12",[]],["title/11-13",[297,30.067,1110,40.051]],["name/11-13",[]],["text/11-13",[]],["component/11-13",[]],["title/11-14",[197,21.56,1113,40.051]],["name/11-14",[]],["text/11-14",[]],["component/11-14",[]],["title/11-15",[197,21.56,966,37.201]],["name/11-15",[]],["text/11-15",[]],["component/11-15",[]],["title/11-16",[197,21.56,1118,44.028]],["name/11-16",[]],["text/11-16",[]],["component/11-16",[]],["title/11",[138,27.701,148,25.389]],["name/11",[138,0.56,148,0.513]],["text/11",[7,0.909,12,0.329,14,2.364,19,0.953,20,0.72,21,0.682,27,0.459,28,2.134,31,0.412,39,0.788,40,2.431,41,0.388,43,0.508,47,0.528,49,0.301,53,1.392,56,0.865,65,0.756,68,0.691,76,0.573,78,0.433,82,0.414,85,0.437,93,0.528,124,1.668,129,1.528,138,1.717,140,2.462,148,1.066,166,0.462,186,1.972,187,1,188,0.557,189,0.412,197,1.825,200,0.557,209,0.932,214,0.493,217,2.61,218,2.866,223,0.533,227,0.87,264,1.213,276,1.027,279,1.294,286,3.216,287,1.7,290,1.392,291,2.001,292,0.695,297,1.262,301,0.497,309,0.497,322,2.062,326,1.101,356,0.402,365,0.562,368,0.533,372,0.464,376,0.528,391,0.567,396,1.55,398,0.643,402,0.437,409,0.591,410,0.683,411,1.057,413,1.581,429,0.462,447,0.557,469,1.215,491,1.037,497,0.493,505,0.585,506,0.707,511,1.037,514,0.486,529,1.037,546,0.48,554,0.4,557,0.542,558,0.524,598,0.695,606,0.453,630,0.47,638,0.542,645,0.598,659,2.305,691,1.528,702,1.198,709,0.635,806,0.635,827,0.707,842,2.834,845,0.672,869,1.743,890,0.992,908,0.508,930,1.182,942,1.294,952,2.499,965,1.113,967,0.707,968,0.643,979,0.533,986,0.598,987,1.089,992,0.707,996,2.519,1001,0.643,1003,2.315,1004,1.659,1015,1.317,1018,0.643,1020,0.643,1033,0.635,1038,3.428,1040,2.673,1042,0.707,1045,1.317,1047,1.317,1049,2.128,1061,0.707,1092,1.027,1094,0.52,1098,1.528,1107,1.057,1109,1.816,1110,5.006,1111,0.643,1113,0.643,1114,0.707,1116,1.113,1117,1.317,1118,0.707,1119,2.013,1120,0.791,1121,1.182,1122,1.516,1123,0.814,1124,1.516,1125,0.814,1126,1.516,1127,0.814,1128,1.516,1129,0.814,1130,1.516,1131,0.814,1132,1.516,1133,0.814,1134,1.516,1135,0.814,1136,1.516,1137,0.814,1138,0.814,1139,0.814,1140,2.127,1141,0.814,1142,1.516,1143,0.814,1144,0.814,1145,0.814,1146,0.814,1147,0.814,1148,0.814,1149,0.814,1150,0.814,1151,0.814,1152,0.814,1153,0.814,1154,2.127,1155,1.516,1156,2.664,1157,0.814,1158,1.516,1159,1.516,1160,0.814,1161,0.814,1162,2.587,1163,1.516,1164,2.127,1165,3.221,1166,2.728,1167,0.814,1168,1.516,1169,1.516,1170,1.272,1171,0.791,1172,0.814,1173,0.814,1174,0.814,1175,0.814,1176,0.791,1177,1.516,1178,1.516,1179,0.814,1180,1.516,1181,0.814,1182,1.516,1183,0.814,1184,0.814,1185,0.814,1186,0.814,1187,0.814,1188,0.814,1189,0.814,1190,0.814,1191,0.814,1192,0.814,1193,0.814,1194,0.814,1195,0.814,1196,0.814,1197,1.516,1198,0.814,1199,0.814,1200,0.814,1201,0.814,1202,0.814,1203,0.814,1204,1.233,1205,0.814,1206,0.814,1207,0.814,1208,0.814,1209,0.662,1210,0.814,1211,0.814,1212,0.814,1213,0.814,1214,0.814,1215,0.814,1216,0.695,1217,0.814,1218,0.814,1219,0.814,1220,0.814,1221,0.814,1222,0.814,1223,0.814,1224,0.814,1225,0.814,1226,0.814,1227,1.848,1228,0.814,1229,1.848,1230,0.814,1231,0.814,1232,0.814,1233,0.814,1234,0.695,1235,0.814,1236,0.672,1237,0.814,1238,0.695,1239,0.814,1240,0.814,1241,0.77,1242,0.814,1243,0.814,1244,0.814,1245,0.814,1246,0.814,1247,0.814,1248,0.683,1249,0.814,1250,0.707,1251,0.814,1252,0.707,1253,0.814,1254,0.814,1255,0.814,1256,0.814,1257,0.791,1258,0.814,1259,0.791,1260,0.814,1261,0.695,1262,0.814,1263,0.627,1264,0.814,1265,0.736,1266,0.814,1267,0.643,1268,0.814,1269,0.814,1270,0.814,1271,0.814,1272,0.814,1273,0.814,1274,0.814,1275,0.814,1276,0.814,1277,0.814,1278,0.814,1279,0.77,1280,0.814,1281,6.169,1282,0.814,1283,0.814,1284,0.814,1285,0.814,1286,0.814,1287,0.814,1288,0.707,1289,0.814,1290,0.814,1291,0.814,1292,0.814,1293,0.814,1294,0.814,1295,0.814,1296,1.516,1297,0.814,1298,1.516,1299,0.814,1300,1.516,1301,0.814,1302,1.516,1303,0.814,1304,0.707,1305,0.814,1306,0.814,1307,0.814,1308,0.707,1309,0.814,1310,0.707,1311,0.814,1312,0.707,1313,0.814,1314,0.707,1315,0.814,1316,0.814,1317,0.814,1318,0.707,1319,0.814,1320,0.707,1321,0.814,1322,0.814,1323,0.814,1324,0.752,1325,0.814,1326,0.752,1327,0.814,1328,0.814,1329,0.814,1330,0.814,1331,0.814,1332,0.814,1333,0.814,1334,0.814,1335,0.814,1336,0.814,1337,0.814,1338,0.814,1339,0.814,1340,0.814,1341,0.814,1342,0.814,1343,0.814,1344,0.814,1345,0.814,1346,0.814,1347,0.814,1348,0.814,1349,0.814,1350,0.814,1351,0.814,1352,0.814,1353,0.814,1354,0.814,1355,0.814,1356,0.814,1357,0.814,1358,0.814,1359,0.814,1360,2.127,1361,0.791,1362,0.814,1363,0.814,1364,0.672,1365,0.814,1366,0.814,1367,0.814,1368,0.814,1369,0.695,1370,1.516,1371,0.814,1372,1.516,1373,0.814,1374,0.814,1375,0.814,1376,0.814,1377,2.664,1378,0.604,1379,0.791,1380,0.814,1381,0.77,1382,0.814,1383,0.814,1384,1.434,1385,0.814,1386,0.814,1387,0.814,1388,1.516,1389,2.664,1390,0.814,1391,0.707,1392,0.814,1393,0.814,1394,0.814,1395,0.814,1396,0.814,1397,0.814,1398,0.814,1399,0.707,1400,0.707,1401,1.516,1402,0.814,1403,0.707,1404,0.814,1405,0.707,1406,0.814,1407,0.814,1408,0.814,1409,0.814,1410,0.814,1411,0.814,1412,0.814,1413,2.664,1414,0.814,1415,0.814,1416,0.814,1417,0.814,1418,0.814,1419,0.814,1420,0.814,1421,0.707,1422,0.707]],["component/11",[1,0.433]],["title/12-1",[476,33.662]],["name/12-1",[]],["text/12-1",[]],["component/12-1",[]],["title/12-2",[1423,46.518]],["name/12-2",[]],["text/12-2",[]],["component/12-2",[]],["title/12-3",[217,27.072,492,27.382]],["name/12-3",[]],["text/12-3",[]],["component/12-3",[]],["title/12-4",[53,26.479,1106,37.201]],["name/12-4",[]],["text/12-4",[]],["component/12-4",[]],["title/12-5",[513,31.613,975,33.157]],["name/12-5",[]],["text/12-5",[]],["component/12-5",[]],["title/12-6",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/12-6",[]],["text/12-6",[]],["component/12-6",[]],["title/12",[12,14.615,61,17.856,402,19.439,492,19.55]],["name/12",[492,0.554,1106,0.752]],["text/12",[1,1.164,10,1.488,12,1.994,14,0.956,20,2.343,21,1.74,24,1.176,28,2.289,33,2.576,49,2.661,53,2.991,61,2.825,65,1.929,68,1.07,74,1.67,94,1.511,103,1.142,108,1.393,124,1.247,128,1.499,164,3.584,166,1.331,169,1.524,197,0.999,206,1.705,209,2.378,217,4.292,218,2.436,220,1.856,221,1.856,222,3.626,223,3.745,226,2.14,242,1.357,257,1.606,263,1.831,286,2.948,287,1.12,289,1.476,294,2.532,295,1.403,297,1.393,311,1.375,322,2.022,329,1.331,356,1.91,364,2.344,368,3.745,372,1.339,377,1.591,396,1.366,402,2.652,409,1.705,413,1.182,439,1.403,491,4.329,492,3.892,493,1.423,494,3.362,497,1.423,513,3.079,514,1.403,515,2.451,546,2.909,633,1.97,645,2.841,655,1.764,759,1.433,765,1.705,812,1.299,813,3.443,831,1.743,880,1.808,890,1.536,896,1.67,898,2.004,912,1.687,915,1.856,969,2.04,974,4.142,975,2.532,977,1.831,979,2.532,980,1.403,981,2.221,991,1.808,996,1.499,1000,3.362,1041,1.856,1094,2.471,1105,2.04,1106,4.647,1121,1.831,1170,1.97,1261,2.004,1423,2.841,1425,1.465,1427,3.362,1428,1.785,1429,2.04,1430,1.785,1431,2.04,1432,1.856,1433,2.348,1434,2.348,1435,1.882,1436,2.28,1437,2.348,1438,2.348,1439,1.939,1440,2.128,1441,2.348,1442,2.04,1443,2.348,1444,2.348,1445,2.04,1446,2.04]],["component/12",[1,0.433]],["title/13-1",[476,33.662]],["name/13-1",[]],["text/13-1",[]],["component/13-1",[]],["title/13-2",[1423,46.518]],["name/13-2",[]],["text/13-2",[]],["component/13-2",[]],["title/13-3",[217,27.072,492,27.382]],["name/13-3",[]],["text/13-3",[]],["component/13-3",[]],["title/13-4",[60,18.981,297,25.05,1447,36.681]],["name/13-4",[]],["text/13-4",[]],["component/13-4",[]],["title/13-5",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/13-5",[]],["text/13-5",[]],["component/13-5",[]],["title/13-6",[218,20.836,505,30.33,517,30.33]],["name/13-6",[]],["text/13-6",[]],["component/13-6",[]],["title/13-7",[223,27.625,249,33.368,1448,36.681]],["name/13-7",[]],["text/13-7",[]],["component/13-7",[]],["title/13-8",[1449,55.054]],["name/13-8",[]],["text/13-8",[]],["component/13-8",[]],["title/13-9",[1450,55.054]],["name/13-9",[]],["text/13-9",[]],["component/13-9",[]],["title/13-10",[52,29.804]],["name/13-10",[]],["text/13-10",[]],["component/13-10",[]],["title/13-11",[392,32.883,1451,44.028]],["name/13-11",[]],["text/13-11",[]],["component/13-11",[]],["title/13",[12,14.615,60,16.266,402,19.439,492,19.55]],["name/13",[60,0.461,492,0.554]],["text/13",[1,0.315,7,3.324,10,0.349,12,1.317,14,0.427,20,0.909,21,0.247,24,0.525,28,0.486,33,0.698,40,0.594,49,0.387,52,0.9,53,0.548,58,0.441,60,1.814,65,0.954,68,0.872,75,1.059,78,0.797,80,0.349,81,0.366,82,0.533,84,1.046,100,0.478,101,1.663,102,0.895,103,0.268,108,0.327,122,0.341,124,1.218,128,0.351,147,0.376,148,1.323,164,1.09,169,0.974,189,0.279,192,0.448,197,0.446,204,0.704,206,0.4,208,1.078,209,0.338,214,0.333,217,1.583,218,0.517,220,0.435,221,0.435,222,0.664,223,1.728,226,0.58,249,2.577,257,1.309,261,0.299,275,0.429,278,0.349,286,1.77,287,1.094,289,0.346,294,0.686,297,0.327,305,0.37,309,0.336,311,0.322,322,1,352,2.574,356,0.272,364,0.333,368,0.982,376,0.357,377,0.373,396,0.61,398,1.513,402,0.296,413,0.756,415,0.424,423,0.366,439,1.37,488,0.462,491,2.23,492,1.239,493,0.333,497,0.635,501,0.404,505,1.647,511,0.717,512,0.478,514,0.626,515,1.213,517,1.078,525,0.745,546,1.351,554,1.455,567,0.409,606,0.835,610,0.419,628,0.448,630,0.318,645,1.683,655,0.413,668,1.663,691,0.753,702,0.435,709,0.429,758,0.354,759,0.64,813,1.152,844,0.384,855,1.812,869,0.982,880,2.033,896,0.391,899,0.314,912,0.395,915,0.435,952,1.877,953,0.435,974,0.982,975,0.686,981,0.316,986,0.404,987,0.395,991,0.424,996,0.958,999,0.829,1001,1.812,1018,0.435,1020,0.435,1033,0.429,1034,0.47,1040,1.297,1043,0.455,1049,1.554,1060,0.462,1092,0.373,1094,0.958,1098,1.078,1107,0.384,1116,0.404,1121,0.818,1227,0.911,1229,0.478,1288,0.911,1304,0.478,1308,1.992,1310,0.911,1312,1.992,1314,0.478,1318,0.911,1320,1.304,1378,0.409,1391,1.304,1399,0.478,1400,0.478,1403,0.478,1405,0.478,1421,0.478,1422,0.478,1423,0.77,1425,0.654,1427,0.911,1428,0.419,1429,0.911,1430,0.419,1431,0.478,1432,0.829,1445,0.911,1446,0.478,1447,0.911,1448,1.992,1449,0.911,1450,1.304,1451,1.663,1452,0.487,1453,0.478,1454,1.048,1455,1.048,1456,0.55,1457,1.458,1458,1.048,1459,1.048,1460,0.55,1461,1.048,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.048,1469,0.55,1470,1.048,1471,2.962,1472,0.535,1473,0.55,1474,0.55,1475,0.55,1476,1.186,1477,0.55,1478,0.55,1479,0.509,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.292,1485,0.55,1486,5.35,1487,1.914,1488,2.292,1489,1.501,1490,1.501,1491,1.501,1492,2.292,1493,1.914,1494,2.292,1495,1.914,1496,1.048,1497,1.048,1498,2.641,1499,1.048,1500,1.458,1501,2.292,1502,0.55,1503,1.914,1504,1.048,1505,0.462,1506,1.501,1507,2.962,1508,1.914,1509,1.048,1510,1.501,1511,0.55,1512,0.55,1513,1.914,1514,1.048,1515,1.914,1516,1.458,1517,1.048,1518,1.501,1519,1.501,1520,2.641,1521,0.55,1522,1.048,1523,1.914,1524,0.55,1525,1.501,1526,1.914,1527,1.048,1528,0.55,1529,2.292,1530,2.292,1531,2.641,1532,2.292,1533,1.501,1534,1.914,1535,1.048,1536,1.501,1537,1.914,1538,1.501,1539,1.501,1540,2.962,1541,0.55,1542,1.914,1543,1.914,1544,1.048,1545,0.947,1546,1.914,1547,1.501,1548,2.292,1549,0.55,1550,2.292,1551,0.55,1552,1.048,1553,0.55,1554,1.048,1555,3.26,1556,1.914,1557,1.501,1558,1.501,1559,1.048,1560,1.048,1561,0.55,1562,2.641,1563,1.501,1564,1.914,1565,1.914,1566,1.914,1567,1.281,1568,0.55,1569,1.914,1570,1.048,1571,1.048,1572,1.501,1573,1.914,1574,1.048,1575,1.501,1576,2.292,1577,1.501,1578,1.914,1579,1.501,1580,1.501,1581,1.048,1582,1.914,1583,0.55,1584,1.501,1585,1.048,1586,1.501,1587,1.048,1588,1.914,1589,0.55,1590,1.914,1591,0.55,1592,1.501,1593,1.048,1594,1.914,1595,1.048,1596,1.501,1597,1.914,1598,0.55,1599,1.501,1600,1.501,1601,1.048,1602,1.914,1603,1.048,1604,1.048,1605,1.501,1606,1.048,1607,0.55,1608,1.914,1609,1.501,1610,2.962,1611,1.048,1612,1.048,1613,0.55,1614,1.501,1615,1.914,1616,1.501,1617,0.55,1618,1.048,1619,0.55,1620,1.501,1621,0.55,1622,1.048,1623,1.048,1624,1.048,1625,1.501,1626,0.55,1627,1.914,1628,1.048,1629,1.914,1630,1.501,1631,1.501,1632,1.501,1633,0.55,1634,0.55,1635,1.914,1636,1.501,1637,0.55,1638,1.048,1639,0.55,1640,0.55,1641,1.048,1642,1.914,1643,0.55,1644,0.55,1645,1.048,1646,0.55,1647,1.048,1648,0.55,1649,1.048,1650,1.048,1651,0.55,1652,0.55,1653,1.048,1654,1.914,1655,1.914,1656,0.55,1657,1.048,1658,1.048,1659,0.55,1660,1.048,1661,1.048,1662,0.55,1663,1.501,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.501,1670,2.292,1671,1.048,1672,1.048,1673,1.048,1674,0.55,1675,0.55,1676,1.048,1677,1.501,1678,0.55,1679,0.55,1680,1.048,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.497,1686,1.501,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.048,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.048,1704,1.048,1705,1.048,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.535,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.521,1717,0.55,1718,0.55,1719,0.55,1720,0.478,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.535,1726,0.55,1727,0.818,1728,0.55,1729,0.55,1730,0.55,1731,0.535,1732,0.55,1733,0.535,1734,0.55,1735,0.55,1736,0.55,1737,0.357,1738,0.521,1739,0.497,1740,0.535,1741,0.462,1742,1.048,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.048,1750,0.55,1751,1.048,1752,0.55,1753,0.478,1754,0.55]],["component/13",[1,0.433]],["title/14-1",[476,33.662]],["name/14-1",[]],["text/14-1",[]],["component/14-1",[]],["title/14-2",[82,25.784,226,28.031]],["name/14-2",[]],["text/14-2",[]],["component/14-2",[]],["title/14-3",[227,29.091,392,32.883]],["name/14-3",[]],["text/14-3",[]],["component/14-3",[]],["title/14-4",[227,36.376]],["name/14-4",[]],["text/14-4",[]],["component/14-4",[]],["title/14-5",[264,36.145]],["name/14-5",[]],["text/14-5",[]],["component/14-5",[]],["title/14-6",[439,37.856]],["name/14-6",[]],["text/14-6",[]],["component/14-6",[]],["title/14-7",[227,29.091,390,37.201]],["name/14-7",[]],["text/14-7",[]],["component/14-7",[]],["title/14-8",[227,36.376]],["name/14-8",[]],["text/14-8",[]],["component/14-8",[]],["title/14",[226,35.051]],["name/14",[226,1.011]],["text/14",[7,2.215,12,0.81,14,0.816,22,1.347,24,3.152,28,2.045,31,1.015,32,1.911,44,0.952,49,1.628,52,1.595,60,0.902,61,0.99,65,1.691,82,1.726,84,1.398,122,3.21,124,2.341,125,1.291,140,1.151,147,1.371,148,1.005,159,3.351,162,1.384,169,1.301,189,1.717,197,0.853,217,1.071,218,0.99,226,3.48,227,4.858,229,1.742,234,1.742,235,1.742,236,3.829,237,1.742,238,1.742,239,1.506,241,1.631,242,1.159,243,1.166,259,1.411,264,4.827,278,1.27,285,1.233,287,3.196,295,1.198,309,1.224,314,3.166,322,3.029,351,2.49,356,0.99,364,1.215,373,1.206,390,4.619,392,3.761,413,2.61,422,1.233,429,1.137,436,1.711,439,3.463,461,1.742,493,2.055,497,3.141,511,1.371,515,1.27,554,0.985,561,1.359,585,0.91,610,3.351,626,2.1,627,1.607,628,4.216,745,1.27,812,1.876,813,1.206,842,1.441,890,1.312,895,1.544,908,1.251,952,1.27,953,2.681,974,1.312,979,2.219,980,1.198,996,2.166,999,1.585,1004,1.564,1040,2.298,1049,2.298,1063,1.585,1094,2.814,1099,1.585,1107,1.398,1428,1.525,1435,1.607,1476,1.585,1753,5.036,1755,2.005,1756,1.631,1757,5.182,1758,3.391,1759,2.005,1760,3.391,1761,4.406,1762,2.005,1763,2.005,1764,2.005,1765,3.391,1766,3.391,1767,3.391,1768,1.897,1769,4.28,1770,4.406,1771,1.947,1772,3.391,1773,2.005,1774,1.683,1775,1.426,1776,2.005,1777,2.005,1778,1.947,1779,2.005,1780,2.005,1781,2.005,1782,1.711,1783,2.005,1784,5.034]],["component/14",[1,0.433]],["title/15-1",[744,34.979,745,32.102]],["name/15-1",[]],["text/15-1",[]],["component/15-1",[]],["title/15-2",[148,18.128,585,16.411,1066,28.215,1785,31.436]],["name/15-2",[]],["text/15-2",[]],["component/15-2",[]],["title/15-3",[16,19.456,18,18.409,20,15.029,656,23.502,1204,25.743]],["name/15-3",[]],["text/15-3",[]],["component/15-3",[]],["title/15-4",[630,29.278,1786,45.796]],["name/15-4",[]],["text/15-4",[]],["component/15-4",[]],["title/15-5",[75,28.031,1787,44.028]],["name/15-5",[]],["text/15-5",[]],["component/15-5",[]],["title/15-6",[209,31.147,585,22.984]],["name/15-6",[]],["text/15-6",[]],["component/15-6",[]],["title/15-7",[188,24.741,261,19.664,1788,32.04,1789,35.136]],["name/15-7",[]],["text/15-7",[]],["component/15-7",[]],["title/15-8",[585,22.984,1790,46.812]],["name/15-8",[]],["text/15-8",[]],["component/15-8",[]],["title/15-9",[388,41.814]],["name/15-9",[]],["text/15-9",[]],["component/15-9",[]],["title/15-10",[64,30.084]],["name/15-10",[]],["text/15-10",[]],["component/15-10",[]],["title/15-11",[478,32.075]],["name/15-11",[]],["text/15-11",[]],["component/15-11",[]],["title/15-12",[18,29.47,48,28.031]],["name/15-12",[]],["text/15-12",[]],["component/15-12",[]],["title/15-13",[585,19.149,850,32.5,1791,32.923]],["name/15-13",[]],["text/15-13",[]],["component/15-13",[]],["title/15-14",[53,22.061,60,18.981,478,21.371]],["name/15-14",[]],["text/15-14",[]],["component/15-14",[]],["title/15-15",[56,20.639,579,24.515,583,22.078,980,21.615]],["name/15-15",[]],["text/15-15",[]],["component/15-15",[]],["title/15",[1440,34.843]],["name/15",[1440,1.005]],["text/15",[1,1.571,7,3.098,11,0.869,12,1.241,14,0.512,16,1.388,17,1.504,18,2.51,20,2.049,21,1.685,28,1.048,32,0.709,34,1.948,38,1.162,39,0.654,40,2.722,41,1.788,44,0.598,48,2.889,49,2.065,52,1.763,53,1.958,54,1.928,60,1.016,64,1.779,65,0.628,66,1.692,68,1.4,69,0.718,73,0.995,74,2.185,75,3.092,77,2.735,78,2.293,80,1.431,83,1.531,88,0.768,95,0.995,103,1.494,120,1.18,123,0.785,124,0.669,125,0.81,140,0.723,148,0.631,163,0.886,181,1.606,182,1.009,189,1.143,193,1.04,197,0.961,202,0.861,208,2.111,209,1.889,242,1.305,251,0.845,259,2.163,261,3.369,264,1.753,266,1.531,270,0.701,273,0.886,277,1.024,278,0.797,283,1.517,287,1.078,288,0.654,289,1.932,300,0.877,301,1.378,322,1.606,354,0.774,356,1.516,372,2.979,373,0.757,382,3.51,391,0.877,402,1.214,413,0.634,417,0.768,429,0.714,447,0.861,477,1.431,478,1.555,514,3.532,516,1.559,528,0.995,529,0.861,554,0.618,557,0.838,558,1.978,574,1.024,576,1.04,583,0.768,585,2.682,589,1.865,598,1.074,600,1.138,604,0.895,606,2.086,624,1.163,626,1.399,630,1.305,631,2.849,634,1.115,636,2.356,637,1.399,656,3.878,744,2.587,745,3.042,760,2,764,1.094,765,2.721,789,0.877,808,1.517,809,0.995,850,2.885,854,2.365,865,1.837,883,1.056,896,1.606,899,1.289,952,0.797,963,1.865,987,1.623,1040,0.853,1050,0.779,1066,1.762,1099,0.995,1204,3.048,1216,1.074,1425,0.785,1440,0.692,1476,0.995,1727,0.982,1739,1.138,1741,1.056,1785,1.963,1786,2.042,1787,1.094,1788,2.721,1791,2.922,1792,1.094,1793,1.222,1794,1.259,1795,1.259,1796,1.222,1797,4.825,1798,1.259,1799,1.259,1800,1.259,1801,1.259,1802,1.259,1803,1.259,1804,1.259,1805,1.259,1806,1.259,1807,1.259,1808,1.896,1809,1.259,1810,1.259,1811,0.969,1812,1.191,1813,1.191,1814,1.04,1815,1.222,1816,1.259,1817,1.259,1818,1.094,1819,0.995,1820,1.094,1821,0.957,1822,1.259,1823,2.258,1824,3.072,1825,1.259,1826,2.538,1827,1.259,1828,1.259,1829,1.259,1830,1.222,1831,1.259,1832,1.259,1833,1.351,1834,1.351,1835,3.298,1836,1.351,1837,1.785,1838,1.301,1839,1.259,1840,1.259,1841,1.259,1842,1.259,1843,1.222,1844,1.259,1845,2.258,1846,1.115,1847,1.259,1848,1.259,1849,2.258,1850,1.259,1851,1.351,1852,1.301,1853,1.301,1854,1.115,1855,1.301,1856,1.259,1857,1.301,1858,1.301,1859,1.301,1860,1.115,1861,1.115,1862,1.301,1863,1.301,1864,1.301,1865,1.04,1866,1.115,1867,2.194,1868,1.163,1869,1.301,1870,0.935]],["component/15",[1,0.433]],["title/16-1",[183,38.526,202,34.652]],["name/16-1",[]],["text/16-1",[]],["component/16-1",[]],["title/16-2",[52,23.834,77,32.102]],["name/16-2",[]],["text/16-2",[]],["component/16-2",[]],["title/16-3",[12,20.469,39,26.336]],["name/16-3",[]],["text/16-3",[]],["component/16-3",[]],["title/16-4",[22,34.027,61,25.009]],["name/16-4",[]],["text/16-4",[]],["component/16-4",[]],["title/16-5",[12,17.053,19,26.54,60,18.981]],["name/16-5",[]],["text/16-5",[]],["component/16-5",[]],["title/16-6",[12,20.469,1871,44.028]],["name/16-6",[]],["text/16-6",[]],["component/16-6",[]],["title/16-7",[855,54.823]],["name/16-7",[]],["text/16-7",[]],["component/16-7",[]],["title/16",[478,32.075]],["name/16",[478,0.925]],["text/16",[7,4.34,11,4.154,12,1.276,15,0.758,16,1.942,19,0.819,21,1.42,39,1.211,49,2.328,52,0.613,60,2.561,61,3.111,69,1.802,77,2.435,88,1.421,89,0.768,123,0.813,129,1.673,181,4.05,189,0.659,195,0.696,208,1.78,218,1.15,274,0.979,285,1.942,288,0.677,366,1.623,424,2.497,440,0.688,477,0.825,481,1.132,487,1.059,516,0.899,562,1.076,571,1.608,572,3.686,576,3.649,585,2.004,596,0.773,606,0.725,626,1.442,762,1.132,763,4.264,808,2.121,819,1.132,821,1.076,862,3.281,980,0.778,986,0.956,1263,1.003,1267,3.038,1837,3.492,1860,3.913,1861,1.154,1865,1.924,1866,2.063,1868,1.203,1871,1.132,1872,1.302,1873,3.843,1874,2.329,1875,3.158,1876,1.302,1877,1.302,1878,1.302,1879,1.302,1880,2.329,1881,3.843,1882,1.593,1883,2.329,1884,2.329,1885,1.302,1886,1.302,1887,5.328,1888,5.328,1889,2.329,1890,1.302,1891,0.99,1892,1.302,1893,1.302,1894,2.329,1895,1.302,1896,1.302,1897,1.302,1898,1.302,1899,4.264,1900,5.694,1901,3.843,1902,5.694,1903,1.302,1904,1.302,1905,1.302,1906,3.637,1907,3.843,1908,3.843,1909,1.302,1910,1.302,1911,1.302,1912,3.843,1913,3.843,1914,1.302,1915,3.158,1916,1.302,1917,1.302,1918,3.158,1919,1.302,1920,1.302,1921,3.158,1922,1.302,1923,1.302,1924,3.158,1925,3.158,1926,1.302,1927,3.158,1928,4.906,1929,1.302,1930,1.302,1931,2.152,1932,2.204,1933,2.329,1934,2.329,1935,2.329,1936,2.329,1937,3.158,1938,2.329,1939,2.329,1940,2.329,1941,2.329,1942,1.302,1943,2.329,1944,1.203,1945,1.302,1946,2.329,1947,2.329,1948,1.302,1949,1.302,1950,1.302,1951,1.302,1952,1.302,1953,1.302,1954,1.302,1955,1.302,1956,1.302,1957,1.302,1958,1.302,1959,1.302,1960,1.177,1961,1.302,1962,1.302,1963,2.329]],["component/16",[1,0.433]],["title/17-1",[64,30.084]],["name/17-1",[]],["text/17-1",[]],["component/17-1",[]],["title/17-2",[14,20.629,1050,31.377]],["name/17-2",[]],["text/17-2",[]],["component/17-2",[]],["title/17-3",[38,21.709,41,20.139,185,22.813]],["name/17-3",[]],["text/17-3",[]],["component/17-3",[]],["title/17",[1964,49.413]],["name/17",[1964,1.426]],["text/17",[1,1.791,7,3.975,10,0.705,13,0.808,14,0.823,15,0.924,17,0.39,24,0.294,27,1.36,28,0.272,31,1.405,32,0.627,34,1.05,36,0.43,38,2.588,39,0.305,41,0.531,43,0.366,44,1.318,48,0.324,49,1.025,60,0.263,61,0.289,62,0.783,64,2.552,65,0.792,66,1.669,68,1.804,75,0.615,78,0.844,81,0.741,82,0.298,83,1.076,89,0.345,103,1.511,110,0.754,117,0.783,120,0.581,123,0.366,130,0.5,138,0.868,154,0.967,166,2.244,185,3.776,186,0.879,187,1.048,188,0.761,189,1.222,191,0.371,197,1.573,200,0.401,202,1.898,226,0.324,240,0.722,242,0.643,243,0.341,251,0.393,258,0.457,259,0.783,261,0.605,264,0.334,266,0.754,270,1.545,280,0.36,287,1.152,288,0.578,290,0.383,296,0.451,297,0.66,299,1.38,301,0.679,303,0.492,304,2.257,305,0.747,310,1.38,312,1.695,317,0.492,321,0.783,329,0.631,354,1.484,356,0.784,357,1.312,365,0.404,372,0.334,373,0.352,374,0.451,381,0.477,388,0.387,391,0.408,406,0.477,411,0.408,413,0.8,417,0.358,418,1.756,420,0.35,422,0.36,429,0.631,440,0.31,445,1.836,446,0.967,447,0.401,452,2.334,458,0.383,469,0.47,474,0.43,475,0.905,486,0.47,493,0.962,516,0.404,546,0.345,553,0.47,554,0.78,556,0.817,558,1.554,579,0.397,581,0.754,585,0.266,593,0.47,596,0.66,602,0.541,604,0.417,605,1.436,606,0.884,616,1.141,619,0.492,626,1.251,630,0.339,633,0.492,636,4.228,637,3.116,639,1.311,652,0.445,657,2.883,659,0.43,758,1.301,759,1.233,771,0.892,784,0.492,788,0.846,789,0.775,806,0.457,808,0.393,812,0.615,813,1.216,831,0.435,842,0.799,844,0.408,854,0.451,857,0.509,868,0.451,869,0.728,870,0.509,877,0.826,890,0.728,895,0.451,899,1.583,909,0.43,912,0.799,918,0.484,920,0.856,966,0.817,978,0.775,995,0.509,1050,0.363,1059,0.5,1064,0.934,1092,1.636,1209,0.477,1234,0.949,1236,3.471,1238,0.5,1248,0.934,1250,1.756,1252,0.967,1263,0.451,1267,4.601,1364,0.484,1369,0.949,1378,1.179,1432,0.463,1442,0.509,1505,2.329,1567,0.5,1685,0.53,1720,0.509,1727,0.868,1737,0.722,1756,0.477,1774,0.934,1775,0.417,1782,0.5,1791,0.868,1808,2.608,1811,0.451,1814,1.312,1819,1.908,1820,0.509,1821,2.362,1870,0.435,1882,0.401,1891,0.445,1965,0.586,1966,0.586,1967,1.08,1968,0.541,1969,1.149,1970,3.107,1971,3.107,1972,3.107,1973,2.02,1974,3.107,1975,2.652,1976,3.977,1977,3.335,1978,2.979,1979,2.775,1980,2.626,1981,3.107,1982,1.467,1983,1.112,1984,1.588,1985,1.503,1986,1.542,1987,1.588,1988,1.705,1989,1.112,1990,0.605,1991,0.629,1992,0.605,1993,0.629,1994,0.629,1995,1.25,1996,1.25,1997,0.629,1998,0.569,1999,0.629,2000,0.629,2001,0.586,2002,0.586,2003,0.586,2004,1.588,2005,1.588,2006,0.554,2007,0.586,2008,0.586,2009,0.569,2010,0.586,2011,0.586,2012,0.586,2013,0.586,2014,0.554,2015,0.569,2016,0.892,2017,1.669,2018,1.333,2019,0.509,2020,0.509,2021,0.509,2022,1.005,2023,0.5,2024,1.112,2025,0.586,2026,0.53,2027,1.028,2028,0.53,2029,1.005,2030,0.586,2031,1.112,2032,1.112,2033,4.036,2034,3.696,2035,2.02,2036,1.112,2037,1.112,2038,1.588,2039,1.112,2040,1.053,2041,0.586,2042,0.53,2043,0.554,2044,0.569,2045,0.484,2046,0.554,2047,0.509,2048,0.586,2049,0.586,2050,0.586,2051,1.112,2052,1.112,2053,0.519,2054,0.586,2055,0.586,2056,1.112,2057,1.112,2058,0.586,2059,0.586,2060,0.569,2061,0.586,2062,0.586,2063,0.586,2064,2.02,2065,0.586,2066,1.112,2067,0.586,2068,0.967,2069,1.08,2070,0.554,2071,0.586,2072,0.586,2073,0.586,2074,0.629,2075,0.629,2076,0.629,2077,0.629,2078,0.586,2079,0.586,2080,0.509,2081,0.509,2082,0.509,2083,0.509,2084,0.586,2085,0.586,2086,0.586,2087,0.586,2088,0.541,2089,0.586,2090,0.53,2091,0.586,2092,0.457,2093,0.509,2094,0.586,2095,0.541,2096,0.541,2097,0.554,2098,0.586,2099,0.586,2100,0.586,2101,0.586,2102,0.586,2103,0.586,2104,1.112,2105,1.112,2106,4.431,2107,4.431,2108,1.112,2109,0.629,2110,0.629,2111,3.958,2112,1.112,2113,1.112,2114,3.413,2115,1.028,2116,2.775,2117,1.112,2118,1.112,2119,0.569,2120,0.905,2121,0.554,2122,0.586,2123,0.569,2124,0.586,2125,0.586,2126,0.586,2127,0.569,2128,0.586,2129,0.586,2130,0.554,2131,0.586,2132,1.112]],["component/17",[1,0.433]],["title/18-1",[56,20.639,579,24.515,583,22.078,980,21.615]],["name/18-1",[]],["text/18-1",[]],["component/18-1",[]],["title/18-2",[2133,63.349]],["name/18-2",[]],["text/18-2",[]],["component/18-2",[]],["title/18-3",[22,21.256,56,18.057,583,19.316,2134,30.74,2135,25.018]],["name/18-3",[]],["text/18-3",[]],["component/18-3",[]],["title/18-4",[56,20.639,63,24.082,859,31.436,2136,38.835]],["name/18-4",[]],["text/18-4",[]],["component/18-4",[]],["title/18-5",[1116,37.201,1440,27.865]],["name/18-5",[]],["text/18-5",[]],["component/18-5",[]],["title/18",[583,38.666]],["name/18",[583,1.116]],["text/18",[1,0.926,7,3.652,14,1.253,21,1.384,24,1.542,49,1.137,52,1.448,56,4.586,68,2.191,89,1.814,131,2.844,161,4.298,214,1.865,261,2.614,264,1.756,270,1.713,280,1.892,283,2.067,288,3.076,291,3.613,309,1.879,314,2.212,320,2.313,329,1.745,356,1.519,358,2.37,373,1.852,382,2.504,440,3.127,460,2.341,509,2.235,516,2.125,558,1.981,579,2.086,580,3.571,583,5.217,585,2.685,606,2.677,619,2.583,630,2.779,744,3.32,745,1.95,845,2.542,859,2.675,875,3.751,878,2.37,899,1.756,920,2.37,925,2.726,980,2.873,1116,2.26,1165,4.347,1324,2.844,1326,2.844,1440,1.693,1453,2.675,1737,3.121,1811,2.37,1837,2.433,1846,2.726,1870,2.286,1882,2.105,1944,5.468,1975,2.627,2033,2.675,2120,3.912,2133,5.918,2134,2.99,2135,2.433,2137,3.459,2138,3.304,2139,5.163,2140,3.304,2141,3.304,2142,2.912,2143,3.078,2144,3.304,2145,3.304,2146,3.304,2147,3.304,2148,3.304,2149,3.459,2150,3.304,2151,3.459,2152,3.459,2153,3.304,2154,3.459,2155,3.459,2156,5.405,2157,3.181,2158,3.459]],["component/18",[1,0.433]],["title/19-1",[14,17.187,1882,28.87,2092,32.923]],["name/19-1",[]],["text/19-1",[]],["component/19-1",[]],["title/19-2",[585,19.149,1425,26.338,2135,33.368]],["name/19-2",[]],["text/19-2",[]],["component/19-2",[]],["title/19-3",[49,15.596,1737,27.396,1775,30.017]],["name/19-3",[]],["text/19-3",[]],["component/19-3",[]],["title/19-4",[48,20.014,810,28.596,909,26.562,2159,31.436]],["name/19-4",[]],["text/19-4",[]],["component/19-4",[]],["title/19-5",[1854,44.874,2160,47.94]],["name/19-5",[]],["text/19-5",[]],["component/19-5",[]],["title/19",[2161,50.081]],["name/19",[2161,1.445]],["text/19",[1,1.505,7,2.686,12,0.636,14,1.494,18,1.601,21,1.238,24,1.38,28,2.321,38,0.809,41,1.313,44,1.307,48,2.768,49,1.356,52,1.726,60,1.238,61,0.777,63,1.048,64,1.307,65,1.373,66,1.243,68,0.717,76,1.108,81,1.048,84,1.097,85,0.846,88,0.96,89,0.928,90,1.212,93,1.021,103,0.765,108,0.934,117,1.938,141,1.155,185,1.983,189,0.797,196,1.03,197,0.67,208,0.887,218,0.777,226,0.871,241,1.28,259,1.108,263,1.227,270,1.532,287,1.313,288,1.431,294,1.03,297,0.934,300,1.097,301,1.68,311,0.921,314,1.131,315,1.076,329,0.892,351,1.155,354,1.692,365,1.086,371,1.343,372,1.571,375,1.057,377,1.066,388,1.039,391,1.097,413,0.793,417,1.68,429,0.892,440,2.326,445,3.804,447,1.076,448,2.901,470,1.422,515,1.744,524,1.108,549,1.155,557,1.048,558,1.013,569,1.182,581,1.066,585,0.714,596,1.634,606,2.043,626,2.727,630,0.909,636,4.15,637,3.098,649,1.321,652,1.197,658,1.367,659,1.155,691,1.131,744,1.901,745,1.744,759,2.24,765,1.143,774,1.321,788,1.197,789,4.13,808,1.057,809,2.176,810,1.244,812,1.523,813,1.656,824,3.132,844,1.097,868,4.561,869,1.03,875,1.227,877,2.725,886,1.367,899,0.898,909,1.155,978,1.097,1017,1.367,1041,1.244,1082,1.367,1092,1.866,1098,1.131,1166,1.367,1265,1.422,1425,1.718,1430,1.197,1440,0.865,1452,1.394,1737,1.021,1775,1.119,1792,1.367,1818,1.367,1819,1.244,1821,2.79,1865,1.3,1870,2.044,1882,1.076,1891,1.197,1899,3.189,1960,1.422,1964,1.227,2016,1.261,2017,3.031,2018,3.08,2019,1.367,2020,1.367,2021,1.367,2022,1.422,2023,1.343,2026,1.422,2028,1.422,2029,3.317,2045,3.031,2047,2.392,2068,1.367,2080,1.367,2081,1.367,2082,1.367,2083,1.367,2092,1.227,2093,1.367,2120,1.28,2135,4.349,2159,1.367,2160,1.489,2162,2.674,2163,1.573,2164,1.573,2165,1.573,2166,1.422,2167,1.573,2168,1.528,2169,1.573,2170,1.573,2171,1.573,2172,1.573,2173,1.573,2174,1.573,2175,1.454,2176,1.573,2177,1.573,2178,1.528,2179,2.753,2180,1.573,2181,1.573,2182,1.573,2183,1.573,2184,1.573,2185,1.573,2186,1.528,2187,1.573,2188,1.454,2189,1.573,2190,1.489,2191,1.573,2192,1.528,2193,1.573,2194,1.573,2195,1.573,2196,1.573,2197,1.573,2198,1.573,2199,1.689,2200,2.955,2201,1.689,2202,1.689,2203,1.689,2204,1.689,2205,1.689,2206,1.689,2207,1.689,2208,1.689,2209,1.689,2210,1.689,2211,1.689,2212,1.689,2213,1.689,2214,1.689,2215,1.689,2216,1.689,2217,3.94,2218,2.955,2219,1.689,2220,1.689,2221,1.689,2222,3.94,2223,1.626,2224,1.689,2225,1.689]],["component/19",[1,0.433]],["title/20-1",[0,63.349]],["name/20-1",[]],["text/20-1",[]],["component/20-1",[]],["title/20",[1,19.056]],["name/20",[2,1.51]],["text/20",[1,1.72,3,2.918,4,2.449,5,2.918,6,2.918,7,1.247,8,2.918,9,2.918,10,1.849,11,2.014,12,2.858,13,2.347,14,1.878,15,3.325,16,3.515,17,3.07,18,3.325,19,2.899,20,1.386,21,1.312,22,1.96,23,2.834,24,2.311,25,2.584,26,2.918,27,1.644,28,1.354,29,2.696,30,2.41,31,1.477,32,2.598,33,1.942,34,1.517,35,2.307,36,2.142,37,2.536,38,1.501,39,1.517,40,2.614,41,2.728,42,2.918,43,1.821,44,2.19,45,2.075,46,2.41,47,1.894,48,3.163,49,1.078,50,2.918,51,2.761,52,1.373,53,2.41,54,2.491,55,2.373,56,3.262,57,2.856,58,4.583,59,2.339,60,1.312,61,1.44,62,2.054,63,1.942,64,1.386,65,2.299,66,1.318,67,2.307,68,1.33,69,1.665,70,2.41,71,2.761,72,2.918,73,2.307,74,2.075,75,1.614,76,2.054,77,1.849,78,1.55,79,2.918,80,1.849,81,1.942,82,2.347,83,1.977,84,2.034,85,1.568,86,2.918,87,2.449,88,1.781,89,1.72,90,4.402,91,2.536,92,2.918,93,3.711,94,1.878,95,2.307,96,2.918,97,2.918,98,1.624,99,2.918,100,2.536,101,2.536,102,2.491,103,1.419,104,2.918,105,2.918,106,2.918,107,2.41,108,1.732,109,2.584,110,1.977,111,2.918,112,2.918,113,2.584,114,2.761,115,2.918,116,2.834]],["component/20",[1,0.433]],["title/21-1",[117,44.6]],["name/21-1",[]],["text/21-1",[]],["component/21-1",[]],["title/21-2",[118,63.349]],["name/21-2",[]],["text/21-2",[]],["component/21-2",[]],["title/21-3",[119,50.661,120,26.479]],["name/21-3",[]],["text/21-3",[]],["component/21-3",[]],["title/21-4",[121,41.211,122,31.377]],["name/21-4",[]],["text/21-4",[]],["component/21-4",[]],["title/21-5",[13,25.784,121,41.211]],["name/21-5",[]],["text/21-5",[]],["component/21-5",[]],["title/21-6",[123,39.531]],["name/21-6",[]],["text/21-6",[]],["component/21-6",[]],["title/21",[124,26.92,125,32.616]],["name/21",[124,0.544,125,0.66]],["text/21",[1,1.323,13,1.017,14,2.355,16,2.079,18,1.968,21,2.326,28,1.569,31,1.012,34,1.039,38,2.66,39,1.039,40,1.133,41,1.614,43,1.247,49,2.472,56,1.14,57,1.238,61,0.987,64,1.606,66,0.903,68,0.911,69,1.93,80,1.267,82,1.017,83,1.355,85,1.074,88,2.064,94,1.287,103,2.516,107,1.651,108,1.186,110,1.355,117,2.381,120,1.045,122,2.723,123,3.228,124,2.748,125,1.287,126,3.382,127,1.999,128,2.808,129,1.436,130,1.706,131,1.847,132,1.999,133,2.939,134,1.559,135,1.999,136,5.027,137,3.382,138,1.849,139,1.942,140,1.148,141,1.468,142,1.626,143,1.678,144,2.839,145,1.999,146,1.891,147,2.313,148,1.002,149,1.737,150,1.484,151,1.737,152,1.999,153,1.999,154,1.737,155,1.847,156,1.999,157,1.999,158,3.201,159,1.52,160,3.285,161,3.193,162,3.571,163,2.381,164,1.452,165,3.382,166,1.133,167,3.641,168,1.999,169,1.297,170,4.397,171,1.52,172,1.737,173,1.942,174,1.999,175,1.891,176,1.999,177,1.942,178,1.999,179,1.891,180,1.999,181,1.422,182,2.712,183,2.572,184,1.999,185,1.828,186,1.106,187,1.319,188,1.367,189,1.713,190,1.999,191,2.143,192,2.751,193,3.632,194,1.737,195,1.068,196,1.308,197,1.871,198,1.737,199,1.678,200,1.367,201,1.891,202,1.367,203,2.723,204,1.343,205,1.999,206,1.452,207,1.436,208,1.126,209,1.229,210,1.891,211,1.942,212,2.572,213,1.999,214,1.211,215,1.58,216,1.999,217,1.068,218,0.987,219,1.999,220,1.58,221,1.58,222,1.267,223,1.308,224,1.999,225,1.999,226,1.106,227,1.942,228,1.999,229,1.737,230,2.794,231,1.999,232,1.999,233,1.602,234,1.737,235,1.737,236,1.737,237,1.737,238,1.737,239,1.502,240,1.297,241,1.626,242,1.155,243,1.163,244,2.146,245,2.066,246,1.807,247,2.066,248,2.146,249,2.674,250,1.807,251,1.343,252,1.999,253,1.999,254,1.999,255,1.999,256,1.999,257,1.367,258,1.559,259,1.407,260,1.999,261,1.087,262,1.651,263,1.559,264,1.14,265,1.999]],["component/21",[1,0.433]],["title/22-1",[38,21.709,185,22.813,266,28.606]],["name/22-1",[]],["text/22-1",[]],["component/22-1",[]],["title/22-2",[267,31.647,268,30.74,269,31.647,270,17.616,271,29.242]],["name/22-2",[]],["text/22-2",[]],["component/22-2",[]],["title/22-3",[34,21.942,49,15.596,120,22.061]],["name/22-3",[]],["text/22-3",[]],["component/22-3",[]],["title/22-4",[85,22.683,120,22.061,203,26.142]],["name/22-4",[]],["text/22-4",[]],["component/22-4",[]],["title/22-5",[120,26.479,272,43.247]],["name/22-5",[]],["text/22-5",[]],["component/22-5",[]],["title/22-6",[120,26.479,273,35.667]],["name/22-6",[]],["text/22-6",[]],["component/22-6",[]],["title/22-7",[274,38.065,275,39.517]],["name/22-7",[]],["text/22-7",[]],["component/22-7",[]],["title/22-8",[276,42.934]],["name/22-8",[]],["text/22-8",[]],["component/22-8",[]],["title/22",[64,24.059,207,36.405]],["name/22",[120,0.536,273,0.721]],["text/22",[1,0.804,7,1.838,12,0.43,13,0.541,14,0.433,15,0.619,20,0.921,21,1.934,24,0.972,27,0.599,28,0.9,30,0.878,31,1.353,32,1.093,33,0.708,34,1.008,36,1.424,37,0.924,38,1.696,40,1.1,41,0.507,43,0.664,44,0.505,45,0.756,47,1.735,49,1.416,52,1.258,55,0.865,57,0.659,62,0.749,63,2.195,64,2.237,65,1.911,66,2.685,67,0.841,68,2.709,69,1.107,75,1.479,85,1.772,89,1.143,93,0.69,94,0.685,103,2.092,108,0.631,110,0.721,120,3.627,134,0.83,138,1.06,140,2.469,144,0.893,161,0.772,163,2.321,166,1.516,172,0.924,181,1.901,185,4.112,188,1.327,189,0.982,197,1.138,200,0.727,202,0.727,203,4.394,207,0.764,208,1.093,209,0.654,214,0.645,217,0.568,227,1.535,240,0.69,242,0.615,243,0.619,246,0.961,251,0.714,261,0.578,266,2.914,273,2.699,277,3.118,278,1.229,279,1.656,280,3.655,281,3.118,282,0.809,283,1.303,284,0.865,285,0.654,286,1.597,287,1.275,288,1.008,289,0.669,290,1.75,291,2.88,292,2.282,293,0.908,294,1.75,295,1.159,296,2.058,297,0.631,298,1.792,299,0.924,300,1.352,301,0.649,302,0.924,303,1.628,304,2.175,305,1.303,306,1.064,307,0.924,308,1.064,309,0.649,310,0.924,311,1.565,312,3.609,313,0.908,314,0.764,315,1.327,316,1.006,317,0.893,318,1.064,319,1.555,320,1.457,321,0.749,322,1.397,323,2.323,324,1.064,325,0.924,326,1.409,327,2.323,328,1.064,329,1.516,330,1.064,331,1.064,332,1.064,333,1.064,334,1.064,335,1.064,336,1.064,337,1.064,338,1.064,339,1.064,340,1.064,341,1.064,342,1.064,343,1.064,344,1.064,345,1.064,346,1.064,347,1.064,348,1.064,349,1.064,350,0.908,351,0.781,352,1.685,353,0.924,354,1.192,355,1.064,356,0.525,357,1.602,358,1.493,359,1.493,360,0.83,361,1.939,362,2.865,363,0.961,364,1.175,365,1.339,366,1.352,367,0.908,368,1.269,369,0.799,370,1.064,371,0.908,372,1.107,373,1.167,374,0.819,375,2.214,376,1.259,377,1.314,378,0.908,379,2.865,380,1.064,381,4.126,382,1.578,383,1.064,384,1.064,385,2.058,386,0.83,387,1.939,388,1.28,389,1.064,390,0.781,391,0.741,392,0.69,393,3.834,394,1.064,395,1.064,396,1.555,397,1.064,398,0.841,399,1.064,400,0.781,401,1.939,402,1.772,403,1.939,404,1.064,405,2.673,406,1.578,407,0.924,408,0.764,409,0.772,410,1.628,411,0.741,412,1.064,413,1.347,414,1.006,415,1.493,416,1.939,417,0.649,418,0.924,419,1.409,420,1.159,421,1.064,422,0.654,423,0.708,424,0.841,425,0.924,426,1.064,427,0.983,428,0.924,429,0.603,430,1.064,431,0.819,432,1.064,433,0.961,434,1.064,435,1.064,436,0.908,437,1.064,438,1.064,439,0.636,440,0.562,441,1.006,442,1.064,443,1.064,444,1.064,445,0.809,446,0.924,447,0.727,448,0.841,449,1.064,450,1.064,451,1.033,452,0.799,453,1.064,454,0.924,455,1.064,456,1.064,457,1.628,458,0.696,459,1.064,460,0.809,461,0.924,462,1.064,463,1.064,464,1.064,465,0.924,466,1.064,467,1.064,468,1.064,469,0.853,470,0.961,471,1.064,472,1.064,473,1.006,474,0.781,475,0.865]],["component/22",[1,0.433]],["title/23-1",[476,33.662]],["name/23-1",[]],["text/23-1",[]],["component/23-1",[]],["title/23-2",[477,40.142]],["name/23-2",[]],["text/23-2",[]],["component/23-2",[]],["title/23-3",[124,33.662]],["name/23-3",[]],["text/23-3",[]],["component/23-3",[]],["title/23",[478,32.075]],["name/23",[478,0.925]],["text/23",[7,0.793,12,2.607,14,2.458,15,1.079,20,0.881,21,0.834,24,0.93,28,2.286,31,0.939,32,2.776,38,0.954,41,1.515,44,1.508,47,1.204,49,1.82,52,1.494,53,3.155,60,2.49,61,3.185,68,1.447,69,1.811,73,1.467,77,2.637,78,0.986,82,0.944,85,0.997,94,1.195,103,1.544,124,2.618,125,1.195,133,1.613,136,2.759,138,1.015,141,1.363,142,1.509,148,1.591,161,2.306,162,2.873,166,1.052,167,1.306,191,2.012,198,1.613,217,3.226,218,0.916,222,2.012,223,1.214,239,1.394,242,1.072,243,1.079,278,1.176,280,1.141,284,1.509,285,2.558,286,2.487,287,0.885,294,1.214,307,1.613,311,1.087,322,0.97,326,2.306,329,1.052,356,2.054,359,1.429,364,1.124,366,1.294,369,3.126,372,2.374,376,1.204,385,1.429,386,1.447,388,1.225,396,1.079,408,1.333,413,0.935,419,1.348,420,1.109,422,1.141,423,1.235,431,2.445,439,1.109,457,1.557,458,2.078,477,4.501,478,2.494,479,1.856,480,1.856,481,1.613,482,1.394,483,1.856,484,1.856,485,1.756,486,1.488,487,1.509,488,2.665,489,3.175,490,1.856,491,1.269,492,3.839,493,1.124,494,2.759,495,1.856,496,1.856,497,1.124,498,1.856,499,1.856,500,3.761,501,1.363,502,1.677,503,2.934,504,1.856,505,1.333,506,1.613,507,3.761,508,1.856,509,1.348,510,4.007,511,1.269,512,3.616,513,1.981,514,1.109,515,1.176,516,2.192,517,1.333,518,1.557,519,1.856,520,1.584,521,1.677,522,1.802,523,1.856,524,1.306,525,1.32,526,1.856,527,2.759,528,2.51,529,1.269,530,1.613,531,1.856,532,1.856,533,3.084,534,4.161,535,1.802,536,1.856,537,1.856,538,3.164,539,1.856,540,1.856,541,1.856,542,1.856,543,1.856,544,1.856,545,1.856,546,1.094,547,1.856,548,1.584,549,1.363,550,1.856,551,1.429,552,1.856,553,1.488,554,0.911,555,1.715,556,1.363,557,1.235,558,1.195,559,1.856,560,1.856,561,1.258,562,1.533,563,1.856,564,1.856,565,1.856]],["component/23",[1,0.433]],["title/24-1",[38,26.057,39,26.336]],["name/24-1",[]],["text/24-1",[]],["component/24-1",[]],["title/24-2",[38,26.057,61,25.009]],["name/24-2",[]],["text/24-2",[]],["component/24-2",[]],["title/24-3",[38,21.709,138,23.079,185,22.813]],["name/24-3",[]],["text/24-3",[]],["component/24-3",[]],["title/24-4",[41,15.1,120,16.541,207,22.741,273,22.28,402,17.007]],["name/24-4",[]],["text/24-4",[]],["component/24-4",[]],["title/24-5",[66,22.883,566,54.392]],["name/24-5",[]],["text/24-5",[]],["component/24-5",[]],["title/24-6",[12,25.595]],["name/24-6",[]],["text/24-6",[]],["component/24-6",[]],["title/24",[288,32.932]],["name/24",[288,0.95]],["text/24",[1,1.19,12,1.903,13,0.883,14,0.707,15,1.01,17,1.156,18,1.01,20,1.424,21,2.392,24,1.502,31,1.518,32,0.978,34,2.057,36,2.201,38,2.993,39,0.902,40,0.984,41,1.888,43,1.871,44,1.879,47,1.127,49,2.15,52,0.817,53,2.78,55,1.412,56,1.711,57,1.075,60,1.348,61,1.953,62,1.222,64,0.824,66,2.817,68,2.424,69,0.99,75,0.96,77,1.9,78,1.593,81,1.156,82,0.883,85,0.933,87,1.457,88,1.059,103,3.207,109,1.538,110,1.176,120,0.907,121,1.412,124,1.593,138,1.639,140,0.997,143,1.457,147,1.187,150,1.289,162,1.199,163,1.222,166,0.984,167,1.222,182,1.392,185,3.564,186,1.659,187,1.979,189,2.004,191,1.1,192,1.412,195,2.842,196,1.136,199,1.457,201,2.837,204,2.014,207,2.154,208,2.23,218,0.857,222,1.1,230,1.434,233,1.392,250,1.569,266,1.176,270,0.966,275,1.354,277,2.439,280,3.577,281,1.412,284,1.412,285,1.067,288,1.559,300,1.21,304,1.412,305,2.014,309,1.059,319,3.776,329,1.7,358,1.337,360,2.339,364,1.052,365,1.199,366,1.21,369,1.304,372,0.99,373,1.045,378,1.482,396,1.01,400,2.201,402,0.933,406,1.412,417,1.83,420,1.792,422,1.067,423,1.156,429,0.984,440,0.917,452,2.253,460,1.32,477,2.508,478,2.385,482,1.304,486,1.392,487,1.412,492,0.938,493,1.052,500,1.569,502,1.569,507,1.569,510,1.412,521,1.569,529,1.187,554,1.473,561,1.176,567,1.289,568,1.864,569,1.304,570,1.864,571,2.732,572,1.304,573,1.864,574,1.412,575,1.337,576,1.434,577,1.864,578,1.864,579,1.176,580,1.289,581,1.176,582,3.219,583,1.059,584,1.864,585,1.795,586,2.837,587,2.37,588,1.794,589,1.434,590,3.219,591,1.569,592,1.864,593,1.392,594,3.219,595,1.794,596,1.779,597,1.864,598,1.482,599,1.686,600,1.569,601,1.864,602,1.604,603,1.864,604,1.234,605,1.569,606,0.966,607,1.864,608,1.864,609,1.864,610,1.32,611,1.538,612,1.864,613,1.794,614,1.864,615,1.864,616,1.247,617,1.794,618,1.569,619,1.457,620,1.864,621,1.864,622,1.569,623,1.372,624,1.604,625,1.794,626,1.075,627,1.392,628,1.412,629,1.864,630,1.003,631,1.32,632,1.686,633,1.457,634,1.538,635,1.864]],["component/24",[1,0.433]],["title/25-1",[7,13.523,440,16.723,623,25.018,636,19.899,637,19.601]],["name/25-1",[]],["text/25-1",[]],["component/25-1",[]],["title/25-2",[1,15.239,638,33.729]],["name/25-2",[]],["text/25-2",[]],["component/25-2",[]],["title/25-3",[478,25.651,639,32.883]],["name/25-3",[]],["text/25-3",[]],["component/25-3",[]],["title/25-4",[195,19.329,196,23.674,572,27.178,639,23.478]],["name/25-4",[]],["text/25-4",[]],["component/25-4",[]],["title/25-5",[1,12.696,440,22.304,640,42.208]],["name/25-5",[]],["text/25-5",[]],["component/25-5",[]],["title/25-6",[1,15.239,641,44.028]],["name/25-6",[]],["text/25-6",[]],["component/25-6",[]],["title/25",[561,28.606,616,30.33,642,36.681]],["name/25",[643,1.828]],["text/25",[1,0.637,7,4.119,10,0.742,13,1.077,21,0.952,27,1.193,28,1.344,32,0.66,34,1.1,40,0.664,44,0.556,49,0.433,52,0.551,63,2.363,66,0.529,68,0.534,69,0.668,74,2.059,75,1.602,83,0.794,85,0.629,93,0.76,103,0.57,110,0.794,123,0.731,128,0.748,149,1.018,166,2.012,167,1.49,169,0.76,194,1.018,195,3.194,196,2.687,199,1.776,204,0.786,240,0.76,243,0.681,251,0.786,257,0.801,261,0.637,270,0.652,274,0.88,276,0.794,288,0.609,309,0.715,315,0.801,321,0.824,329,0.664,354,0.72,356,0.578,362,1.839,417,0.715,420,1.265,425,1.018,429,0.664,440,3.295,454,1.018,458,1.385,477,3.605,478,2.078,497,1.282,509,0.85,525,0.833,538,1.609,551,0.902,554,0.575,561,2.405,572,1.59,574,0.953,581,0.794,596,1.256,618,1.058,623,0.926,631,1.609,636,1.821,637,0.725,638,1.409,639,4.047,641,2.516,642,7.859,644,1.137,645,0.86,646,1.108,647,1.171,648,1.108,649,0.983,650,1.171,651,1.108,652,0.89,653,1.108,654,1.171,655,1.59,656,0.87,657,0.913,658,1.839,659,1.554,660,1.171,661,3.549,662,1.171,663,3.549,664,2.896,665,2.116,666,1.171,667,1.171,668,1.839,669,2.516,670,3.358,671,1.171,672,1.171,673,1.171,674,1.171,675,1.171,676,1.257,677,1.171,678,2.116,679,1.171,680,2.116,681,1.171,682,1.171,683,1.171,684,1.137,685,1.171,686,1.171,687,1.171,688,2.896,689,1.171,690,1.171,691,0.841,692,1.171,693,1.171,694,1.171,695,1.171,696,1.171,697,1.171,698,1.171,699,1.171,700,1.171,701,2.003,702,0.926,704,1.171,705,1.171,706,2.056,707,1.171,708,2.056,709,1.651,710,1.171,711,1.171,712,1.171,713,1.171,714,1.171,715,5.688,716,1.171,717,1.171,718,1.171,719,1.171,720,1.171,721,1.171,722,1.171,723,1.171,724,1.171,725,1.171,726,1.171,727,1.171,728,1.171,729,1.171,730,1.171,731,1.171,732,1.171,733,1.171,734,1.171,735,1.171,736,1.171,737,1.171,738,1.171,739,1.171,740,1.171,741,1.171,742,1.171,743,1.171,744,1.999,745,0.742,746,1.171,747,5.419,748,1.171,749,1.171,750,2.896,751,1.171,752,2.116,753,1.171,754,2.116,755,1.171,756,1.171,757,1.171,758,0.754,759,0.715,760,1.875,761,1.171,762,1.018,763,1.018,764,1.018,765,0.85,766,1.137,767,2.896,768,2.116,769,1.171,770,1.171,771,0.939,772,0.983,773,0.953,774,0.983,775,1.171,776,2.896,777,1.171,778,1.171,779,1.171,780,1.171,781,1.171,782,1.171,783,1.058,784,0.983,785,1.171,786,1.171,787,4.583,788,0.89,789,0.816,790,1.171,791,1.171,792,1.171,793,1.171,794,1.171,795,1.171,796,1.171,797,1.171,798,1.171,799,1.171,800,1.171,801,1.171,802,1.171,803,1.171,804,1.171,805,1.171,806,0.913,807,1.171,808,2.384,809,0.926,810,0.926,811,1.018,812,1.171,813,1.273,814,1.018,815,1.018,2226,1.316]],["component/25",[1,0.433]],["title/26-1",[195,27.072,571,34.979]],["name/26-1",[]],["text/26-1",[]],["component/26-1",[]],["title/26-2",[20,24.059,195,27.072]],["name/26-2",[]],["text/26-2",[]],["component/26-2",[]],["title/26-3",[195,27.072,571,34.979]],["name/26-3",[]],["text/26-3",[]],["component/26-3",[]],["title/26-4",[478,32.075]],["name/26-4",[]],["text/26-4",[]],["component/26-4",[]],["title/26-5",[276,42.934]],["name/26-5",[]],["text/26-5",[]],["component/26-5",[]],["title/26",[195,27.072,580,37.624]],["name/26",[195,0.977]],["text/26",[7,0.719,11,0.629,12,0.68,13,1.485,14,0.685,15,0.979,16,2.618,17,1.943,18,0.979,19,0.573,20,2.819,21,0.41,22,0.612,24,1.175,27,0.948,28,0.781,31,1.187,32,0.948,33,0.606,34,1.219,35,1.33,39,0.875,40,0.517,41,1.118,43,2.657,44,1.113,45,1.196,46,0.752,47,1.092,48,3.031,49,1.704,53,1.525,57,1.042,59,0.73,60,1.538,63,1.12,64,0.433,65,0.839,66,1.745,76,4.025,77,1.849,80,0.577,82,0.464,88,0.556,89,1.382,91,1.462,94,0.586,95,0.72,98,0.507,103,0.443,108,0.541,122,1.807,123,0.568,128,1.074,129,1.209,134,1.312,140,2.219,141,0.669,148,1.175,150,0.677,151,0.792,159,0.693,162,2.015,163,0.641,167,0.641,171,0.693,183,0.693,185,1.267,189,0.461,191,1.485,195,3.28,203,0.564,204,1.574,206,0.662,214,1.421,218,0.45,233,0.73,240,1.522,242,0.972,258,0.711,264,0.52,272,2.491,276,0.617,280,1.034,282,1.279,283,1.13,285,1.794,286,1.005,287,0.435,288,0.474,294,0.596,295,0.544,296,1.295,301,1.027,302,0.792,305,0.612,311,0.533,313,0.778,315,1.151,320,0.684,322,0.476,323,0.792,326,1.222,329,0.517,350,0.778,353,1.462,356,0.83,358,0.701,359,0.701,366,0.635,367,0.778,373,2.058,374,0.701,375,0.612,376,0.591,377,1.589,379,0.792,385,1.295,386,1.312,392,0.591,396,0.979,400,1.721,402,1.838,407,0.792,409,0.662,411,1.173,417,1.027,419,0.662,420,1.005,422,0.56,423,0.606,424,0.72,429,0.517,452,0.684,460,0.693,465,0.792,474,1.721,476,0.894,477,1.849,478,2.156,482,2.57,493,2.342,497,0.552,509,0.662,510,5.947,514,0.544,520,0.778,524,1.184,527,0.792,528,0.72,529,1.151,530,2.972,538,0.693,548,0.778,549,1.235,551,1.295,554,0.826,557,0.606,569,0.684,571,4.366,575,2.634,579,0.617,581,0.617,585,0.763,591,0.823,596,0.541,611,0.807,627,0.73,630,0.526,637,1.807,638,0.606,747,0.792,758,0.586,772,0.765,816,1.682,817,0.885,818,0.911,819,0.792,820,0.911,821,1.39,822,0.669,823,0.792,824,0.778,825,0.911,826,0.842,827,0.792,828,0.885,829,0.911,830,0.911,831,1.249,832,0.862,833,4.479,834,0.911,835,0.885,836,0.862,837,1.436,838,1.634,839,2.491,840,0.911,841,1.634,842,1.684,843,0.911,844,2.034,845,0.752,846,0.911,847,0.862,848,0.911,849,0.911,850,5.002,851,0.885,852,0.911,853,0.911,854,1.295,855,0.72,856,0.885,857,1.462,858,3.493,859,0.792,860,2.037,861,0.911,862,0.778,863,0.911,864,1.936,865,0.741,866,0.911,867,2.834,868,0.701,869,1.101,870,0.792,871,0.911,872,0.911,873,2.918,874,0.911,875,2.276,876,0.765,877,0.677,878,0.701,879,0.911,880,2.247,881,0.911,882,0.911,883,3.243,884,2.218,885,0.823,886,2.972,887,0.911,888,0.911,889,0.885,890,0.596,891,0.911,892,1.592,893,0.885,894,1.592,895,0.701,896,0.648,897,0.911,898,0.778,899,1.665,900,1.592,901,0.911,902,0.842,903,3.42,904,1.634,905,0.911,906,0.862,907,0.911,908,0.568,909,0.669,910,0.911,911,0.885,912,0.655,913,0.911,914,0.911,915,0.72,916,0.911,917,0.911,918,0.752,919,0.911,920,1.295,921,0.885,922,0.911,923,0.911,924,0.911,925,1.49,926,0.911,927,0.911,928,0.911,929,2.918,930,1.312,931,0.765,932,0.911,933,0.911,934,1.682,935,0.885,936,0.862,937,0.823,938,0.911,939,0.778,940,0.911,941,0.911,942,0.778,943,0.842,944,0.911,945,0.911,946,0.911,947,0.862,948,0.765,949,0.842,950,0.911,951,0.911,952,0.577,953,0.72,954,0.911,955,0.823,956,0.911,957,0.885,958,0.911,959,0.911,960,0.911,961,0.862,962,0.911,963,0.752]],["component/26",[1,0.433]],["title/27-1",[476,33.662]],["name/27-1",[]],["text/27-1",[]],["component/27-1",[]],["title/27-2",[217,22.555,218,20.836,513,26.338]],["name/27-2",[]],["text/27-2",[]],["component/27-2",[]],["title/27-3",[439,30.274,964,40.051]],["name/27-3",[]],["text/27-3",[]],["component/27-3",[]],["title/27-4",[13,25.784,203,31.377]],["name/27-4",[]],["text/27-4",[]],["component/27-4",[]],["title/27-5",[148,25.389,965,37.201]],["name/27-5",[]],["text/27-5",[]],["component/27-5",[]],["title/27-6",[290,33.157,965,37.201]],["name/27-6",[]],["text/27-6",[]],["component/27-6",[]],["title/27-7",[203,31.377,966,37.201]],["name/27-7",[]],["text/27-7",[]],["component/27-7",[]],["title/27-8",[967,44.028,968,40.051]],["name/27-8",[]],["text/27-8",[]],["component/27-8",[]],["title/27",[82,25.784,197,21.56]],["name/27",[197,0.436,969,0.89]],["text/27",[7,2.21,12,0.808,13,2.238,14,2.724,20,2.088,21,1.521,28,1.569,41,1.614,49,2.321,52,0.94,53,1.768,57,1.238,65,0.997,66,0.903,78,1.062,140,2.525,148,1.695,166,1.133,191,2.143,197,2.462,200,1.367,203,3.204,217,3.356,218,1.67,227,3.606,257,1.367,261,1.087,262,1.651,278,2.143,286,3.457,287,0.954,290,1.308,295,1.194,322,2.298,356,0.987,368,1.308,373,1.203,396,1.968,402,1.074,408,2.431,413,1.007,420,1.194,439,4.529,491,5.011,501,1.468,511,3.007,513,3.228,546,1.178,554,0.982,583,1.22,587,2.674,638,1.331,812,1.106,837,1.706,890,2.878,908,1.247,952,4.457,964,3.476,965,1.468,966,2.484,968,3.476,970,1.999,971,1.737,972,1.999,973,1.999,974,2.214,975,3.786,976,5.458,977,1.559,978,1.393,979,1.308,980,1.194,981,1.148,982,1.999,983,5.024,984,1.999,985,1.942,986,1.468,987,1.436,988,4.397,989,3.382,990,4.397,991,1.539,992,1.737,993,3.382,994,1.999,995,2.939,996,2.16,997,1.999,998,1.942,999,1.58,1000,1.737,1001,1.58,1002,3.382,1003,1.737,1004,1.559,1005,1.999,1006,1.999,1007,1.999,1008,1.999,1009,1.999,1010,1.999,1011,1.999,1012,1.999,1013,1.999,1014,1.999,1015,1.737,1016,1.999,1017,1.737,1018,1.58,1019,1.999,1020,1.58,1021,1.999,1022,1.999,1023,1.999,1024,1.999,1025,1.999,1026,1.999,1027,1.999,1028,1.999,1029,1.999,1030,1.999,1031,1.999,1032,1.999,1033,1.559,1034,1.706,1035,3.382,1036,1.999,1037,1.999,1038,3.821,1039,1.999,1040,1.355,1041,1.58,1042,1.737,1043,1.651,1044,1.999,1045,1.737,1046,1.999,1047,1.737,1048,3.382,1049,1.355]],["component/27",[1,0.433]],["title/28-1",[476,33.662]],["name/28-1",[]],["text/28-1",[]],["component/28-1",[]],["title/28-2",[287,24.173,981,29.091]],["name/28-2",[]],["text/28-2",[]],["component/28-2",[]],["title/28-3",[322,26.479,981,29.091]],["name/28-3",[]],["text/28-3",[]],["component/28-3",[]],["title/28-4",[413,25.519,981,29.091]],["name/28-4",[]],["text/28-4",[]],["component/28-4",[]],["title/28-5",[981,29.091,996,32.356]],["name/28-5",[]],["text/28-5",[]],["component/28-5",[]],["title/28-6",[812,23.354,981,24.236,1049,28.606]],["name/28-6",[]],["text/28-6",[]],["component/28-6",[]],["title/28",[215,40.051,1050,31.377]],["name/28",[812,0.567,1050,0.635]],["text/28",[1,1.212,7,3.144,13,3.002,14,2.647,15,1.436,16,1.517,19,1.552,20,3.879,21,2.297,28,1.87,31,2.041,44,1.914,49,2.577,66,1.115,68,1.837,85,3.169,208,1.391,240,1.602,270,1.374,285,1.517,287,1.923,289,1.552,295,3.053,311,1.445,322,1.29,354,1.517,364,1.496,368,1.615,375,2.707,376,3.316,390,1.812,392,1.602,396,3.431,408,1.774,413,1.243,415,1.9,419,3.711,431,1.9,513,2.515,546,1.455,554,1.212,567,1.833,575,1.9,606,1.374,669,5.649,758,1.589,759,3.6,811,2.145,812,2.23,823,3.503,878,1.9,908,1.54,931,2.072,939,2.107,964,4.039,974,1.615,975,3.86,979,3.86,981,3.387,1050,3.653,1051,3.915,1052,2.468,1053,2.468,1054,2.468,1055,2.107,1056,2.397,1057,2.468,1058,4.031,1059,2.107,1060,2.072,1061,3.503,1062,2.336,1063,3.187,1064,3.383,1065,2.468,1066,1.925,1067,3.441,1068,2.468,1069,2.397,1070,5.109,1071,4.031,1072,5.109,1073,2.336,1074,4.031,1075,2.468,1076,2.468,1077,2.468,1078,2.468,1079,4.031,1080,2.468,1081,2.468,1082,3.503,1083,4.031,1084,2.397,1085,2.468,1086,2.145,1087,2.468,1088,2.468,1089,2.468,1090,2.468,1091,2.397,1092,1.673,1093,2.468,1094,1.576,1095,2.336,1096,2.336]],["component/28",[1,0.433]],["title/29-1",[476,33.662]],["name/29-1",[]],["text/29-1",[]],["component/29-1",[]],["title/29",[14,20.629,122,31.377]],["name/29",[2,1.51]],["text/29",[4,2.787,7,3.39,12,2.509,14,2.077,20,2.949,27,1.871,31,1.681,44,1.577,49,3.151,53,2.666,60,2.294,61,2.518,78,2.71,80,2.104,122,3.846,138,1.816,148,1.664,171,2.525,197,1.413,208,1.871,214,2.012,215,2.625,226,1.837,261,1.805,286,1.984,287,1.584,290,2.173,295,3.71,300,3.555,321,2.338,369,2.495,413,1.673,422,2.042,428,2.886,458,2.173,476,1.765,492,2.757,501,4.559,513,4.347,515,3.232,517,2.386,518,2.787,546,3.006,554,2.505,585,1.507,812,2.822,813,3.736,814,2.886,815,2.886,876,2.787,908,2.072,971,2.886,974,4.559,975,3.338,976,2.886,977,3.978,979,2.173,1050,3.159,1055,2.835,1063,2.625,1067,2.835,1086,5.396,1094,2.121,1097,3.321,1098,2.386,1099,4.909,1100,3.321,1101,3.321,1102,3.321,1103,3.321,1104,3.321,1105,2.886,1106,2.439,1107,2.315,1108,3.321]],["component/29",[1,0.433]],["title/30-1",[186,23.354,604,30.017,930,32.923]],["name/30-1",[]],["text/30-1",[]],["component/30-1",[]],["title/30-2",[186,23.354,604,30.017,1109,36.031]],["name/30-2",[]],["text/30-2",[]],["component/30-2",[]],["title/30-3",[186,28.031,1110,40.051]],["name/30-3",[]],["text/30-3",[]],["component/30-3",[]],["title/30-4",[187,41.814]],["name/30-4",[]],["text/30-4",[]],["component/30-4",[]],["title/30-5",[186,28.031,1111,40.051]],["name/30-5",[]],["text/30-5",[]],["component/30-5",[]],["title/30-6",[186,23.354,1111,33.368,1112,42.208]],["name/30-6",[]],["text/30-6",[]],["component/30-6",[]],["title/30-7",[1113,50.081]],["name/30-7",[]],["text/30-7",[]],["component/30-7",[]],["title/30-8",[1114,55.054]],["name/30-8",[]],["text/30-8",[]],["component/30-8",[]],["title/30-9",[197,26.959]],["name/30-9",[]],["text/30-9",[]],["component/30-9",[]],["title/30-10",[197,21.56,325,44.028]],["name/30-10",[]],["text/30-10",[]],["component/30-10",[]],["title/30-11",[197,21.56,1115,50.661]],["name/30-11",[]],["text/30-11",[]],["component/30-11",[]],["title/30-12",[1116,37.201,1117,44.028]],["name/30-12",[]],["text/30-12",[]],["component/30-12",[]],["title/30-13",[297,30.067,1110,40.051]],["name/30-13",[]],["text/30-13",[]],["component/30-13",[]],["title/30-14",[197,21.56,1113,40.051]],["name/30-14",[]],["text/30-14",[]],["component/30-14",[]],["title/30-15",[197,21.56,966,37.201]],["name/30-15",[]],["text/30-15",[]],["component/30-15",[]],["title/30-16",[197,21.56,1118,44.028]],["name/30-16",[]],["text/30-16",[]],["component/30-16",[]],["title/30",[138,27.701,148,25.389]],["name/30",[138,0.56,148,0.513]],["text/30",[7,0.909,12,0.329,14,2.364,19,0.953,20,0.72,21,0.682,27,0.459,28,2.134,31,0.412,39,0.788,40,2.431,41,0.388,43,0.508,47,0.528,49,0.301,53,1.392,56,0.865,65,0.756,68,0.691,76,0.573,78,0.433,82,0.414,85,0.437,93,0.528,124,1.668,129,1.528,138,1.717,140,2.462,148,1.066,166,0.462,186,1.972,187,1,188,0.557,189,0.412,197,1.825,200,0.557,209,0.932,214,0.493,217,2.61,218,2.866,223,0.533,227,0.87,264,1.213,276,1.027,279,1.294,286,3.216,287,1.7,290,1.392,291,2.001,292,0.695,297,1.262,301,0.497,309,0.497,322,2.062,326,1.101,356,0.402,365,0.562,368,0.533,372,0.464,376,0.528,391,0.567,396,1.55,398,0.643,402,0.437,409,0.591,410,0.683,411,1.057,413,1.581,429,0.462,447,0.557,469,1.215,491,1.037,497,0.493,505,0.585,506,0.707,511,1.037,514,0.486,529,1.037,546,0.48,554,0.4,557,0.542,558,0.524,598,0.695,606,0.453,630,0.47,638,0.542,645,0.598,659,2.305,691,1.528,702,1.198,709,0.635,806,0.635,827,0.707,842,2.834,845,0.672,869,1.743,890,0.992,908,0.508,930,1.182,942,1.294,952,2.499,965,1.113,967,0.707,968,0.643,979,0.533,986,0.598,987,1.089,992,0.707,996,2.519,1001,0.643,1003,2.315,1004,1.659,1015,1.317,1018,0.643,1020,0.643,1033,0.635,1038,3.428,1040,2.673,1042,0.707,1045,1.317,1047,1.317,1049,2.128,1061,0.707,1092,1.027,1094,0.52,1098,1.528,1107,1.057,1109,1.816,1110,5.006,1111,0.643,1113,0.643,1114,0.707,1116,1.113,1117,1.317,1118,0.707,1119,2.013,1120,0.791,1121,1.182,1122,1.516,1123,0.814,1124,1.516,1125,0.814,1126,1.516,1127,0.814,1128,1.516,1129,0.814,1130,1.516,1131,0.814,1132,1.516,1133,0.814,1134,1.516,1135,0.814,1136,1.516,1137,0.814,1138,0.814,1139,0.814,1140,2.127,1141,0.814,1142,1.516,1143,0.814,1144,0.814,1145,0.814,1146,0.814,1147,0.814,1148,0.814,1149,0.814,1150,0.814,1151,0.814,1152,0.814,1153,0.814,1154,2.127,1155,1.516,1156,2.664,1157,0.814,1158,1.516,1159,1.516,1160,0.814,1161,0.814,1162,2.587,1163,1.516,1164,2.127,1165,3.221,1166,2.728,1167,0.814,1168,1.516,1169,1.516,1170,1.272,1171,0.791,1172,0.814,1173,0.814,1174,0.814,1175,0.814,1176,0.791,1177,1.516,1178,1.516,1179,0.814,1180,1.516,1181,0.814,1182,1.516,1183,0.814,1184,0.814,1185,0.814,1186,0.814,1187,0.814,1188,0.814,1189,0.814,1190,0.814,1191,0.814,1192,0.814,1193,0.814,1194,0.814,1195,0.814,1196,0.814,1197,1.516,1198,0.814,1199,0.814,1200,0.814,1201,0.814,1202,0.814,1203,0.814,1204,1.233,1205,0.814,1206,0.814,1207,0.814,1208,0.814,1209,0.662,1210,0.814,1211,0.814,1212,0.814,1213,0.814,1214,0.814,1215,0.814,1216,0.695,1217,0.814,1218,0.814,1219,0.814,1220,0.814,1221,0.814,1222,0.814,1223,0.814,1224,0.814,1225,0.814,1226,0.814,1227,1.848,1228,0.814,1229,1.848,1230,0.814,1231,0.814,1232,0.814,1233,0.814,1234,0.695,1235,0.814,1236,0.672,1237,0.814,1238,0.695,1239,0.814,1240,0.814,1241,0.77,1242,0.814,1243,0.814,1244,0.814,1245,0.814,1246,0.814,1247,0.814,1248,0.683,1249,0.814,1250,0.707,1251,0.814,1252,0.707,1253,0.814,1254,0.814,1255,0.814,1256,0.814,1257,0.791,1258,0.814,1259,0.791,1260,0.814,1261,0.695,1262,0.814,1263,0.627,1264,0.814,1265,0.736,1266,0.814,1267,0.643,1268,0.814,1269,0.814,1270,0.814,1271,0.814,1272,0.814,1273,0.814,1274,0.814,1275,0.814,1276,0.814,1277,0.814,1278,0.814,1279,0.77,1280,0.814,1281,6.169,1282,0.814,1283,0.814,1284,0.814,1285,0.814,1286,0.814,1287,0.814,1288,0.707,1289,0.814,1290,0.814,1291,0.814,1292,0.814,1293,0.814,1294,0.814,1295,0.814,1296,1.516,1297,0.814,1298,1.516,1299,0.814,1300,1.516,1301,0.814,1302,1.516,1303,0.814,1304,0.707,1305,0.814,1306,0.814,1307,0.814,1308,0.707,1309,0.814,1310,0.707,1311,0.814,1312,0.707,1313,0.814,1314,0.707,1315,0.814,1316,0.814,1317,0.814,1318,0.707,1319,0.814,1320,0.707,1321,0.814,1322,0.814,1323,0.814,1324,0.752,1325,0.814,1326,0.752,1327,0.814,1328,0.814,1329,0.814,1330,0.814,1331,0.814,1332,0.814,1333,0.814,1334,0.814,1335,0.814,1336,0.814,1337,0.814,1338,0.814,1339,0.814,1340,0.814,1341,0.814,1342,0.814,1343,0.814,1344,0.814,1345,0.814,1346,0.814,1347,0.814,1348,0.814,1349,0.814,1350,0.814,1351,0.814,1352,0.814,1353,0.814,1354,0.814,1355,0.814,1356,0.814,1357,0.814,1358,0.814,1359,0.814,1360,2.127,1361,0.791,1362,0.814,1363,0.814,1364,0.672,1365,0.814,1366,0.814,1367,0.814,1368,0.814,1369,0.695,1370,1.516,1371,0.814,1372,1.516,1373,0.814,1374,0.814,1375,0.814,1376,0.814,1377,2.664,1378,0.604,1379,0.791,1380,0.814,1381,0.77,1382,0.814,1383,0.814,1384,1.434,1385,0.814,1386,0.814,1387,0.814,1388,1.516,1389,2.664,1390,0.814,1391,0.707,1392,0.814,1393,0.814,1394,0.814,1395,0.814,1396,0.814,1397,0.814,1398,0.814,1399,0.707,1400,0.707,1401,1.516,1402,0.814,1403,0.707,1404,0.814,1405,0.707,1406,0.814,1407,0.814,1408,0.814,1409,0.814,1410,0.814,1411,0.814,1412,0.814,1413,2.664,1414,0.814,1415,0.814,1416,0.814,1417,0.814,1418,0.814,1419,0.814,1420,0.814,1421,0.707,1422,0.707]],["component/30",[1,0.433]],["title/31-1",[476,33.662]],["name/31-1",[]],["text/31-1",[]],["component/31-1",[]],["title/31-2",[1423,46.518]],["name/31-2",[]],["text/31-2",[]],["component/31-2",[]],["title/31-3",[217,27.072,492,27.382]],["name/31-3",[]],["text/31-3",[]],["component/31-3",[]],["title/31-4",[53,26.479,1106,37.201]],["name/31-4",[]],["text/31-4",[]],["component/31-4",[]],["title/31-5",[513,31.613,975,33.157]],["name/31-5",[]],["text/31-5",[]],["component/31-5",[]],["title/31-6",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/31-6",[]],["text/31-6",[]],["component/31-6",[]],["title/31",[12,14.615,61,17.856,402,19.439,492,19.55]],["name/31",[492,0.554,1106,0.752]],["text/31",[1,1.164,10,1.488,12,1.994,14,0.956,20,2.343,21,1.74,24,1.176,28,2.289,33,2.576,49,2.661,53,2.991,61,2.825,65,1.929,68,1.07,74,1.67,94,1.511,103,1.142,108,1.393,124,1.247,128,1.499,164,3.584,166,1.331,169,1.524,197,0.999,206,1.705,209,2.378,217,4.292,218,2.436,220,1.856,221,1.856,222,3.626,223,3.745,226,2.14,242,1.357,257,1.606,263,1.831,286,2.948,287,1.12,289,1.476,294,2.532,295,1.403,297,1.393,311,1.375,322,2.022,329,1.331,356,1.91,364,2.344,368,3.745,372,1.339,377,1.591,396,1.366,402,2.652,409,1.705,413,1.182,439,1.403,491,4.329,492,3.892,493,1.423,494,3.362,497,1.423,513,3.079,514,1.403,515,2.451,546,2.909,633,1.97,645,2.841,655,1.764,759,1.433,765,1.705,812,1.299,813,3.443,831,1.743,880,1.808,890,1.536,896,1.67,898,2.004,912,1.687,915,1.856,969,2.04,974,4.142,975,2.532,977,1.831,979,2.532,980,1.403,981,2.221,991,1.808,996,1.499,1000,3.362,1041,1.856,1094,2.471,1105,2.04,1106,4.647,1121,1.831,1170,1.97,1261,2.004,1423,2.841,1425,1.465,1427,3.362,1428,1.785,1429,2.04,1430,1.785,1431,2.04,1432,1.856,1433,2.348,1434,2.348,1435,1.882,1436,2.28,1437,2.348,1438,2.348,1439,1.939,1440,2.128,1441,2.348,1442,2.04,1443,2.348,1444,2.348,1445,2.04,1446,2.04]],["component/31",[1,0.433]],["title/32-1",[476,33.662]],["name/32-1",[]],["text/32-1",[]],["component/32-1",[]],["title/32-2",[1423,46.518]],["name/32-2",[]],["text/32-2",[]],["component/32-2",[]],["title/32-3",[217,27.072,492,27.382]],["name/32-3",[]],["text/32-3",[]],["component/32-3",[]],["title/32-4",[60,18.981,297,25.05,1447,36.681]],["name/32-4",[]],["text/32-4",[]],["component/32-4",[]],["title/32-5",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/32-5",[]],["text/32-5",[]],["component/32-5",[]],["title/32-6",[218,20.836,505,30.33,517,30.33]],["name/32-6",[]],["text/32-6",[]],["component/32-6",[]],["title/32-7",[223,27.625,249,33.368,1448,36.681]],["name/32-7",[]],["text/32-7",[]],["component/32-7",[]],["title/32-8",[1449,55.054]],["name/32-8",[]],["text/32-8",[]],["component/32-8",[]],["title/32-9",[1450,55.054]],["name/32-9",[]],["text/32-9",[]],["component/32-9",[]],["title/32-10",[52,29.804]],["name/32-10",[]],["text/32-10",[]],["component/32-10",[]],["title/32-11",[392,32.883,1451,44.028]],["name/32-11",[]],["text/32-11",[]],["component/32-11",[]],["title/32",[12,14.615,60,16.266,402,19.439,492,19.55]],["name/32",[60,0.461,492,0.554]],["text/32",[1,0.315,7,3.324,10,0.349,12,1.317,14,0.427,20,0.909,21,0.247,24,0.525,28,0.486,33,0.698,40,0.594,49,0.387,52,0.9,53,0.548,58,0.441,60,1.814,65,0.954,68,0.872,75,1.059,78,0.797,80,0.349,81,0.366,82,0.533,84,1.046,100,0.478,101,1.663,102,0.895,103,0.268,108,0.327,122,0.341,124,1.218,128,0.351,147,0.376,148,1.323,164,1.09,169,0.974,189,0.279,192,0.448,197,0.446,204,0.704,206,0.4,208,1.078,209,0.338,214,0.333,217,1.583,218,0.517,220,0.435,221,0.435,222,0.664,223,1.728,226,0.58,249,2.577,257,1.309,261,0.299,275,0.429,278,0.349,286,1.77,287,1.094,289,0.346,294,0.686,297,0.327,305,0.37,309,0.336,311,0.322,322,1,352,2.574,356,0.272,364,0.333,368,0.982,376,0.357,377,0.373,396,0.61,398,1.513,402,0.296,413,0.756,415,0.424,423,0.366,439,1.37,488,0.462,491,2.23,492,1.239,493,0.333,497,0.635,501,0.404,505,1.647,511,0.717,512,0.478,514,0.626,515,1.213,517,1.078,525,0.745,546,1.351,554,1.455,567,0.409,606,0.835,610,0.419,628,0.448,630,0.318,645,1.683,655,0.413,668,1.663,691,0.753,702,0.435,709,0.429,758,0.354,759,0.64,813,1.152,844,0.384,855,1.812,869,0.982,880,2.033,896,0.391,899,0.314,912,0.395,915,0.435,952,1.877,953,0.435,974,0.982,975,0.686,981,0.316,986,0.404,987,0.395,991,0.424,996,0.958,999,0.829,1001,1.812,1018,0.435,1020,0.435,1033,0.429,1034,0.47,1040,1.297,1043,0.455,1049,1.554,1060,0.462,1092,0.373,1094,0.958,1098,1.078,1107,0.384,1116,0.404,1121,0.818,1227,0.911,1229,0.478,1288,0.911,1304,0.478,1308,1.992,1310,0.911,1312,1.992,1314,0.478,1318,0.911,1320,1.304,1378,0.409,1391,1.304,1399,0.478,1400,0.478,1403,0.478,1405,0.478,1421,0.478,1422,0.478,1423,0.77,1425,0.654,1427,0.911,1428,0.419,1429,0.911,1430,0.419,1431,0.478,1432,0.829,1445,0.911,1446,0.478,1447,0.911,1448,1.992,1449,0.911,1450,1.304,1451,1.663,1452,0.487,1453,0.478,1454,1.048,1455,1.048,1456,0.55,1457,1.458,1458,1.048,1459,1.048,1460,0.55,1461,1.048,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.048,1469,0.55,1470,1.048,1471,2.962,1472,0.535,1473,0.55,1474,0.55,1475,0.55,1476,1.186,1477,0.55,1478,0.55,1479,0.509,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.292,1485,0.55,1486,5.35,1487,1.914,1488,2.292,1489,1.501,1490,1.501,1491,1.501,1492,2.292,1493,1.914,1494,2.292,1495,1.914,1496,1.048,1497,1.048,1498,2.641,1499,1.048,1500,1.458,1501,2.292,1502,0.55,1503,1.914,1504,1.048,1505,0.462,1506,1.501,1507,2.962,1508,1.914,1509,1.048,1510,1.501,1511,0.55,1512,0.55,1513,1.914,1514,1.048,1515,1.914,1516,1.458,1517,1.048,1518,1.501,1519,1.501,1520,2.641,1521,0.55,1522,1.048,1523,1.914,1524,0.55,1525,1.501,1526,1.914,1527,1.048,1528,0.55,1529,2.292,1530,2.292,1531,2.641,1532,2.292,1533,1.501,1534,1.914,1535,1.048,1536,1.501,1537,1.914,1538,1.501,1539,1.501,1540,2.962,1541,0.55,1542,1.914,1543,1.914,1544,1.048,1545,0.947,1546,1.914,1547,1.501,1548,2.292,1549,0.55,1550,2.292,1551,0.55,1552,1.048,1553,0.55,1554,1.048,1555,3.26,1556,1.914,1557,1.501,1558,1.501,1559,1.048,1560,1.048,1561,0.55,1562,2.641,1563,1.501,1564,1.914,1565,1.914,1566,1.914,1567,1.281,1568,0.55,1569,1.914,1570,1.048,1571,1.048,1572,1.501,1573,1.914,1574,1.048,1575,1.501,1576,2.292,1577,1.501,1578,1.914,1579,1.501,1580,1.501,1581,1.048,1582,1.914,1583,0.55,1584,1.501,1585,1.048,1586,1.501,1587,1.048,1588,1.914,1589,0.55,1590,1.914,1591,0.55,1592,1.501,1593,1.048,1594,1.914,1595,1.048,1596,1.501,1597,1.914,1598,0.55,1599,1.501,1600,1.501,1601,1.048,1602,1.914,1603,1.048,1604,1.048,1605,1.501,1606,1.048,1607,0.55,1608,1.914,1609,1.501,1610,2.962,1611,1.048,1612,1.048,1613,0.55,1614,1.501,1615,1.914,1616,1.501,1617,0.55,1618,1.048,1619,0.55,1620,1.501,1621,0.55,1622,1.048,1623,1.048,1624,1.048,1625,1.501,1626,0.55,1627,1.914,1628,1.048,1629,1.914,1630,1.501,1631,1.501,1632,1.501,1633,0.55,1634,0.55,1635,1.914,1636,1.501,1637,0.55,1638,1.048,1639,0.55,1640,0.55,1641,1.048,1642,1.914,1643,0.55,1644,0.55,1645,1.048,1646,0.55,1647,1.048,1648,0.55,1649,1.048,1650,1.048,1651,0.55,1652,0.55,1653,1.048,1654,1.914,1655,1.914,1656,0.55,1657,1.048,1658,1.048,1659,0.55,1660,1.048,1661,1.048,1662,0.55,1663,1.501,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.501,1670,2.292,1671,1.048,1672,1.048,1673,1.048,1674,0.55,1675,0.55,1676,1.048,1677,1.501,1678,0.55,1679,0.55,1680,1.048,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.497,1686,1.501,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.048,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.048,1704,1.048,1705,1.048,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.535,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.521,1717,0.55,1718,0.55,1719,0.55,1720,0.478,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.535,1726,0.55,1727,0.818,1728,0.55,1729,0.55,1730,0.55,1731,0.535,1732,0.55,1733,0.535,1734,0.55,1735,0.55,1736,0.55,1737,0.357,1738,0.521,1739,0.497,1740,0.535,1741,0.462,1742,1.048,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.048,1750,0.55,1751,1.048,1752,0.55,1753,0.478,1754,0.55]],["component/32",[1,0.433]],["title/33-1",[476,33.662]],["name/33-1",[]],["text/33-1",[]],["component/33-1",[]],["title/33-2",[82,25.784,226,28.031]],["name/33-2",[]],["text/33-2",[]],["component/33-2",[]],["title/33-3",[227,29.091,392,32.883]],["name/33-3",[]],["text/33-3",[]],["component/33-3",[]],["title/33-4",[227,36.376]],["name/33-4",[]],["text/33-4",[]],["component/33-4",[]],["title/33-5",[264,36.145]],["name/33-5",[]],["text/33-5",[]],["component/33-5",[]],["title/33-6",[439,37.856]],["name/33-6",[]],["text/33-6",[]],["component/33-6",[]],["title/33-7",[227,29.091,390,37.201]],["name/33-7",[]],["text/33-7",[]],["component/33-7",[]],["title/33-8",[227,36.376]],["name/33-8",[]],["text/33-8",[]],["component/33-8",[]],["title/33",[226,35.051]],["name/33",[226,1.011]],["text/33",[7,2.215,12,0.81,14,0.816,22,1.347,24,3.152,28,2.045,31,1.015,32,1.911,44,0.952,49,1.628,52,1.595,60,0.902,61,0.99,65,1.691,82,1.726,84,1.398,122,3.21,124,2.341,125,1.291,140,1.151,147,1.371,148,1.005,159,3.351,162,1.384,169,1.301,189,1.717,197,0.853,217,1.071,218,0.99,226,3.48,227,4.858,229,1.742,234,1.742,235,1.742,236,3.829,237,1.742,238,1.742,239,1.506,241,1.631,242,1.159,243,1.166,259,1.411,264,4.827,278,1.27,285,1.233,287,3.196,295,1.198,309,1.224,314,3.166,322,3.029,351,2.49,356,0.99,364,1.215,373,1.206,390,4.619,392,3.761,413,2.61,422,1.233,429,1.137,436,1.711,439,3.463,461,1.742,493,2.055,497,3.141,511,1.371,515,1.27,554,0.985,561,1.359,585,0.91,610,3.351,626,2.1,627,1.607,628,4.216,745,1.27,812,1.876,813,1.206,842,1.441,890,1.312,895,1.544,908,1.251,952,1.27,953,2.681,974,1.312,979,2.219,980,1.198,996,2.166,999,1.585,1004,1.564,1040,2.298,1049,2.298,1063,1.585,1094,2.814,1099,1.585,1107,1.398,1428,1.525,1435,1.607,1476,1.585,1753,5.036,1755,2.005,1756,1.631,1757,5.182,1758,3.391,1759,2.005,1760,3.391,1761,4.406,1762,2.005,1763,2.005,1764,2.005,1765,3.391,1766,3.391,1767,3.391,1768,1.897,1769,4.28,1770,4.406,1771,1.947,1772,3.391,1773,2.005,1774,1.683,1775,1.426,1776,2.005,1777,2.005,1778,1.947,1779,2.005,1780,2.005,1781,2.005,1782,1.711,1783,2.005,1784,5.034]],["component/33",[1,0.433]],["title/34-1",[744,34.979,745,32.102]],["name/34-1",[]],["text/34-1",[]],["component/34-1",[]],["title/34-2",[148,18.128,585,16.411,1066,28.215,1785,31.436]],["name/34-2",[]],["text/34-2",[]],["component/34-2",[]],["title/34-3",[16,19.456,18,18.409,20,15.029,656,23.502,1204,25.743]],["name/34-3",[]],["text/34-3",[]],["component/34-3",[]],["title/34-4",[630,29.278,1786,45.796]],["name/34-4",[]],["text/34-4",[]],["component/34-4",[]],["title/34-5",[75,28.031,1787,44.028]],["name/34-5",[]],["text/34-5",[]],["component/34-5",[]],["title/34-6",[209,31.147,585,22.984]],["name/34-6",[]],["text/34-6",[]],["component/34-6",[]],["title/34-7",[188,24.741,261,19.664,1788,32.04,1789,35.136]],["name/34-7",[]],["text/34-7",[]],["component/34-7",[]],["title/34-8",[585,22.984,1790,46.812]],["name/34-8",[]],["text/34-8",[]],["component/34-8",[]],["title/34-9",[388,41.814]],["name/34-9",[]],["text/34-9",[]],["component/34-9",[]],["title/34-10",[64,30.084]],["name/34-10",[]],["text/34-10",[]],["component/34-10",[]],["title/34-11",[478,32.075]],["name/34-11",[]],["text/34-11",[]],["component/34-11",[]],["title/34-12",[18,29.47,48,28.031]],["name/34-12",[]],["text/34-12",[]],["component/34-12",[]],["title/34-13",[53,22.061,60,18.981,478,21.371]],["name/34-13",[]],["text/34-13",[]],["component/34-13",[]],["title/34-14",[585,19.149,850,32.5,1791,32.923]],["name/34-14",[]],["text/34-14",[]],["component/34-14",[]],["title/34-15",[56,20.639,579,24.515,583,22.078,980,21.615]],["name/34-15",[]],["text/34-15",[]],["component/34-15",[]],["title/34",[1440,34.843]],["name/34",[1440,1.005]],["text/34",[1,1.648,7,3.349,12,0.631,14,1.114,16,0.961,17,1.04,18,2.123,20,2.08,21,1.23,28,0.725,32,0.88,34,1.897,38,1.407,39,0.812,40,3.107,41,1.741,44,0.742,48,2.019,49,1.011,52,1.717,56,0.892,60,0.703,64,2.08,66,1.979,68,1.663,69,0.892,74,2.595,75,3.265,78,2.328,80,1.734,83,1.854,103,1.775,120,1.43,124,0.83,125,1.006,140,0.897,148,0.783,181,1.946,189,0.791,202,1.069,208,0.88,209,2.244,242,1.581,259,2.569,261,2.978,264,1.561,266,1.854,270,0.87,273,1.1,277,1.271,283,1.049,287,1.305,289,1.72,300,1.089,301,0.954,322,1.907,329,0.886,354,0.961,356,0.771,372,2.082,382,1.271,402,1.47,413,0.787,417,0.954,429,0.886,447,1.069,460,1.188,478,0.791,514,3.527,528,1.235,554,0.767,557,1.04,558,2.82,574,1.271,579,1.059,583,2.227,585,3.109,589,2.26,600,1.412,606,1.523,626,1.695,630,2.109,631,2.775,634,1.384,636,2.295,637,1.695,656,4.069,744,3.438,745,3.472,764,1.358,765,3.182,789,1.089,808,1.838,809,1.235,850,2.107,854,2.107,865,1.271,875,2.134,878,1.203,883,1.311,896,1.946,899,1.561,920,1.203,952,0.99,980,0.934,987,1.966,1040,1.059,1050,0.968,1066,2.134,1099,1.235,1204,2.969,1425,0.975,1440,0.859,1476,1.235,1739,1.412,1741,1.311,1785,2.378,1786,2.473,1787,1.358,1788,1.384,1791,2.134,1792,1.358,1793,1.518,1794,1.563,1795,1.563,1796,1.518,1797,5.453,1798,1.563,1799,1.563,1800,1.563,1801,1.563,1802,1.563,1803,1.563,1804,1.563,1805,1.563,1806,1.563,1807,1.563,1808,2.296,1809,1.563,1810,1.563,1811,2.107,1812,1.479,1813,1.479,1814,1.291,1815,1.518,1816,1.563,1817,1.563,1818,1.358,1819,1.235,1820,1.358,1821,1.188,1822,1.563,1823,2.736,1824,1.563,1825,1.563,1827,1.563,1828,1.563,1829,1.563,1830,1.518,1831,1.563,1832,1.563,1833,1.678,1834,1.678,1835,3.918,1836,1.678,1837,2.163,1839,1.563,1840,1.563,1841,1.563,1842,1.563,1843,1.518,1844,1.563,1845,2.736,1846,2.423,1847,1.563,1848,1.563,1849,1.563,1850,1.563,1975,1.334,2033,1.358,2120,2.226,2139,1.678,2140,1.678,2141,1.678,2142,1.479,2143,1.563,2144,1.678,2145,1.678,2146,1.678,2147,1.678,2148,1.678]],["component/34",[1,0.433]],["title/35-1",[183,38.526,202,34.652]],["name/35-1",[]],["text/35-1",[]],["component/35-1",[]],["title/35-2",[52,23.834,77,32.102]],["name/35-2",[]],["text/35-2",[]],["component/35-2",[]],["title/35-3",[12,20.469,39,26.336]],["name/35-3",[]],["text/35-3",[]],["component/35-3",[]],["title/35-4",[22,34.027,61,25.009]],["name/35-4",[]],["text/35-4",[]],["component/35-4",[]],["title/35-5",[12,17.053,19,26.54,60,18.981]],["name/35-5",[]],["text/35-5",[]],["component/35-5",[]],["title/35-6",[12,20.469,1871,44.028]],["name/35-6",[]],["text/35-6",[]],["component/35-6",[]],["title/35-7",[855,54.823]],["name/35-7",[]],["text/35-7",[]],["component/35-7",[]],["title/35",[478,32.075]],["name/35",[478,0.925]],["text/35",[7,4.34,11,4.154,12,1.276,15,0.758,16,1.942,19,0.819,21,1.42,39,1.211,49,2.328,52,0.613,60,2.561,61,3.111,69,1.802,77,2.435,88,1.421,89,0.768,123,0.813,129,1.673,181,4.05,189,0.659,195,0.696,208,1.78,218,1.15,274,0.979,285,1.942,288,0.677,366,1.623,424,2.497,440,0.688,477,0.825,481,1.132,487,1.059,516,0.899,562,1.076,571,1.608,572,3.686,576,3.649,585,2.004,596,0.773,606,0.725,626,1.442,762,1.132,763,4.264,808,2.121,819,1.132,821,1.076,862,3.281,980,0.778,986,0.956,1263,1.003,1267,3.038,1837,3.492,1860,3.913,1861,1.154,1865,1.924,1866,2.063,1868,1.203,1871,1.132,1872,1.302,1873,3.843,1874,2.329,1875,3.158,1876,1.302,1877,1.302,1878,1.302,1879,1.302,1880,2.329,1881,3.843,1882,1.593,1883,2.329,1884,2.329,1885,1.302,1886,1.302,1887,5.328,1888,5.328,1889,2.329,1890,1.302,1891,0.99,1892,1.302,1893,1.302,1894,2.329,1895,1.302,1896,1.302,1897,1.302,1898,1.302,1899,4.264,1900,5.694,1901,3.843,1902,5.694,1903,1.302,1904,1.302,1905,1.302,1906,3.637,1907,3.843,1908,3.843,1909,1.302,1910,1.302,1911,1.302,1912,3.843,1913,3.843,1914,1.302,1915,3.158,1916,1.302,1917,1.302,1918,3.158,1919,1.302,1920,1.302,1921,3.158,1922,1.302,1923,1.302,1924,3.158,1925,3.158,1926,1.302,1927,3.158,1928,4.906,1929,1.302,1930,1.302,1931,2.152,1932,2.204,1933,2.329,1934,2.329,1935,2.329,1936,2.329,1937,3.158,1938,2.329,1939,2.329,1940,2.329,1941,2.329,1942,1.302,1943,2.329,1944,1.203,1945,1.302,1946,2.329,1947,2.329,1948,1.302,1949,1.302,1950,1.302,1951,1.302,1952,1.302,1953,1.302,1954,1.302,1955,1.302,1956,1.302,1957,1.302,1958,1.302,1959,1.302,1960,1.177,1961,1.302,1962,1.302,1963,2.329]],["component/35",[1,0.433]],["title/36-1",[64,30.084]],["name/36-1",[]],["text/36-1",[]],["component/36-1",[]],["title/36-2",[14,20.629,1050,31.377]],["name/36-2",[]],["text/36-2",[]],["component/36-2",[]],["title/36-3",[38,21.709,41,20.139,185,22.813]],["name/36-3",[]],["text/36-3",[]],["component/36-3",[]],["title/36",[1964,49.413]],["name/36",[1964,1.426]],["text/36",[1,1.797,7,3.967,10,0.709,13,0.813,14,0.828,15,0.93,17,0.393,24,0.296,27,1.368,28,0.274,31,1.413,32,0.631,34,1.056,36,0.433,38,2.598,39,0.307,41,0.534,43,0.368,44,1.325,48,0.326,49,1.031,60,0.265,61,0.291,62,0.788,64,2.562,65,0.797,66,1.677,68,1.812,75,0.62,78,0.849,81,0.745,82,0.3,83,1.083,89,0.348,103,1.519,110,0.759,117,0.788,120,0.585,123,0.368,130,0.504,138,0.874,154,0.973,166,2.255,185,3.786,186,0.884,187,1.055,188,0.766,189,1.229,191,0.374,197,1.58,200,0.403,202,1.909,226,0.326,240,0.727,242,0.647,243,0.343,251,0.396,258,0.46,259,0.788,261,0.609,264,0.337,266,0.759,270,1.553,280,0.363,287,1.158,288,0.582,290,0.386,296,0.454,297,0.664,299,1.389,301,0.683,303,0.495,304,2.27,305,0.752,310,1.389,312,1.706,317,0.495,321,0.788,329,0.635,354,1.493,356,0.789,357,1.32,365,0.407,372,0.337,373,0.355,374,0.454,381,0.48,388,0.389,391,0.411,406,0.48,411,0.411,413,0.805,417,0.36,418,1.766,420,0.352,422,0.363,429,0.635,440,0.312,445,1.846,446,0.973,447,0.403,452,2.347,458,0.386,469,0.473,474,0.433,475,0.911,486,0.473,493,0.968,516,0.407,546,0.348,553,0.473,554,0.785,556,0.822,558,1.563,579,0.4,581,0.759,585,0.268,593,0.473,596,0.664,602,0.545,604,0.42,605,1.445,606,0.89,616,1.148,619,0.495,626,1.259,630,0.341,633,0.495,636,4.24,637,3.129,639,1.319,652,0.449,657,2.897,659,0.433,758,1.308,759,1.24,771,0.898,784,0.495,788,0.851,789,0.781,806,0.46,808,0.396,812,0.62,813,1.223,831,0.438,842,0.805,844,0.411,854,0.454,857,0.513,868,0.454,869,0.733,870,0.513,877,0.832,890,0.733,895,0.454,899,1.592,909,0.433,912,0.805,918,0.487,920,0.862,966,0.822,978,0.781,995,0.513,1050,0.365,1059,0.504,1064,0.94,1092,1.646,1209,0.48,1234,0.956,1236,3.068,1238,0.504,1248,0.94,1250,1.766,1252,0.973,1263,0.454,1267,4.617,1364,0.487,1369,0.956,1378,1.187,1432,0.466,1442,0.513,1505,2.342,1567,0.504,1685,0.533,1720,0.513,1727,0.873,1737,0.727,1756,0.48,1774,0.94,1775,0.42,1782,0.504,1791,0.873,1808,2.621,1811,0.454,1814,1.32,1819,1.919,1820,0.513,1821,2.375,1870,0.438,1882,0.403,1891,0.449,1965,0.59,1966,0.59,1967,1.088,1968,0.545,1969,1.157,1970,3.123,1971,3.123,1972,3.123,1973,2.032,1974,3.123,1975,2.666,1976,3.995,1977,3.353,1978,2.996,1979,2.79,1980,2.64,1981,3.123,1982,1.477,1983,1.12,1984,1.598,1985,1.512,1986,1.552,1987,1.598,1988,1.716,1989,1.12,1990,0.61,1991,0.633,1992,0.61,1993,0.633,1994,0.633,1997,0.633,1998,0.573,1999,0.633,2000,0.633,2001,0.59,2002,0.59,2003,0.59,2004,1.598,2005,1.598,2006,0.558,2007,0.59,2008,0.59,2009,0.573,2010,0.59,2011,0.59,2012,0.59,2013,0.59,2014,0.558,2015,0.573,2016,0.898,2017,1.679,2018,1.341,2019,0.513,2020,0.513,2021,0.513,2022,1.012,2023,0.504,2024,1.12,2025,0.59,2026,0.533,2027,1.035,2028,0.533,2029,1.012,2030,0.59,2031,1.12,2032,1.12,2033,4.053,2034,3.714,2035,2.032,2036,1.12,2037,1.12,2038,1.598,2039,1.12,2040,1.06,2041,0.59,2042,0.533,2043,0.558,2044,0.573,2045,0.487,2046,0.558,2047,0.513,2048,0.59,2049,0.59,2050,0.59,2051,1.12,2052,1.12,2053,0.522,2054,0.59,2055,0.59,2056,1.12,2057,1.12,2058,0.59,2059,0.59,2060,0.573,2061,0.59,2062,0.59,2063,0.59,2064,2.032,2065,0.59,2066,1.12,2067,0.59,2068,0.973,2069,1.088,2070,0.558,2071,0.59,2072,0.59,2073,0.59,2074,0.633,2075,0.633,2076,0.633,2077,0.633,2078,0.59,2079,0.59,2080,0.513,2081,0.513,2082,0.513,2083,0.513,2084,0.59,2085,0.59,2086,0.59,2087,0.59,2088,0.545,2089,0.59,2090,0.533,2091,0.59,2092,0.46,2093,0.513,2094,0.59,2095,0.545,2096,0.545,2097,0.558,2098,0.59,2099,0.59,2100,0.59,2101,0.59,2102,0.59,2103,0.59,2104,1.12,2105,1.12,2106,4.45,2107,4.45,2108,1.12,2109,0.633,2110,0.633,2111,3.977,2112,1.12,2113,1.12,2114,3.43,2115,1.035,2116,2.79,2117,1.12,2118,1.12,2119,0.573,2120,0.911,2121,0.558,2122,0.59,2123,0.573,2124,0.59,2125,0.59,2126,0.59,2127,0.573,2128,0.59,2129,0.59,2130,0.558,2131,0.59,2132,1.12]],["component/36",[1,0.433]],["title/37-1",[14,17.187,1882,28.87,2092,32.923]],["name/37-1",[]],["text/37-1",[]],["component/37-1",[]],["title/37-2",[585,19.149,1425,26.338,2135,33.368]],["name/37-2",[]],["text/37-2",[]],["component/37-2",[]],["title/37-3",[49,15.596,1737,27.396,1775,30.017]],["name/37-3",[]],["text/37-3",[]],["component/37-3",[]],["title/37-4",[48,20.014,810,28.596,909,26.562,2159,31.436]],["name/37-4",[]],["text/37-4",[]],["component/37-4",[]],["title/37-5",[1854,44.874,2160,47.94]],["name/37-5",[]],["text/37-5",[]],["component/37-5",[]],["title/37",[2161,50.081]],["name/37",[2161,1.445]],["text/37",[1,1.505,7,2.686,12,0.636,14,1.494,18,1.601,21,1.238,24,1.38,28,2.321,38,0.809,41,1.313,44,1.307,48,2.768,49,1.356,52,1.726,60,1.238,61,0.777,63,1.048,64,1.307,65,1.373,66,1.243,68,0.717,76,1.108,81,1.048,84,1.097,85,0.846,88,0.96,89,0.928,90,1.212,93,1.021,103,0.765,108,0.934,117,1.938,141,1.155,185,1.983,189,0.797,196,1.03,197,0.67,208,0.887,218,0.777,226,0.871,241,1.28,259,1.108,263,1.227,270,1.532,287,1.313,288,1.431,294,1.03,297,0.934,300,1.097,301,1.68,311,0.921,314,1.131,315,1.076,329,0.892,351,1.155,354,1.692,365,1.086,371,1.343,372,1.571,375,1.057,377,1.066,388,1.039,391,1.097,413,0.793,417,1.68,429,0.892,440,2.326,445,3.804,447,1.076,448,2.901,470,1.422,515,1.744,524,1.108,549,1.155,557,1.048,558,1.013,569,1.182,581,1.066,585,0.714,596,1.634,606,2.043,626,2.727,630,0.909,636,4.15,637,3.098,649,1.321,652,1.197,658,1.367,659,1.155,691,1.131,744,1.901,745,1.744,759,2.24,765,1.143,774,1.321,788,1.197,789,4.13,808,1.057,809,2.176,810,1.244,812,1.523,813,1.656,824,3.132,844,1.097,868,4.561,869,1.03,875,1.227,877,2.725,886,1.367,899,0.898,909,1.155,978,1.097,1017,1.367,1041,1.244,1082,1.367,1092,1.866,1098,1.131,1166,1.367,1265,1.422,1425,1.718,1430,1.197,1440,0.865,1452,1.394,1737,1.021,1775,1.119,1792,1.367,1818,1.367,1819,1.244,1821,2.79,1865,1.3,1870,2.044,1882,1.076,1891,1.197,1899,3.189,1960,1.422,1964,1.227,2016,1.261,2017,3.031,2018,3.08,2019,1.367,2020,1.367,2021,1.367,2022,1.422,2023,1.343,2026,1.422,2028,1.422,2029,3.317,2045,3.031,2047,2.392,2068,1.367,2080,1.367,2081,1.367,2082,1.367,2083,1.367,2092,1.227,2093,1.367,2120,1.28,2135,4.349,2159,1.367,2160,1.489,2162,2.674,2163,1.573,2164,1.573,2165,1.573,2166,1.422,2167,1.573,2168,1.528,2169,1.573,2170,1.573,2171,1.573,2172,1.573,2173,1.573,2174,1.573,2175,1.454,2176,1.573,2177,1.573,2178,1.528,2179,2.753,2180,1.573,2181,1.573,2182,1.573,2183,1.573,2184,1.573,2185,1.573,2186,1.528,2187,1.573,2188,1.454,2189,1.573,2190,1.489,2191,1.573,2192,1.528,2193,1.573,2194,1.573,2195,1.573,2196,1.573,2197,1.573,2198,1.573,2199,1.689,2200,2.955,2201,1.689,2202,1.689,2203,1.689,2204,1.689,2205,1.689,2206,1.689,2207,1.689,2208,1.689,2209,1.689,2210,1.689,2211,1.689,2212,1.689,2213,1.689,2214,1.689,2215,1.689,2216,1.689,2217,3.94,2218,2.955,2219,1.689,2220,1.689,2221,1.689,2222,3.94,2223,1.626,2224,1.689,2225,1.689]],["component/37",[1,0.433]],["title/38-1",[0,63.349]],["name/38-1",[]],["text/38-1",[]],["component/38-1",[]],["title/38",[1,19.056]],["name/38",[2,1.51]],["text/38",[1,1.72,3,2.918,4,2.449,5,2.918,6,2.918,7,1.247,8,2.918,9,2.918,10,1.849,11,2.014,12,2.858,13,2.347,14,1.878,15,3.325,16,3.515,17,3.07,18,3.325,19,2.899,20,1.386,21,1.312,22,1.96,23,2.834,24,2.311,25,2.584,26,2.918,27,1.644,28,1.354,29,2.696,30,2.41,31,1.477,32,2.598,33,1.942,34,1.517,35,2.307,36,2.142,37,2.536,38,1.501,39,1.517,40,2.614,41,2.728,42,2.918,43,1.821,44,2.19,45,2.075,46,2.41,47,1.894,48,3.163,49,1.078,50,2.918,51,2.761,52,1.373,53,2.41,54,2.491,55,2.373,56,3.262,57,2.856,58,4.583,59,2.339,60,1.312,61,1.44,62,2.054,63,1.942,64,1.386,65,2.299,66,1.318,67,2.307,68,1.33,69,1.665,70,2.41,71,2.761,72,2.918,73,2.307,74,2.075,75,1.614,76,2.054,77,1.849,78,1.55,79,2.918,80,1.849,81,1.942,82,2.347,83,1.977,84,2.034,85,1.568,86,2.918,87,2.449,88,1.781,89,1.72,90,4.402,91,2.536,92,2.918,93,3.711,94,1.878,95,2.307,96,2.918,97,2.918,98,1.624,99,2.918,100,2.536,101,2.536,102,2.491,103,1.419,104,2.918,105,2.918,106,2.918,107,2.41,108,1.732,109,2.584,110,1.977,111,2.918,112,2.918,113,2.584,114,2.761,115,2.918,116,2.834]],["component/38",[1,0.433]],["title/39-1",[117,44.6]],["name/39-1",[]],["text/39-1",[]],["component/39-1",[]],["title/39-2",[118,63.349]],["name/39-2",[]],["text/39-2",[]],["component/39-2",[]],["title/39-3",[119,50.661,120,26.479]],["name/39-3",[]],["text/39-3",[]],["component/39-3",[]],["title/39-4",[121,41.211,122,31.377]],["name/39-4",[]],["text/39-4",[]],["component/39-4",[]],["title/39-5",[13,25.784,121,41.211]],["name/39-5",[]],["text/39-5",[]],["component/39-5",[]],["title/39-6",[123,39.531]],["name/39-6",[]],["text/39-6",[]],["component/39-6",[]],["title/39",[124,26.92,125,32.616]],["name/39",[124,0.544,125,0.66]],["text/39",[1,1.323,13,1.017,14,2.355,16,2.079,18,1.968,21,2.326,28,1.569,31,1.012,34,1.039,38,2.66,39,1.039,40,1.133,41,1.614,43,1.247,49,2.472,56,1.14,57,1.238,61,0.987,64,1.606,66,0.903,68,0.911,69,1.93,80,1.267,82,1.017,83,1.355,85,1.074,88,2.064,94,1.287,103,2.516,107,1.651,108,1.186,110,1.355,117,2.381,120,1.045,122,2.723,123,3.228,124,2.748,125,1.287,126,3.382,127,1.999,128,2.808,129,1.436,130,1.706,131,1.847,132,1.999,133,2.939,134,1.559,135,1.999,136,5.027,137,3.382,138,1.849,139,1.942,140,1.148,141,1.468,142,1.626,143,1.678,144,2.839,145,1.999,146,1.891,147,2.313,148,1.002,149,1.737,150,1.484,151,1.737,152,1.999,153,1.999,154,1.737,155,1.847,156,1.999,157,1.999,158,3.201,159,1.52,160,3.285,161,3.193,162,3.571,163,2.381,164,1.452,165,3.382,166,1.133,167,3.641,168,1.999,169,1.297,170,4.397,171,1.52,172,1.737,173,1.942,174,1.999,175,1.891,176,1.999,177,1.942,178,1.999,179,1.891,180,1.999,181,1.422,182,2.712,183,2.572,184,1.999,185,1.828,186,1.106,187,1.319,188,1.367,189,1.713,190,1.999,191,2.143,192,2.751,193,3.632,194,1.737,195,1.068,196,1.308,197,1.871,198,1.737,199,1.678,200,1.367,201,1.891,202,1.367,203,2.723,204,1.343,205,1.999,206,1.452,207,1.436,208,1.126,209,1.229,210,1.891,211,1.942,212,2.572,213,1.999,214,1.211,215,1.58,216,1.999,217,1.068,218,0.987,219,1.999,220,1.58,221,1.58,222,1.267,223,1.308,224,1.999,225,1.999,226,1.106,227,1.942,228,1.999,229,1.737,230,2.794,231,1.999,232,1.999,233,1.602,234,1.737,235,1.737,236,1.737,237,1.737,238,1.737,239,1.502,240,1.297,241,1.626,242,1.155,243,1.163,244,2.146,245,2.066,246,1.807,247,2.066,248,2.146,249,2.674,250,1.807,251,1.343,252,1.999,253,1.999,254,1.999,255,1.999,256,1.999,257,1.367,258,1.559,259,1.407,260,1.999,261,1.087,262,1.651,263,1.559,264,1.14,265,1.999]],["component/39",[1,0.433]],["title/40-1",[38,21.709,185,22.813,266,28.606]],["name/40-1",[]],["text/40-1",[]],["component/40-1",[]],["title/40-2",[267,31.647,268,30.74,269,31.647,270,17.616,271,29.242]],["name/40-2",[]],["text/40-2",[]],["component/40-2",[]],["title/40-3",[34,21.942,49,15.596,120,22.061]],["name/40-3",[]],["text/40-3",[]],["component/40-3",[]],["title/40-4",[85,22.683,120,22.061,203,26.142]],["name/40-4",[]],["text/40-4",[]],["component/40-4",[]],["title/40-5",[120,26.479,272,43.247]],["name/40-5",[]],["text/40-5",[]],["component/40-5",[]],["title/40-6",[120,26.479,273,35.667]],["name/40-6",[]],["text/40-6",[]],["component/40-6",[]],["title/40-7",[274,38.065,275,39.517]],["name/40-7",[]],["text/40-7",[]],["component/40-7",[]],["title/40-8",[276,42.934]],["name/40-8",[]],["text/40-8",[]],["component/40-8",[]],["title/40",[64,24.059,207,36.405]],["name/40",[120,0.536,273,0.721]],["text/40",[1,0.804,7,1.838,12,0.43,13,0.541,14,0.433,15,0.619,20,0.921,21,1.934,24,0.972,27,0.599,28,0.9,30,0.878,31,1.353,32,1.093,33,0.708,34,1.008,36,1.424,37,0.924,38,1.696,40,1.1,41,0.507,43,0.664,44,0.505,45,0.756,47,1.735,49,1.416,52,1.258,55,0.865,57,0.659,62,0.749,63,2.195,64,2.237,65,1.911,66,2.685,67,0.841,68,2.709,69,1.107,75,1.479,85,1.772,89,1.143,93,0.69,94,0.685,103,2.092,108,0.631,110,0.721,120,3.627,134,0.83,138,1.06,140,2.469,144,0.893,161,0.772,163,2.321,166,1.516,172,0.924,181,1.901,185,4.112,188,1.327,189,0.982,197,1.138,200,0.727,202,0.727,203,4.394,207,0.764,208,1.093,209,0.654,214,0.645,217,0.568,227,1.535,240,0.69,242,0.615,243,0.619,246,0.961,251,0.714,261,0.578,266,2.914,273,2.699,277,3.118,278,1.229,279,1.656,280,3.655,281,3.118,282,0.809,283,1.303,284,0.865,285,0.654,286,1.597,287,1.275,288,1.008,289,0.669,290,1.75,291,2.88,292,2.282,293,0.908,294,1.75,295,1.159,296,2.058,297,0.631,298,1.792,299,0.924,300,1.352,301,0.649,302,0.924,303,1.628,304,2.175,305,1.303,306,1.064,307,0.924,308,1.064,309,0.649,310,0.924,311,1.565,312,3.609,313,0.908,314,0.764,315,1.327,316,1.006,317,0.893,318,1.064,319,1.555,320,1.457,321,0.749,322,1.397,323,2.323,324,1.064,325,0.924,326,1.409,327,2.323,328,1.064,329,1.516,330,1.064,331,1.064,332,1.064,333,1.064,334,1.064,335,1.064,336,1.064,337,1.064,338,1.064,339,1.064,340,1.064,341,1.064,342,1.064,343,1.064,344,1.064,345,1.064,346,1.064,347,1.064,348,1.064,349,1.064,350,0.908,351,0.781,352,1.685,353,0.924,354,1.192,355,1.064,356,0.525,357,1.602,358,1.493,359,1.493,360,0.83,361,1.939,362,2.865,363,0.961,364,1.175,365,1.339,366,1.352,367,0.908,368,1.269,369,0.799,370,1.064,371,0.908,372,1.107,373,1.167,374,0.819,375,2.214,376,1.259,377,1.314,378,0.908,379,2.865,380,1.064,381,4.126,382,1.578,383,1.064,384,1.064,385,2.058,386,0.83,387,1.939,388,1.28,389,1.064,390,0.781,391,0.741,392,0.69,393,3.834,394,1.064,395,1.064,396,1.555,397,1.064,398,0.841,399,1.064,400,0.781,401,1.939,402,1.772,403,1.939,404,1.064,405,2.673,406,1.578,407,0.924,408,0.764,409,0.772,410,1.628,411,0.741,412,1.064,413,1.347,414,1.006,415,1.493,416,1.939,417,0.649,418,0.924,419,1.409,420,1.159,421,1.064,422,0.654,423,0.708,424,0.841,425,0.924,426,1.064,427,0.983,428,0.924,429,0.603,430,1.064,431,0.819,432,1.064,433,0.961,434,1.064,435,1.064,436,0.908,437,1.064,438,1.064,439,0.636,440,0.562,441,1.006,442,1.064,443,1.064,444,1.064,445,0.809,446,0.924,447,0.727,448,0.841,449,1.064,450,1.064,451,1.033,452,0.799,453,1.064,454,0.924,455,1.064,456,1.064,457,1.628,458,0.696,459,1.064,460,0.809,461,0.924,462,1.064,463,1.064,464,1.064,465,0.924,466,1.064,467,1.064,468,1.064,469,0.853,470,0.961,471,1.064,472,1.064,473,1.006,474,0.781,475,0.865]],["component/40",[1,0.433]],["title/41-1",[476,33.662]],["name/41-1",[]],["text/41-1",[]],["component/41-1",[]],["title/41-2",[477,40.142]],["name/41-2",[]],["text/41-2",[]],["component/41-2",[]],["title/41-3",[124,33.662]],["name/41-3",[]],["text/41-3",[]],["component/41-3",[]],["title/41",[478,32.075]],["name/41",[478,0.925]],["text/41",[7,0.793,12,2.607,14,2.458,15,1.079,20,0.881,21,0.834,24,0.93,28,2.286,31,0.939,32,2.776,38,0.954,41,1.515,44,1.508,47,1.204,49,1.82,52,1.494,53,3.155,60,2.49,61,3.185,68,1.447,69,1.811,73,1.467,77,2.637,78,0.986,82,0.944,85,0.997,94,1.195,103,1.544,124,2.618,125,1.195,133,1.613,136,2.759,138,1.015,141,1.363,142,1.509,148,1.591,161,2.306,162,2.873,166,1.052,167,1.306,191,2.012,198,1.613,217,3.226,218,0.916,222,2.012,223,1.214,239,1.394,242,1.072,243,1.079,278,1.176,280,1.141,284,1.509,285,2.558,286,2.487,287,0.885,294,1.214,307,1.613,311,1.087,322,0.97,326,2.306,329,1.052,356,2.054,359,1.429,364,1.124,366,1.294,369,3.126,372,2.374,376,1.204,385,1.429,386,1.447,388,1.225,396,1.079,408,1.333,413,0.935,419,1.348,420,1.109,422,1.141,423,1.235,431,2.445,439,1.109,457,1.557,458,2.078,477,4.501,478,2.494,479,1.856,480,1.856,481,1.613,482,1.394,483,1.856,484,1.856,485,1.756,486,1.488,487,1.509,488,2.665,489,3.175,490,1.856,491,1.269,492,3.839,493,1.124,494,2.759,495,1.856,496,1.856,497,1.124,498,1.856,499,1.856,500,3.761,501,1.363,502,1.677,503,2.934,504,1.856,505,1.333,506,1.613,507,3.761,508,1.856,509,1.348,510,4.007,511,1.269,512,3.616,513,1.981,514,1.109,515,1.176,516,2.192,517,1.333,518,1.557,519,1.856,520,1.584,521,1.677,522,1.802,523,1.856,524,1.306,525,1.32,526,1.856,527,2.759,528,2.51,529,1.269,530,1.613,531,1.856,532,1.856,533,3.084,534,4.161,535,1.802,536,1.856,537,1.856,538,3.164,539,1.856,540,1.856,541,1.856,542,1.856,543,1.856,544,1.856,545,1.856,546,1.094,547,1.856,548,1.584,549,1.363,550,1.856,551,1.429,552,1.856,553,1.488,554,0.911,555,1.715,556,1.363,557,1.235,558,1.195,559,1.856,560,1.856,561,1.258,562,1.533,563,1.856,564,1.856,565,1.856]],["component/41",[1,0.433]],["title/42-1",[38,26.057,39,26.336]],["name/42-1",[]],["text/42-1",[]],["component/42-1",[]],["title/42-2",[38,26.057,61,25.009]],["name/42-2",[]],["text/42-2",[]],["component/42-2",[]],["title/42-3",[38,21.709,138,23.079,185,22.813]],["name/42-3",[]],["text/42-3",[]],["component/42-3",[]],["title/42-4",[41,15.1,120,16.541,207,22.741,273,22.28,402,17.007]],["name/42-4",[]],["text/42-4",[]],["component/42-4",[]],["title/42-5",[66,22.883,566,54.392]],["name/42-5",[]],["text/42-5",[]],["component/42-5",[]],["title/42-6",[12,25.595]],["name/42-6",[]],["text/42-6",[]],["component/42-6",[]],["title/42",[288,32.932]],["name/42",[288,0.95]],["text/42",[1,1.19,12,1.903,13,0.883,14,0.707,15,1.01,17,1.156,18,1.01,20,1.424,21,2.392,24,1.502,31,1.518,32,0.978,34,2.057,36,2.201,38,2.993,39,0.902,40,0.984,41,1.888,43,1.871,44,1.879,47,1.127,49,2.15,52,0.817,53,2.78,55,1.412,56,1.711,57,1.075,60,1.348,61,1.953,62,1.222,64,0.824,66,2.817,68,2.424,69,0.99,75,0.96,77,1.9,78,1.593,81,1.156,82,0.883,85,0.933,87,1.457,88,1.059,103,3.207,109,1.538,110,1.176,120,0.907,121,1.412,124,1.593,138,1.639,140,0.997,143,1.457,147,1.187,150,1.289,162,1.199,163,1.222,166,0.984,167,1.222,182,1.392,185,3.564,186,1.659,187,1.979,189,2.004,191,1.1,192,1.412,195,2.842,196,1.136,199,1.457,201,2.837,204,2.014,207,2.154,208,2.23,218,0.857,222,1.1,230,1.434,233,1.392,250,1.569,266,1.176,270,0.966,275,1.354,277,2.439,280,3.577,281,1.412,284,1.412,285,1.067,288,1.559,300,1.21,304,1.412,305,2.014,309,1.059,319,3.776,329,1.7,358,1.337,360,2.339,364,1.052,365,1.199,366,1.21,369,1.304,372,0.99,373,1.045,378,1.482,396,1.01,400,2.201,402,0.933,406,1.412,417,1.83,420,1.792,422,1.067,423,1.156,429,0.984,440,0.917,452,2.253,460,1.32,477,2.508,478,2.385,482,1.304,486,1.392,487,1.412,492,0.938,493,1.052,500,1.569,502,1.569,507,1.569,510,1.412,521,1.569,529,1.187,554,1.473,561,1.176,567,1.289,568,1.864,569,1.304,570,1.864,571,2.732,572,1.304,573,1.864,574,1.412,575,1.337,576,1.434,577,1.864,578,1.864,579,1.176,580,1.289,581,1.176,582,3.219,583,1.059,584,1.864,585,1.795,586,2.837,587,2.37,588,1.794,589,1.434,590,3.219,591,1.569,592,1.864,593,1.392,594,3.219,595,1.794,596,1.779,597,1.864,598,1.482,599,1.686,600,1.569,601,1.864,602,1.604,603,1.864,604,1.234,605,1.569,606,0.966,607,1.864,608,1.864,609,1.864,610,1.32,611,1.538,612,1.864,613,1.794,614,1.864,615,1.864,616,1.247,617,1.794,618,1.569,619,1.457,620,1.864,621,1.864,622,1.569,623,1.372,624,1.604,625,1.794,626,1.075,627,1.392,628,1.412,629,1.864,630,1.003,631,1.32,632,1.686,633,1.457,634,1.538,635,1.864]],["component/42",[1,0.433]],["title/43-1",[7,13.523,440,16.723,623,25.018,636,19.899,637,19.601]],["name/43-1",[]],["text/43-1",[]],["component/43-1",[]],["title/43-2",[1,15.239,638,33.729]],["name/43-2",[]],["text/43-2",[]],["component/43-2",[]],["title/43-3",[478,25.651,639,32.883]],["name/43-3",[]],["text/43-3",[]],["component/43-3",[]],["title/43-4",[195,19.329,196,23.674,572,27.178,639,23.478]],["name/43-4",[]],["text/43-4",[]],["component/43-4",[]],["title/43-5",[1,12.696,440,22.304,640,42.208]],["name/43-5",[]],["text/43-5",[]],["component/43-5",[]],["title/43-6",[1,15.239,641,44.028]],["name/43-6",[]],["text/43-6",[]],["component/43-6",[]],["title/43",[561,28.606,616,30.33,642,36.681]],["name/43",[643,1.828]],["text/43",[1,0.637,7,4.119,10,0.742,13,1.077,21,0.952,27,1.193,28,1.344,32,0.66,34,1.1,40,0.664,44,0.556,49,0.433,52,0.551,63,2.363,66,0.529,68,0.534,69,0.668,74,2.059,75,1.602,83,0.794,85,0.629,93,0.76,103,0.57,110,0.794,123,0.731,128,0.748,149,1.018,166,2.012,167,1.49,169,0.76,194,1.018,195,3.194,196,2.687,199,1.776,204,0.786,240,0.76,243,0.681,251,0.786,257,0.801,261,0.637,270,0.652,274,0.88,276,0.794,288,0.609,309,0.715,315,0.801,321,0.824,329,0.664,354,0.72,356,0.578,362,1.839,417,0.715,420,1.265,425,1.018,429,0.664,440,3.295,454,1.018,458,1.385,477,3.605,478,2.078,497,1.282,509,0.85,525,0.833,538,1.609,551,0.902,554,0.575,561,2.405,572,1.59,574,0.953,581,0.794,596,1.256,618,1.058,623,0.926,631,1.609,636,1.821,637,0.725,638,1.409,639,4.047,641,2.516,642,7.859,644,1.137,645,0.86,646,1.108,647,1.171,648,1.108,649,0.983,650,1.171,651,1.108,652,0.89,653,1.108,654,1.171,655,1.59,656,0.87,657,0.913,658,1.839,659,1.554,660,1.171,661,3.549,662,1.171,663,3.549,664,2.896,665,2.116,666,1.171,667,1.171,668,1.839,669,2.516,670,3.358,671,1.171,672,1.171,673,1.171,674,1.171,675,1.171,676,1.257,677,1.171,678,2.116,679,1.171,680,2.116,681,1.171,682,1.171,683,1.171,684,1.137,685,1.171,686,1.171,687,1.171,688,2.896,689,1.171,690,1.171,691,0.841,692,1.171,693,1.171,694,1.171,695,1.171,696,1.171,697,1.171,698,1.171,699,1.171,700,1.171,701,2.003,702,0.926,703,1.316,704,1.171,705,1.171,706,2.056,707,1.171,708,2.056,709,1.651,710,1.171,711,1.171,712,1.171,713,1.171,714,1.171,715,5.688,716,1.171,717,1.171,718,1.171,719,1.171,720,1.171,721,1.171,722,1.171,723,1.171,724,1.171,725,1.171,726,1.171,727,1.171,728,1.171,729,1.171,730,1.171,731,1.171,732,1.171,733,1.171,734,1.171,735,1.171,736,1.171,737,1.171,738,1.171,739,1.171,740,1.171,741,1.171,742,1.171,743,1.171,744,1.999,745,0.742,746,1.171,747,5.419,748,1.171,749,1.171,750,2.896,751,1.171,752,2.116,753,1.171,754,2.116,755,1.171,756,1.171,757,1.171,758,0.754,759,0.715,760,1.875,761,1.171,762,1.018,763,1.018,764,1.018,765,0.85,766,1.137,767,2.896,768,2.116,769,1.171,770,1.171,771,0.939,772,0.983,773,0.953,774,0.983,775,1.171,776,2.896,777,1.171,778,1.171,779,1.171,780,1.171,781,1.171,782,1.171,783,1.058,784,0.983,785,1.171,786,1.171,787,4.583,788,0.89,789,0.816,790,1.171,791,1.171,792,1.171,793,1.171,794,1.171,795,1.171,796,1.171,797,1.171,798,1.171,799,1.171,800,1.171,801,1.171,802,1.171,803,1.171,804,1.171,805,1.171,806,0.913,807,1.171,808,2.384,809,0.926,810,0.926,811,1.018,812,1.171,813,1.273,814,1.018,815,1.018]],["component/43",[1,0.433]],["title/44-1",[195,27.072,571,34.979]],["name/44-1",[]],["text/44-1",[]],["component/44-1",[]],["title/44-2",[20,24.059,195,27.072]],["name/44-2",[]],["text/44-2",[]],["component/44-2",[]],["title/44-3",[195,27.072,571,34.979]],["name/44-3",[]],["text/44-3",[]],["component/44-3",[]],["title/44-4",[478,32.075]],["name/44-4",[]],["text/44-4",[]],["component/44-4",[]],["title/44-5",[276,42.934]],["name/44-5",[]],["text/44-5",[]],["component/44-5",[]],["title/44",[195,27.072,580,37.624]],["name/44",[195,0.977]],["text/44",[7,0.719,11,0.629,12,0.68,13,1.485,14,0.685,15,0.979,16,2.618,17,1.943,18,0.979,19,0.573,20,2.819,21,0.41,22,0.612,24,1.175,27,0.948,28,0.781,31,1.187,32,0.948,33,0.606,34,1.219,35,1.33,39,0.875,40,0.517,41,1.118,43,2.657,44,1.113,45,1.196,46,0.752,47,1.092,48,3.031,49,1.704,53,1.525,57,1.042,59,0.73,60,1.538,63,1.12,64,0.433,65,0.839,66,1.745,76,4.025,77,1.849,80,0.577,82,0.464,88,0.556,89,1.382,91,1.462,94,0.586,95,0.72,98,0.507,103,0.443,108,0.541,122,1.807,123,0.568,128,1.074,129,1.209,134,1.312,140,2.219,141,0.669,148,1.175,150,0.677,151,0.792,159,0.693,162,2.015,163,0.641,167,0.641,171,0.693,183,0.693,185,1.267,189,0.461,191,1.485,195,3.28,203,0.564,204,1.574,206,0.662,214,1.421,218,0.45,233,0.73,240,1.522,242,0.972,258,0.711,264,0.52,272,2.491,276,0.617,280,1.034,282,1.279,283,1.13,285,1.794,286,1.005,287,0.435,288,0.474,294,0.596,295,0.544,296,1.295,301,1.027,302,0.792,305,0.612,311,0.533,313,0.778,315,1.151,320,0.684,322,0.476,323,0.792,326,1.222,329,0.517,350,0.778,353,1.462,356,0.83,358,0.701,359,0.701,366,0.635,367,0.778,373,2.058,374,0.701,375,0.612,376,0.591,377,1.589,379,0.792,385,1.295,386,1.312,392,0.591,396,0.979,400,1.721,402,1.838,407,0.792,409,0.662,411,1.173,417,1.027,419,0.662,420,1.005,422,0.56,423,0.606,424,0.72,429,0.517,452,0.684,460,0.693,465,0.792,474,1.721,476,0.894,477,1.849,478,2.156,482,2.57,493,2.342,497,0.552,509,0.662,510,5.947,514,0.544,520,0.778,524,1.184,527,0.792,528,0.72,529,1.151,530,2.972,538,0.693,548,0.778,549,1.235,551,1.295,554,0.826,557,0.606,569,0.684,571,4.366,575,2.634,579,0.617,581,0.617,585,0.763,591,0.823,596,0.541,611,0.807,627,0.73,630,0.526,637,1.807,638,0.606,747,0.792,758,0.586,772,0.765,816,1.682,817,0.885,818,0.911,819,0.792,820,0.911,821,1.39,822,0.669,823,0.792,824,0.778,825,0.911,826,0.842,827,0.792,828,0.885,829,0.911,830,0.911,831,1.249,832,0.862,833,4.479,834,0.911,835,0.885,836,0.862,837,1.436,838,1.634,839,2.491,840,0.911,841,1.634,842,1.684,843,0.911,844,2.034,845,0.752,846,0.911,847,0.862,848,0.911,849,0.911,850,5.002,851,0.885,852,0.911,853,0.911,854,1.295,855,0.72,856,0.885,857,1.462,858,3.493,859,0.792,860,2.037,861,0.911,862,0.778,863,0.911,864,1.936,865,0.741,866,0.911,867,2.834,868,0.701,869,1.101,870,0.792,871,0.911,872,0.911,873,2.918,874,0.911,875,2.276,876,0.765,877,0.677,878,0.701,879,0.911,880,2.247,881,0.911,882,0.911,883,3.243,884,2.218,885,0.823,886,2.972,887,0.911,888,0.911,889,0.885,890,0.596,891,0.911,892,1.592,893,0.885,894,1.592,895,0.701,896,0.648,897,0.911,898,0.778,899,1.665,900,1.592,901,0.911,902,0.842,903,3.42,904,1.634,905,0.911,906,0.862,907,0.911,908,0.568,909,0.669,910,0.911,911,0.885,912,0.655,913,0.911,914,0.911,915,0.72,916,0.911,917,0.911,918,0.752,919,0.911,920,1.295,921,0.885,922,0.911,923,0.911,924,0.911,925,1.49,926,0.911,927,0.911,928,0.911,929,2.918,930,1.312,931,0.765,932,0.911,933,0.911,934,1.682,935,0.885,936,0.862,937,0.823,938,0.911,939,0.778,940,0.911,941,0.911,942,0.778,943,0.842,944,0.911,945,0.911,946,0.911,947,0.862,948,0.765,949,0.842,950,0.911,951,0.911,952,0.577,953,0.72,954,0.911,955,0.823,956,0.911,957,0.885,958,0.911,959,0.911,960,0.911,961,0.862,962,0.911,963,0.752]],["component/44",[1,0.433]],["title/45-1",[476,33.662]],["name/45-1",[]],["text/45-1",[]],["component/45-1",[]],["title/45-2",[217,22.555,218,20.836,513,26.338]],["name/45-2",[]],["text/45-2",[]],["component/45-2",[]],["title/45-3",[439,30.274,964,40.051]],["name/45-3",[]],["text/45-3",[]],["component/45-3",[]],["title/45-4",[13,25.784,203,31.377]],["name/45-4",[]],["text/45-4",[]],["component/45-4",[]],["title/45-5",[148,25.389,965,37.201]],["name/45-5",[]],["text/45-5",[]],["component/45-5",[]],["title/45-6",[290,33.157,965,37.201]],["name/45-6",[]],["text/45-6",[]],["component/45-6",[]],["title/45-7",[203,31.377,966,37.201]],["name/45-7",[]],["text/45-7",[]],["component/45-7",[]],["title/45-8",[967,44.028,968,40.051]],["name/45-8",[]],["text/45-8",[]],["component/45-8",[]],["title/45",[82,25.784,197,21.56]],["name/45",[197,0.436,969,0.89]],["text/45",[7,2.21,12,0.808,13,2.238,14,2.724,20,2.088,21,1.521,28,1.569,41,1.614,49,2.321,52,0.94,53,1.768,57,1.238,65,0.997,66,0.903,78,1.062,140,2.525,148,1.695,166,1.133,191,2.143,197,2.462,200,1.367,203,3.204,217,3.356,218,1.67,227,3.606,257,1.367,261,1.087,262,1.651,278,2.143,286,3.457,287,0.954,290,1.308,295,1.194,322,2.298,356,0.987,368,1.308,373,1.203,396,1.968,402,1.074,408,2.431,413,1.007,420,1.194,439,4.529,491,5.011,501,1.468,511,3.007,513,3.228,546,1.178,554,0.982,583,1.22,587,2.674,638,1.331,812,1.106,837,1.706,890,2.878,908,1.247,952,4.457,964,3.476,965,1.468,966,2.484,968,3.476,970,1.999,971,1.737,972,1.999,973,1.999,974,2.214,975,3.786,976,5.458,977,1.559,978,1.393,979,1.308,980,1.194,981,1.148,982,1.999,983,5.024,984,1.999,985,1.942,986,1.468,987,1.436,988,4.397,989,3.382,990,4.397,991,1.539,992,1.737,993,3.382,994,1.999,995,2.939,996,2.16,997,1.999,998,1.942,999,1.58,1000,1.737,1001,1.58,1002,3.382,1003,1.737,1004,1.559,1005,1.999,1006,1.999,1007,1.999,1008,1.999,1009,1.999,1010,1.999,1011,1.999,1012,1.999,1013,1.999,1014,1.999,1015,1.737,1016,1.999,1017,1.737,1018,1.58,1019,1.999,1020,1.58,1021,1.999,1022,1.999,1023,1.999,1024,1.999,1025,1.999,1026,1.999,1027,1.999,1028,1.999,1029,1.999,1030,1.999,1031,1.999,1032,1.999,1033,1.559,1034,1.706,1035,3.382,1036,1.999,1037,1.999,1038,3.821,1039,1.999,1040,1.355,1041,1.58,1042,1.737,1043,1.651,1044,1.999,1045,1.737,1046,1.999,1047,1.737,1048,3.382,1049,1.355]],["component/45",[1,0.433]],["title/46-1",[476,33.662]],["name/46-1",[]],["text/46-1",[]],["component/46-1",[]],["title/46-2",[287,24.173,981,29.091]],["name/46-2",[]],["text/46-2",[]],["component/46-2",[]],["title/46-3",[322,26.479,981,29.091]],["name/46-3",[]],["text/46-3",[]],["component/46-3",[]],["title/46-4",[413,25.519,981,29.091]],["name/46-4",[]],["text/46-4",[]],["component/46-4",[]],["title/46-5",[981,29.091,996,32.356]],["name/46-5",[]],["text/46-5",[]],["component/46-5",[]],["title/46-6",[812,23.354,981,24.236,1049,28.606]],["name/46-6",[]],["text/46-6",[]],["component/46-6",[]],["title/46",[215,40.051,1050,31.377]],["name/46",[812,0.567,1050,0.635]],["text/46",[1,1.212,7,3.144,13,3.002,14,2.647,15,1.436,16,1.517,19,1.552,20,3.879,21,2.297,28,1.87,31,2.041,44,1.914,49,2.577,66,1.115,68,1.837,85,3.169,208,1.391,240,1.602,270,1.374,285,1.517,287,1.923,289,1.552,295,3.053,311,1.445,322,1.29,354,1.517,364,1.496,368,1.615,375,2.707,376,3.316,390,1.812,392,1.602,396,3.431,408,1.774,413,1.243,415,1.9,419,3.711,431,1.9,513,2.515,546,1.455,554,1.212,567,1.833,575,1.9,606,1.374,669,5.649,758,1.589,759,3.6,811,2.145,812,2.23,823,3.503,878,1.9,908,1.54,931,2.072,939,2.107,964,4.039,974,1.615,975,3.86,979,3.86,981,3.387,1050,3.653,1051,3.915,1052,2.468,1053,2.468,1054,2.468,1055,2.107,1056,2.397,1057,2.468,1058,4.031,1059,2.107,1060,2.072,1061,3.503,1062,2.336,1063,3.187,1064,3.383,1065,2.468,1066,1.925,1067,3.441,1068,2.468,1069,2.397,1070,5.109,1071,4.031,1072,5.109,1073,2.336,1074,4.031,1075,2.468,1076,2.468,1077,2.468,1078,2.468,1079,4.031,1080,2.468,1081,2.468,1082,3.503,1083,4.031,1084,2.397,1085,2.468,1086,2.145,1087,2.468,1088,2.468,1089,2.468,1090,2.468,1091,2.397,1092,1.673,1093,2.468,1094,1.576,1095,2.336,1096,2.336]],["component/46",[1,0.433]],["title/47-1",[476,33.662]],["name/47-1",[]],["text/47-1",[]],["component/47-1",[]],["title/47",[14,20.629,122,31.377]],["name/47",[2,1.51]],["text/47",[4,2.787,7,3.39,12,2.509,14,2.077,20,2.949,27,1.871,31,1.681,44,1.577,49,3.151,53,2.666,60,2.294,61,2.518,78,2.71,80,2.104,122,3.846,138,1.816,148,1.664,171,2.525,197,1.413,208,1.871,214,2.012,215,2.625,226,1.837,261,1.805,286,1.984,287,1.584,290,2.173,295,3.71,300,3.555,321,2.338,369,2.495,413,1.673,422,2.042,428,2.886,458,2.173,476,1.765,492,2.757,501,4.559,513,4.347,515,3.232,517,2.386,518,2.787,546,3.006,554,2.505,585,1.507,812,2.822,813,3.736,814,2.886,815,2.886,876,2.787,908,2.072,971,2.886,974,4.559,975,3.338,976,2.886,977,3.978,979,2.173,1050,3.159,1055,2.835,1063,2.625,1067,2.835,1086,5.396,1094,2.121,1097,3.321,1098,2.386,1099,4.909,1100,3.321,1101,3.321,1102,3.321,1103,3.321,1104,3.321,1105,2.886,1106,2.439,1107,2.315,1108,3.321]],["component/47",[1,0.433]],["title/48-1",[186,23.354,604,30.017,930,32.923]],["name/48-1",[]],["text/48-1",[]],["component/48-1",[]],["title/48-2",[186,23.354,604,30.017,1109,36.031]],["name/48-2",[]],["text/48-2",[]],["component/48-2",[]],["title/48-3",[186,28.031,1110,40.051]],["name/48-3",[]],["text/48-3",[]],["component/48-3",[]],["title/48-4",[187,41.814]],["name/48-4",[]],["text/48-4",[]],["component/48-4",[]],["title/48-5",[186,28.031,1111,40.051]],["name/48-5",[]],["text/48-5",[]],["component/48-5",[]],["title/48-6",[186,23.354,1111,33.368,1112,42.208]],["name/48-6",[]],["text/48-6",[]],["component/48-6",[]],["title/48-7",[1113,50.081]],["name/48-7",[]],["text/48-7",[]],["component/48-7",[]],["title/48-8",[1114,55.054]],["name/48-8",[]],["text/48-8",[]],["component/48-8",[]],["title/48-9",[197,26.959]],["name/48-9",[]],["text/48-9",[]],["component/48-9",[]],["title/48-10",[197,21.56,325,44.028]],["name/48-10",[]],["text/48-10",[]],["component/48-10",[]],["title/48-11",[197,21.56,1115,50.661]],["name/48-11",[]],["text/48-11",[]],["component/48-11",[]],["title/48-12",[1116,37.201,1117,44.028]],["name/48-12",[]],["text/48-12",[]],["component/48-12",[]],["title/48-13",[297,30.067,1110,40.051]],["name/48-13",[]],["text/48-13",[]],["component/48-13",[]],["title/48-14",[197,21.56,1113,40.051]],["name/48-14",[]],["text/48-14",[]],["component/48-14",[]],["title/48-15",[197,21.56,966,37.201]],["name/48-15",[]],["text/48-15",[]],["component/48-15",[]],["title/48-16",[197,21.56,1118,44.028]],["name/48-16",[]],["text/48-16",[]],["component/48-16",[]],["title/48",[138,27.701,148,25.389]],["name/48",[138,0.56,148,0.513]],["text/48",[7,0.909,12,0.329,14,2.364,19,0.953,20,0.72,21,0.682,27,0.459,28,2.134,31,0.412,39,0.788,40,2.431,41,0.388,43,0.508,47,0.528,49,0.301,53,1.392,56,0.865,65,0.756,68,0.691,76,0.573,78,0.433,82,0.414,85,0.437,93,0.528,124,1.668,129,1.528,138,1.717,140,2.462,148,1.066,166,0.462,186,1.972,187,1,188,0.557,189,0.412,197,1.825,200,0.557,209,0.932,214,0.493,217,2.61,218,2.866,223,0.533,227,0.87,264,1.213,276,1.027,279,1.294,286,3.216,287,1.7,290,1.392,291,2.001,292,0.695,297,1.262,301,0.497,309,0.497,322,2.062,326,1.101,356,0.402,365,0.562,368,0.533,372,0.464,376,0.528,391,0.567,396,1.55,398,0.643,402,0.437,409,0.591,410,0.683,411,1.057,413,1.581,429,0.462,447,0.557,469,1.215,491,1.037,497,0.493,505,0.585,506,0.707,511,1.037,514,0.486,529,1.037,546,0.48,554,0.4,557,0.542,558,0.524,598,0.695,606,0.453,630,0.47,638,0.542,645,0.598,659,2.305,691,1.528,702,1.198,709,0.635,806,0.635,827,0.707,842,2.834,845,0.672,869,1.743,890,0.992,908,0.508,930,1.182,942,1.294,952,2.499,965,1.113,967,0.707,968,0.643,979,0.533,986,0.598,987,1.089,992,0.707,996,2.519,1001,0.643,1003,2.315,1004,1.659,1015,1.317,1018,0.643,1020,0.643,1033,0.635,1038,3.428,1040,2.673,1042,0.707,1045,1.317,1047,1.317,1049,2.128,1061,0.707,1092,1.027,1094,0.52,1098,1.528,1107,1.057,1109,1.816,1110,5.006,1111,0.643,1113,0.643,1114,0.707,1116,1.113,1117,1.317,1118,0.707,1119,2.013,1120,0.791,1121,1.182,1122,1.516,1123,0.814,1124,1.516,1125,0.814,1126,1.516,1127,0.814,1128,1.516,1129,0.814,1130,1.516,1131,0.814,1132,1.516,1133,0.814,1134,1.516,1135,0.814,1136,1.516,1137,0.814,1138,0.814,1139,0.814,1140,2.127,1141,0.814,1142,1.516,1143,0.814,1144,0.814,1145,0.814,1146,0.814,1147,0.814,1148,0.814,1149,0.814,1150,0.814,1151,0.814,1152,0.814,1153,0.814,1154,2.127,1155,1.516,1156,2.664,1157,0.814,1158,1.516,1159,1.516,1160,0.814,1161,0.814,1162,2.587,1163,1.516,1164,2.127,1165,3.221,1166,2.728,1167,0.814,1168,1.516,1169,1.516,1170,1.272,1171,0.791,1172,0.814,1173,0.814,1174,0.814,1175,0.814,1176,0.791,1177,1.516,1178,1.516,1179,0.814,1180,1.516,1181,0.814,1182,1.516,1183,0.814,1184,0.814,1185,0.814,1186,0.814,1187,0.814,1188,0.814,1189,0.814,1190,0.814,1191,0.814,1192,0.814,1193,0.814,1194,0.814,1195,0.814,1196,0.814,1197,1.516,1198,0.814,1199,0.814,1200,0.814,1201,0.814,1202,0.814,1203,0.814,1204,1.233,1205,0.814,1206,0.814,1207,0.814,1208,0.814,1209,0.662,1210,0.814,1211,0.814,1212,0.814,1213,0.814,1214,0.814,1215,0.814,1216,0.695,1217,0.814,1218,0.814,1219,0.814,1220,0.814,1221,0.814,1222,0.814,1223,0.814,1224,0.814,1225,0.814,1226,0.814,1227,1.848,1228,0.814,1229,1.848,1230,0.814,1231,0.814,1232,0.814,1233,0.814,1234,0.695,1235,0.814,1236,0.672,1237,0.814,1238,0.695,1239,0.814,1240,0.814,1241,0.77,1242,0.814,1243,0.814,1244,0.814,1245,0.814,1246,0.814,1247,0.814,1248,0.683,1249,0.814,1250,0.707,1251,0.814,1252,0.707,1253,0.814,1254,0.814,1255,0.814,1256,0.814,1257,0.791,1258,0.814,1259,0.791,1260,0.814,1261,0.695,1262,0.814,1263,0.627,1264,0.814,1265,0.736,1266,0.814,1267,0.643,1268,0.814,1269,0.814,1270,0.814,1271,0.814,1272,0.814,1273,0.814,1274,0.814,1275,0.814,1276,0.814,1277,0.814,1278,0.814,1279,0.77,1280,0.814,1281,6.169,1282,0.814,1283,0.814,1284,0.814,1285,0.814,1286,0.814,1287,0.814,1288,0.707,1289,0.814,1290,0.814,1291,0.814,1292,0.814,1293,0.814,1294,0.814,1295,0.814,1296,1.516,1297,0.814,1298,1.516,1299,0.814,1300,1.516,1301,0.814,1302,1.516,1303,0.814,1304,0.707,1305,0.814,1306,0.814,1307,0.814,1308,0.707,1309,0.814,1310,0.707,1311,0.814,1312,0.707,1313,0.814,1314,0.707,1315,0.814,1316,0.814,1317,0.814,1318,0.707,1319,0.814,1320,0.707,1321,0.814,1322,0.814,1323,0.814,1324,0.752,1325,0.814,1326,0.752,1327,0.814,1328,0.814,1329,0.814,1330,0.814,1331,0.814,1332,0.814,1333,0.814,1334,0.814,1335,0.814,1336,0.814,1337,0.814,1338,0.814,1339,0.814,1340,0.814,1341,0.814,1342,0.814,1343,0.814,1344,0.814,1345,0.814,1346,0.814,1347,0.814,1348,0.814,1349,0.814,1350,0.814,1351,0.814,1352,0.814,1353,0.814,1354,0.814,1355,0.814,1356,0.814,1357,0.814,1358,0.814,1359,0.814,1360,2.127,1361,0.791,1362,0.814,1363,0.814,1364,0.672,1365,0.814,1366,0.814,1367,0.814,1368,0.814,1369,0.695,1370,1.516,1371,0.814,1372,1.516,1373,0.814,1374,0.814,1375,0.814,1376,0.814,1377,2.664,1378,0.604,1379,0.791,1380,0.814,1381,0.77,1382,0.814,1383,0.814,1384,1.434,1385,0.814,1386,0.814,1387,0.814,1388,1.516,1389,2.664,1390,0.814,1391,0.707,1392,0.814,1393,0.814,1394,0.814,1395,0.814,1396,0.814,1397,0.814,1398,0.814,1399,0.707,1400,0.707,1401,1.516,1402,0.814,1403,0.707,1404,0.814,1405,0.707,1406,0.814,1407,0.814,1408,0.814,1409,0.814,1410,0.814,1411,0.814,1412,0.814,1413,2.664,1414,0.814,1415,0.814,1416,0.814,1417,0.814,1418,0.814,1419,0.814,1420,0.814,1421,0.707,1422,0.707]],["component/48",[1,0.433]],["title/49-1",[476,33.662]],["name/49-1",[]],["text/49-1",[]],["component/49-1",[]],["title/49-2",[1423,46.518]],["name/49-2",[]],["text/49-2",[]],["component/49-2",[]],["title/49-3",[217,27.072,492,27.382]],["name/49-3",[]],["text/49-3",[]],["component/49-3",[]],["title/49-4",[53,26.479,1106,37.201]],["name/49-4",[]],["text/49-4",[]],["component/49-4",[]],["title/49-5",[513,31.613,975,33.157]],["name/49-5",[]],["text/49-5",[]],["component/49-5",[]],["title/49-6",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/49-6",[]],["text/49-6",[]],["component/49-6",[]],["title/49",[12,14.615,61,17.856,402,19.439,492,19.55]],["name/49",[492,0.554,1106,0.752]],["text/49",[1,1.164,10,1.488,12,1.994,14,0.956,20,2.343,21,1.74,24,1.176,28,2.289,33,2.576,49,2.661,53,2.991,61,2.825,65,1.929,68,1.07,74,1.67,94,1.511,103,1.142,108,1.393,124,1.247,128,1.499,164,3.584,166,1.331,169,1.524,197,0.999,206,1.705,209,2.378,217,4.292,218,2.436,220,1.856,221,1.856,222,3.626,223,3.745,226,2.14,242,1.357,257,1.606,263,1.831,286,2.948,287,1.12,289,1.476,294,2.532,295,1.403,297,1.393,311,1.375,322,2.022,329,1.331,356,1.91,364,2.344,368,3.745,372,1.339,377,1.591,396,1.366,402,2.652,409,1.705,413,1.182,439,1.403,491,4.329,492,3.892,493,1.423,494,3.362,497,1.423,513,3.079,514,1.403,515,2.451,546,2.909,633,1.97,645,2.841,655,1.764,759,1.433,765,1.705,812,1.299,813,3.443,831,1.743,880,1.808,890,1.536,896,1.67,898,2.004,912,1.687,915,1.856,969,2.04,974,4.142,975,2.532,977,1.831,979,2.532,980,1.403,981,2.221,991,1.808,996,1.499,1000,3.362,1041,1.856,1094,2.471,1105,2.04,1106,4.647,1121,1.831,1170,1.97,1261,2.004,1423,2.841,1425,1.465,1427,3.362,1428,1.785,1429,2.04,1430,1.785,1431,2.04,1432,1.856,1433,2.348,1434,2.348,1435,1.882,1436,2.28,1437,2.348,1438,2.348,1439,1.939,1440,2.128,1441,2.348,1442,2.04,1443,2.348,1444,2.348,1445,2.04,1446,2.04]],["component/49",[1,0.433]],["title/50-1",[476,33.662]],["name/50-1",[]],["text/50-1",[]],["component/50-1",[]],["title/50-2",[1423,46.518]],["name/50-2",[]],["text/50-2",[]],["component/50-2",[]],["title/50-3",[217,27.072,492,27.382]],["name/50-3",[]],["text/50-3",[]],["component/50-3",[]],["title/50-4",[60,18.981,297,25.05,1447,36.681]],["name/50-4",[]],["text/50-4",[]],["component/50-4",[]],["title/50-5",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/50-5",[]],["text/50-5",[]],["component/50-5",[]],["title/50-6",[218,20.836,505,30.33,517,30.33]],["name/50-6",[]],["text/50-6",[]],["component/50-6",[]],["title/50-7",[223,27.625,249,33.368,1448,36.681]],["name/50-7",[]],["text/50-7",[]],["component/50-7",[]],["title/50-8",[1449,55.054]],["name/50-8",[]],["text/50-8",[]],["component/50-8",[]],["title/50-9",[1450,55.054]],["name/50-9",[]],["text/50-9",[]],["component/50-9",[]],["title/50-10",[52,29.804]],["name/50-10",[]],["text/50-10",[]],["component/50-10",[]],["title/50-11",[392,32.883,1451,44.028]],["name/50-11",[]],["text/50-11",[]],["component/50-11",[]],["title/50",[12,14.615,60,16.266,402,19.439,492,19.55]],["name/50",[60,0.461,492,0.554]],["text/50",[1,0.315,7,3.324,10,0.349,12,1.317,14,0.427,20,0.909,21,0.247,24,0.525,28,0.486,33,0.698,40,0.594,49,0.387,52,0.9,53,0.548,58,0.441,60,1.814,65,0.954,68,0.872,75,1.059,78,0.797,80,0.349,81,0.366,82,0.533,84,1.046,100,0.478,101,1.663,102,0.895,103,0.268,108,0.327,122,0.341,124,1.218,128,0.351,147,0.376,148,1.323,164,1.09,169,0.974,189,0.279,192,0.448,197,0.446,204,0.704,206,0.4,208,1.078,209,0.338,214,0.333,217,1.583,218,0.517,220,0.435,221,0.435,222,0.664,223,1.728,226,0.58,249,2.577,257,1.309,261,0.299,275,0.429,278,0.349,286,1.77,287,1.094,289,0.346,294,0.686,297,0.327,305,0.37,309,0.336,311,0.322,322,1,352,2.574,356,0.272,364,0.333,368,0.982,376,0.357,377,0.373,396,0.61,398,1.513,402,0.296,413,0.756,415,0.424,423,0.366,439,1.37,488,0.462,491,2.23,492,1.239,493,0.333,497,0.635,501,0.404,505,1.647,511,0.717,512,0.478,514,0.626,515,1.213,517,1.078,525,0.745,546,1.351,554,1.455,567,0.409,606,0.835,610,0.419,628,0.448,630,0.318,645,1.683,655,0.413,668,1.663,691,0.753,702,0.435,709,0.429,758,0.354,759,0.64,813,1.152,844,0.384,855,1.812,869,0.982,880,2.033,896,0.391,899,0.314,912,0.395,915,0.435,952,1.877,953,0.435,974,0.982,975,0.686,981,0.316,986,0.404,987,0.395,991,0.424,996,0.958,999,0.829,1001,1.812,1018,0.435,1020,0.435,1033,0.429,1034,0.47,1040,1.297,1043,0.455,1049,1.554,1060,0.462,1092,0.373,1094,0.958,1098,1.078,1107,0.384,1116,0.404,1121,0.818,1227,0.911,1229,0.478,1288,0.911,1304,0.478,1308,1.992,1310,0.911,1312,1.992,1314,0.478,1318,0.911,1320,1.304,1378,0.409,1391,1.304,1399,0.478,1400,0.478,1403,0.478,1405,0.478,1421,0.478,1422,0.478,1423,0.77,1425,0.654,1427,0.911,1428,0.419,1429,0.911,1430,0.419,1431,0.478,1432,0.829,1445,0.911,1446,0.478,1447,0.911,1448,1.992,1449,0.911,1450,1.304,1451,1.663,1452,0.487,1453,0.478,1454,1.048,1455,1.048,1456,0.55,1457,1.458,1458,1.048,1459,1.048,1460,0.55,1461,1.048,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.048,1469,0.55,1470,1.048,1471,2.962,1472,0.535,1473,0.55,1474,0.55,1475,0.55,1476,1.186,1477,0.55,1478,0.55,1479,0.509,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.292,1485,0.55,1486,5.35,1487,1.914,1488,2.292,1489,1.501,1490,1.501,1491,1.501,1492,2.292,1493,1.914,1494,2.292,1495,1.914,1496,1.048,1497,1.048,1498,2.641,1499,1.048,1500,1.458,1501,2.292,1502,0.55,1503,1.914,1504,1.048,1505,0.462,1506,1.501,1507,2.962,1508,1.914,1509,1.048,1510,1.501,1511,0.55,1512,0.55,1513,1.914,1514,1.048,1515,1.914,1516,1.458,1517,1.048,1518,1.501,1519,1.501,1520,2.641,1521,0.55,1522,1.048,1523,1.914,1524,0.55,1525,1.501,1526,1.914,1527,1.048,1528,0.55,1529,2.292,1530,2.292,1531,2.641,1532,2.292,1533,1.501,1534,1.914,1535,1.048,1536,1.501,1537,1.914,1538,1.501,1539,1.501,1540,2.962,1541,0.55,1542,1.914,1543,1.914,1544,1.048,1545,0.947,1546,1.914,1547,1.501,1548,2.292,1549,0.55,1550,2.292,1551,0.55,1552,1.048,1553,0.55,1554,1.048,1555,3.26,1556,1.914,1557,1.501,1558,1.501,1559,1.048,1560,1.048,1561,0.55,1562,2.641,1563,1.501,1564,1.914,1565,1.914,1566,1.914,1567,1.281,1568,0.55,1569,1.914,1570,1.048,1571,1.048,1572,1.501,1573,1.914,1574,1.048,1575,1.501,1576,2.292,1577,1.501,1578,1.914,1579,1.501,1580,1.501,1581,1.048,1582,1.914,1583,0.55,1584,1.501,1585,1.048,1586,1.501,1587,1.048,1588,1.914,1589,0.55,1590,1.914,1591,0.55,1592,1.501,1593,1.048,1594,1.914,1595,1.048,1596,1.501,1597,1.914,1598,0.55,1599,1.501,1600,1.501,1601,1.048,1602,1.914,1603,1.048,1604,1.048,1605,1.501,1606,1.048,1607,0.55,1608,1.914,1609,1.501,1610,2.962,1611,1.048,1612,1.048,1613,0.55,1614,1.501,1615,1.914,1616,1.501,1617,0.55,1618,1.048,1619,0.55,1620,1.501,1621,0.55,1622,1.048,1623,1.048,1624,1.048,1625,1.501,1626,0.55,1627,1.914,1628,1.048,1629,1.914,1630,1.501,1631,1.501,1632,1.501,1633,0.55,1634,0.55,1635,1.914,1636,1.501,1637,0.55,1638,1.048,1639,0.55,1640,0.55,1641,1.048,1642,1.914,1643,0.55,1644,0.55,1645,1.048,1646,0.55,1647,1.048,1648,0.55,1649,1.048,1650,1.048,1651,0.55,1652,0.55,1653,1.048,1654,1.914,1655,1.914,1656,0.55,1657,1.048,1658,1.048,1659,0.55,1660,1.048,1661,1.048,1662,0.55,1663,1.501,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.501,1670,2.292,1671,1.048,1672,1.048,1673,1.048,1674,0.55,1675,0.55,1676,1.048,1677,1.501,1678,0.55,1679,0.55,1680,1.048,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.497,1686,1.501,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.048,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.048,1704,1.048,1705,1.048,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.535,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.521,1717,0.55,1718,0.55,1719,0.55,1720,0.478,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.535,1726,0.55,1727,0.818,1728,0.55,1729,0.55,1730,0.55,1731,0.535,1732,0.55,1733,0.535,1734,0.55,1735,0.55,1736,0.55,1737,0.357,1738,0.521,1739,0.497,1740,0.535,1741,0.462,1742,1.048,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.048,1750,0.55,1751,1.048,1752,0.55,1753,0.478,1754,0.55]],["component/50",[1,0.433]],["title/51-1",[476,33.662]],["name/51-1",[]],["text/51-1",[]],["component/51-1",[]],["title/51-2",[82,25.784,226,28.031]],["name/51-2",[]],["text/51-2",[]],["component/51-2",[]],["title/51-3",[227,29.091,392,32.883]],["name/51-3",[]],["text/51-3",[]],["component/51-3",[]],["title/51-4",[227,36.376]],["name/51-4",[]],["text/51-4",[]],["component/51-4",[]],["title/51-5",[264,36.145]],["name/51-5",[]],["text/51-5",[]],["component/51-5",[]],["title/51-6",[439,37.856]],["name/51-6",[]],["text/51-6",[]],["component/51-6",[]],["title/51-7",[227,29.091,390,37.201]],["name/51-7",[]],["text/51-7",[]],["component/51-7",[]],["title/51-8",[227,36.376]],["name/51-8",[]],["text/51-8",[]],["component/51-8",[]],["title/51",[226,35.051]],["name/51",[226,1.011]],["text/51",[7,2.215,12,0.81,14,0.816,22,1.347,24,3.152,28,2.045,31,1.015,32,1.911,44,0.952,49,1.628,52,1.595,60,0.902,61,0.99,65,1.691,82,1.726,84,1.398,122,3.21,124,2.341,125,1.291,140,1.151,147,1.371,148,1.005,159,3.351,162,1.384,169,1.301,189,1.717,197,0.853,217,1.071,218,0.99,226,3.48,227,4.858,229,1.742,234,1.742,235,1.742,236,3.829,237,1.742,238,1.742,239,1.506,241,1.631,242,1.159,243,1.166,259,1.411,264,4.827,278,1.27,285,1.233,287,3.196,295,1.198,309,1.224,314,3.166,322,3.029,351,2.49,356,0.99,364,1.215,373,1.206,390,4.619,392,3.761,413,2.61,422,1.233,429,1.137,436,1.711,439,3.463,461,1.742,493,2.055,497,3.141,511,1.371,515,1.27,554,0.985,561,1.359,585,0.91,610,3.351,626,2.1,627,1.607,628,4.216,745,1.27,812,1.876,813,1.206,842,1.441,890,1.312,895,1.544,908,1.251,952,1.27,953,2.681,974,1.312,979,2.219,980,1.198,996,2.166,999,1.585,1004,1.564,1040,2.298,1049,2.298,1063,1.585,1094,2.814,1099,1.585,1107,1.398,1428,1.525,1435,1.607,1476,1.585,1753,5.036,1755,2.005,1756,1.631,1757,5.182,1758,3.391,1759,2.005,1760,3.391,1761,4.406,1762,2.005,1763,2.005,1764,2.005,1765,3.391,1766,3.391,1767,3.391,1768,1.897,1769,4.28,1770,4.406,1771,1.947,1772,3.391,1773,2.005,1774,1.683,1775,1.426,1776,2.005,1777,2.005,1778,1.947,1779,2.005,1780,2.005,1781,2.005,1782,1.711,1783,2.005,1784,5.034]],["component/51",[1,0.433]],["title/52-1",[744,34.979,745,32.102]],["name/52-1",[]],["text/52-1",[]],["component/52-1",[]],["title/52-2",[148,18.128,585,16.411,1066,28.215,1785,31.436]],["name/52-2",[]],["text/52-2",[]],["component/52-2",[]],["title/52-3",[16,19.456,18,18.409,20,15.029,656,23.502,1204,25.743]],["name/52-3",[]],["text/52-3",[]],["component/52-3",[]],["title/52-4",[630,29.278,1786,45.796]],["name/52-4",[]],["text/52-4",[]],["component/52-4",[]],["title/52-5",[75,28.031,1787,44.028]],["name/52-5",[]],["text/52-5",[]],["component/52-5",[]],["title/52-6",[209,31.147,585,22.984]],["name/52-6",[]],["text/52-6",[]],["component/52-6",[]],["title/52-7",[188,24.741,261,19.664,1788,32.04,1789,35.136]],["name/52-7",[]],["text/52-7",[]],["component/52-7",[]],["title/52-8",[585,22.984,1790,46.812]],["name/52-8",[]],["text/52-8",[]],["component/52-8",[]],["title/52-9",[388,41.814]],["name/52-9",[]],["text/52-9",[]],["component/52-9",[]],["title/52-10",[64,30.084]],["name/52-10",[]],["text/52-10",[]],["component/52-10",[]],["title/52-11",[478,32.075]],["name/52-11",[]],["text/52-11",[]],["component/52-11",[]],["title/52-12",[18,29.47,48,28.031]],["name/52-12",[]],["text/52-12",[]],["component/52-12",[]],["title/52-13",[585,19.149,850,32.5,1791,32.923]],["name/52-13",[]],["text/52-13",[]],["component/52-13",[]],["title/52-14",[53,22.061,60,18.981,478,21.371]],["name/52-14",[]],["text/52-14",[]],["component/52-14",[]],["title/52-15",[56,20.639,579,24.515,583,22.078,980,21.615]],["name/52-15",[]],["text/52-15",[]],["component/52-15",[]],["title/52",[1440,34.843]],["name/52",[1440,1.005]],["text/52",[1,1.571,7,3.098,11,0.869,12,1.241,14,0.512,16,1.388,17,1.504,18,2.51,20,2.049,21,1.685,28,1.048,32,0.709,34,1.948,38,1.162,39,0.654,40,2.722,41,1.788,44,0.598,48,2.889,49,2.065,52,1.763,53,1.958,54,1.928,60,1.016,64,1.779,65,0.628,66,1.692,68,1.4,69,0.718,73,0.995,74,2.185,75,3.092,77,2.735,78,2.293,80,1.431,83,1.531,88,0.768,95,0.995,103,1.494,120,1.18,123,0.785,124,0.669,125,0.81,140,0.723,148,0.631,163,0.886,181,1.606,182,1.009,189,1.143,193,1.04,197,0.961,202,0.861,208,2.111,209,1.889,242,1.305,251,0.845,259,2.163,261,3.369,264,1.753,266,1.531,270,0.701,273,0.886,277,1.024,278,0.797,283,1.517,287,1.078,288,0.654,289,1.932,300,0.877,301,1.378,322,1.606,354,0.774,356,1.516,372,2.979,373,0.757,382,3.51,391,0.877,402,1.214,413,0.634,417,0.768,429,0.714,447,0.861,477,1.431,478,1.555,514,3.532,516,1.559,528,0.995,529,0.861,554,0.618,557,0.838,558,1.978,574,1.024,576,1.04,583,0.768,585,2.682,589,1.865,598,1.074,600,1.138,604,0.895,606,2.086,624,1.163,626,1.399,630,1.305,631,2.849,634,1.115,636,2.356,637,1.399,656,3.878,744,2.587,745,3.042,760,2,764,1.094,765,2.721,789,0.877,808,1.517,809,0.995,850,2.885,854,2.365,865,1.837,883,1.056,896,1.606,899,1.289,952,0.797,963,1.865,987,1.623,1040,0.853,1050,0.779,1066,1.762,1099,0.995,1204,3.048,1216,1.074,1425,0.785,1440,0.692,1476,0.995,1727,0.982,1739,1.138,1741,1.056,1785,1.963,1786,2.042,1787,1.094,1788,2.721,1791,2.922,1792,1.094,1793,1.222,1794,1.259,1795,1.259,1796,1.222,1797,4.825,1798,1.259,1799,1.259,1800,1.259,1801,1.259,1802,1.259,1803,1.259,1804,1.259,1805,1.259,1806,1.259,1807,1.259,1808,1.896,1809,1.259,1810,1.259,1811,0.969,1812,1.191,1813,1.191,1814,1.04,1815,1.222,1816,1.259,1817,1.259,1818,1.094,1819,0.995,1820,1.094,1821,0.957,1822,1.259,1823,2.258,1824,3.072,1825,1.259,1826,2.538,1827,1.259,1828,1.259,1829,1.259,1830,1.222,1831,1.259,1832,1.259,1833,1.351,1834,1.351,1835,3.298,1836,1.351,1837,1.785,1838,1.301,1839,1.259,1840,1.259,1841,1.259,1842,1.259,1843,1.222,1844,1.259,1845,2.258,1846,1.115,1847,1.259,1848,1.259,1849,2.258,1850,1.259,1851,1.351,1852,1.301,1853,1.301,1854,1.115,1855,1.301,1856,1.259,1857,1.301,1858,1.301,1859,1.301,1860,1.115,1861,1.115,1862,1.301,1863,1.301,1864,1.301,1865,1.04,1866,1.115,1867,2.194,1868,1.163,1869,1.301,1870,0.935]],["component/52",[1,0.433]],["title/53-1",[183,38.526,202,34.652]],["name/53-1",[]],["text/53-1",[]],["component/53-1",[]],["title/53-2",[52,23.834,77,32.102]],["name/53-2",[]],["text/53-2",[]],["component/53-2",[]],["title/53-3",[12,20.469,39,26.336]],["name/53-3",[]],["text/53-3",[]],["component/53-3",[]],["title/53-4",[22,34.027,61,25.009]],["name/53-4",[]],["text/53-4",[]],["component/53-4",[]],["title/53-5",[12,17.053,19,26.54,60,18.981]],["name/53-5",[]],["text/53-5",[]],["component/53-5",[]],["title/53-6",[12,20.469,1871,44.028]],["name/53-6",[]],["text/53-6",[]],["component/53-6",[]],["title/53-7",[855,54.823]],["name/53-7",[]],["text/53-7",[]],["component/53-7",[]],["title/53",[478,32.075]],["name/53",[478,0.925]],["text/53",[7,4.34,11,4.154,12,1.276,15,0.758,16,1.942,19,0.819,21,1.42,39,1.211,49,2.328,52,0.613,60,2.561,61,3.111,69,1.802,77,2.435,88,1.421,89,0.768,123,0.813,129,1.673,181,4.05,189,0.659,195,0.696,208,1.78,218,1.15,274,0.979,285,1.942,288,0.677,366,1.623,424,2.497,440,0.688,477,0.825,481,1.132,487,1.059,516,0.899,562,1.076,571,1.608,572,3.686,576,3.649,585,2.004,596,0.773,606,0.725,626,1.442,762,1.132,763,4.264,808,2.121,819,1.132,821,1.076,862,3.281,980,0.778,986,0.956,1263,1.003,1267,3.038,1837,3.492,1860,3.913,1861,1.154,1865,1.924,1866,2.063,1868,1.203,1871,1.132,1872,1.302,1873,3.843,1874,2.329,1875,3.158,1876,1.302,1877,1.302,1878,1.302,1879,1.302,1880,2.329,1881,3.843,1882,1.593,1883,2.329,1884,2.329,1885,1.302,1886,1.302,1887,5.328,1888,5.328,1889,2.329,1890,1.302,1891,0.99,1892,1.302,1893,1.302,1894,2.329,1895,1.302,1896,1.302,1897,1.302,1898,1.302,1899,4.264,1900,5.694,1901,3.843,1902,5.694,1903,1.302,1904,1.302,1905,1.302,1906,3.637,1907,3.843,1908,3.843,1909,1.302,1910,1.302,1911,1.302,1912,3.843,1913,3.843,1914,1.302,1915,3.158,1916,1.302,1917,1.302,1918,3.158,1919,1.302,1920,1.302,1921,3.158,1922,1.302,1923,1.302,1924,3.158,1925,3.158,1926,1.302,1927,3.158,1928,4.906,1929,1.302,1930,1.302,1931,2.152,1932,2.204,1933,2.329,1934,2.329,1935,2.329,1936,2.329,1937,3.158,1938,2.329,1939,2.329,1940,2.329,1941,2.329,1942,1.302,1943,2.329,1944,1.203,1945,1.302,1946,2.329,1947,2.329,1948,1.302,1949,1.302,1950,1.302,1951,1.302,1952,1.302,1953,1.302,1954,1.302,1955,1.302,1956,1.302,1957,1.302,1958,1.302,1959,1.302,1960,1.177,1961,1.302,1962,1.302,1963,2.329]],["component/53",[1,0.433]],["title/54-1",[64,30.084]],["name/54-1",[]],["text/54-1",[]],["component/54-1",[]],["title/54-2",[14,20.629,1050,31.377]],["name/54-2",[]],["text/54-2",[]],["component/54-2",[]],["title/54-3",[38,21.709,41,20.139,185,22.813]],["name/54-3",[]],["text/54-3",[]],["component/54-3",[]],["title/54",[1964,49.413]],["name/54",[1964,1.426]],["text/54",[1,1.791,7,3.975,10,0.705,13,0.808,14,0.823,15,0.924,17,0.39,24,0.294,27,1.36,28,0.272,31,1.405,32,0.627,34,1.05,36,0.43,38,2.588,39,0.305,41,0.531,43,0.366,44,1.318,48,0.324,49,1.025,60,0.263,61,0.289,62,0.783,64,2.552,65,0.792,66,1.669,68,1.804,75,0.615,78,0.844,81,0.741,82,0.298,83,1.076,89,0.345,103,1.511,110,0.754,117,0.783,120,0.581,123,0.366,130,0.5,138,0.868,154,0.967,166,2.244,185,3.776,186,0.879,187,1.048,188,0.761,189,1.222,191,0.371,197,1.573,200,0.401,202,1.898,226,0.324,240,0.722,242,0.643,243,0.341,251,0.393,258,0.457,259,0.783,261,0.605,264,0.334,266,0.754,270,1.545,280,0.36,287,1.152,288,0.578,290,0.383,296,0.451,297,0.66,299,1.38,301,0.679,303,0.492,304,2.257,305,0.747,310,1.38,312,1.695,317,0.492,321,0.783,329,0.631,354,1.484,356,0.784,357,1.312,365,0.404,372,0.334,373,0.352,374,0.451,381,0.477,388,0.387,391,0.408,406,0.477,411,0.408,413,0.8,417,0.358,418,1.756,420,0.35,422,0.36,429,0.631,440,0.31,445,1.836,446,0.967,447,0.401,452,2.334,458,0.383,469,0.47,474,0.43,475,0.905,486,0.47,493,0.962,516,0.404,546,0.345,553,0.47,554,0.78,556,0.817,558,1.554,579,0.397,581,0.754,585,0.266,593,0.47,596,0.66,602,0.541,604,0.417,605,1.436,606,0.884,616,1.141,619,0.492,626,1.251,630,0.339,633,0.492,636,4.228,637,3.116,639,1.311,652,0.445,657,2.883,659,0.43,758,1.301,759,1.233,771,0.892,784,0.492,788,0.846,789,0.775,806,0.457,808,0.393,812,0.615,813,1.216,831,0.435,842,0.799,844,0.408,854,0.451,857,0.509,868,0.451,869,0.728,870,0.509,877,0.826,890,0.728,895,0.451,899,1.583,909,0.43,912,0.799,918,0.484,920,0.856,966,0.817,978,0.775,995,0.509,1050,0.363,1059,0.5,1064,0.934,1092,1.636,1209,0.477,1234,0.949,1236,3.471,1238,0.5,1248,0.934,1250,1.756,1252,0.967,1263,0.451,1267,4.601,1364,0.484,1369,0.949,1378,1.179,1432,0.463,1442,0.509,1505,2.329,1567,0.5,1685,0.53,1720,0.509,1727,0.868,1737,0.722,1756,0.477,1774,0.934,1775,0.417,1782,0.5,1791,0.868,1808,2.608,1811,0.451,1814,1.312,1819,1.908,1820,0.509,1821,2.362,1870,0.435,1882,0.401,1891,0.445,1965,0.586,1966,0.586,1967,1.08,1968,0.541,1969,1.149,1970,3.107,1971,3.107,1972,3.107,1973,2.02,1974,3.107,1975,2.652,1976,3.977,1977,3.335,1978,2.979,1979,2.775,1980,2.626,1981,3.107,1982,1.467,1983,1.112,1984,1.588,1985,1.503,1986,1.542,1987,1.588,1988,1.705,1989,1.112,1990,0.605,1991,0.629,1992,0.605,1993,0.629,1994,0.629,1995,1.25,1996,1.25,1997,0.629,1998,0.569,1999,0.629,2000,0.629,2001,0.586,2002,0.586,2003,0.586,2004,1.588,2005,1.588,2006,0.554,2007,0.586,2008,0.586,2009,0.569,2010,0.586,2011,0.586,2012,0.586,2013,0.586,2014,0.554,2015,0.569,2016,0.892,2017,1.669,2018,1.333,2019,0.509,2020,0.509,2021,0.509,2022,1.005,2023,0.5,2024,1.112,2025,0.586,2026,0.53,2027,1.028,2028,0.53,2029,1.005,2030,0.586,2031,1.112,2032,1.112,2033,4.036,2034,3.696,2035,2.02,2036,1.112,2037,1.112,2038,1.588,2039,1.112,2040,1.053,2041,0.586,2042,0.53,2043,0.554,2044,0.569,2045,0.484,2046,0.554,2047,0.509,2048,0.586,2049,0.586,2050,0.586,2051,1.112,2052,1.112,2053,0.519,2054,0.586,2055,0.586,2056,1.112,2057,1.112,2058,0.586,2059,0.586,2060,0.569,2061,0.586,2062,0.586,2063,0.586,2064,2.02,2065,0.586,2066,1.112,2067,0.586,2068,0.967,2069,1.08,2070,0.554,2071,0.586,2072,0.586,2073,0.586,2074,0.629,2075,0.629,2076,0.629,2077,0.629,2078,0.586,2079,0.586,2080,0.509,2081,0.509,2082,0.509,2083,0.509,2084,0.586,2085,0.586,2086,0.586,2087,0.586,2088,0.541,2089,0.586,2090,0.53,2091,0.586,2092,0.457,2093,0.509,2094,0.586,2095,0.541,2096,0.541,2097,0.554,2098,0.586,2099,0.586,2100,0.586,2101,0.586,2102,0.586,2103,0.586,2104,1.112,2105,1.112,2106,4.431,2107,4.431,2108,1.112,2109,0.629,2110,0.629,2111,3.958,2112,1.112,2113,1.112,2114,3.413,2115,1.028,2116,2.775,2117,1.112,2118,1.112,2119,0.569,2120,0.905,2121,0.554,2122,0.586,2123,0.569,2124,0.586,2125,0.586,2126,0.586,2127,0.569,2128,0.586,2129,0.586,2130,0.554,2131,0.586,2132,1.112]],["component/54",[1,0.433]],["title/55-1",[56,20.639,579,24.515,583,22.078,980,21.615]],["name/55-1",[]],["text/55-1",[]],["component/55-1",[]],["title/55-2",[2133,63.349]],["name/55-2",[]],["text/55-2",[]],["component/55-2",[]],["title/55-3",[22,21.256,56,18.057,583,19.316,2134,30.74,2135,25.018]],["name/55-3",[]],["text/55-3",[]],["component/55-3",[]],["title/55-4",[56,20.639,63,24.082,859,31.436,2136,38.835]],["name/55-4",[]],["text/55-4",[]],["component/55-4",[]],["title/55-5",[1116,37.201,1440,27.865]],["name/55-5",[]],["text/55-5",[]],["component/55-5",[]],["title/55",[583,38.666]],["name/55",[583,1.116]],["text/55",[1,0.926,7,3.652,14,1.253,21,1.384,24,1.542,49,1.137,52,1.448,56,4.586,68,2.191,89,1.814,131,2.844,161,4.298,214,1.865,261,2.614,264,1.756,270,1.713,280,1.892,283,2.067,288,3.076,291,3.613,309,1.879,314,2.212,320,2.313,329,1.745,356,1.519,358,2.37,373,1.852,382,2.504,440,3.127,460,2.341,509,2.235,516,2.125,558,1.981,579,2.086,580,3.571,583,5.217,585,2.685,606,2.677,619,2.583,630,2.779,744,3.32,745,1.95,845,2.542,859,2.675,875,3.751,878,2.37,899,1.756,920,2.37,925,2.726,980,2.873,1116,2.26,1165,4.347,1324,2.844,1326,2.844,1440,1.693,1453,2.675,1737,3.121,1811,2.37,1837,2.433,1846,2.726,1870,2.286,1882,2.105,1944,5.468,1975,2.627,2033,2.675,2120,3.912,2133,5.918,2134,2.99,2135,2.433,2137,3.459,2138,3.304,2139,5.163,2140,3.304,2141,3.304,2142,2.912,2143,3.078,2144,3.304,2145,3.304,2146,3.304,2147,3.304,2148,3.304,2149,3.459,2150,3.304,2151,3.459,2152,3.459,2153,3.304,2154,3.459,2155,3.459,2156,5.405,2157,3.181,2158,3.459]],["component/55",[1,0.433]],["title/56-1",[14,17.187,1882,28.87,2092,32.923]],["name/56-1",[]],["text/56-1",[]],["component/56-1",[]],["title/56-2",[585,19.149,1425,26.338,2135,33.368]],["name/56-2",[]],["text/56-2",[]],["component/56-2",[]],["title/56-3",[49,15.596,1737,27.396,1775,30.017]],["name/56-3",[]],["text/56-3",[]],["component/56-3",[]],["title/56-4",[48,20.014,810,28.596,909,26.562,2159,31.436]],["name/56-4",[]],["text/56-4",[]],["component/56-4",[]],["title/56-5",[1854,44.874,2160,47.94]],["name/56-5",[]],["text/56-5",[]],["component/56-5",[]],["title/56",[2161,50.081]],["name/56",[2161,1.445]],["text/56",[1,1.505,7,2.686,12,0.636,14,1.494,18,1.601,21,1.238,24,1.38,28,2.321,38,0.809,41,1.313,44,1.307,48,2.768,49,1.356,52,1.726,60,1.238,61,0.777,63,1.048,64,1.307,65,1.373,66,1.243,68,0.717,76,1.108,81,1.048,84,1.097,85,0.846,88,0.96,89,0.928,90,1.212,93,1.021,103,0.765,108,0.934,117,1.938,141,1.155,185,1.983,189,0.797,196,1.03,197,0.67,208,0.887,218,0.777,226,0.871,241,1.28,259,1.108,263,1.227,270,1.532,287,1.313,288,1.431,294,1.03,297,0.934,300,1.097,301,1.68,311,0.921,314,1.131,315,1.076,329,0.892,351,1.155,354,1.692,365,1.086,371,1.343,372,1.571,375,1.057,377,1.066,388,1.039,391,1.097,413,0.793,417,1.68,429,0.892,440,2.326,445,3.804,447,1.076,448,2.901,470,1.422,515,1.744,524,1.108,549,1.155,557,1.048,558,1.013,569,1.182,581,1.066,585,0.714,596,1.634,606,2.043,626,2.727,630,0.909,636,4.15,637,3.098,649,1.321,652,1.197,658,1.367,659,1.155,691,1.131,744,1.901,745,1.744,759,2.24,765,1.143,774,1.321,788,1.197,789,4.13,808,1.057,809,2.176,810,1.244,812,1.523,813,1.656,824,3.132,844,1.097,868,4.561,869,1.03,875,1.227,877,2.725,886,1.367,899,0.898,909,1.155,978,1.097,1017,1.367,1041,1.244,1082,1.367,1092,1.866,1098,1.131,1166,1.367,1265,1.422,1425,1.718,1430,1.197,1440,0.865,1452,1.394,1737,1.021,1775,1.119,1792,1.367,1818,1.367,1819,1.244,1821,2.79,1865,1.3,1870,2.044,1882,1.076,1891,1.197,1899,3.189,1960,1.422,1964,1.227,2016,1.261,2017,3.031,2018,3.08,2019,1.367,2020,1.367,2021,1.367,2022,1.422,2023,1.343,2026,1.422,2028,1.422,2029,3.317,2045,3.031,2047,2.392,2068,1.367,2080,1.367,2081,1.367,2082,1.367,2083,1.367,2092,1.227,2093,1.367,2120,1.28,2135,4.349,2159,1.367,2160,1.489,2162,2.674,2163,1.573,2164,1.573,2165,1.573,2166,1.422,2167,1.573,2168,1.528,2169,1.573,2170,1.573,2171,1.573,2172,1.573,2173,1.573,2174,1.573,2175,1.454,2176,1.573,2177,1.573,2178,1.528,2179,2.753,2180,1.573,2181,1.573,2182,1.573,2183,1.573,2184,1.573,2185,1.573,2186,1.528,2187,1.573,2188,1.454,2189,1.573,2190,1.489,2191,1.573,2192,1.528,2193,1.573,2194,1.573,2195,1.573,2196,1.573,2197,1.573,2198,1.573,2199,1.689,2200,2.955,2201,1.689,2202,1.689,2203,1.689,2204,1.689,2205,1.689,2206,1.689,2207,1.689,2208,1.689,2209,1.689,2210,1.689,2211,1.689,2212,1.689,2213,1.689,2214,1.689,2215,1.689,2216,1.689,2217,3.94,2218,2.955,2219,1.689,2220,1.689,2221,1.689,2222,3.94,2223,1.626,2224,1.689,2225,1.689]],["component/56",[1,0.433]],["title/57-1",[0,63.349]],["name/57-1",[]],["text/57-1",[]],["component/57-1",[]],["title/57",[1,19.056]],["name/57",[2,1.51]],["text/57",[1,1.72,3,2.918,4,2.449,5,2.918,6,2.918,7,1.247,8,2.918,9,2.918,10,1.849,11,2.014,12,2.858,13,2.347,14,1.878,15,3.325,16,3.515,17,3.07,18,3.325,19,2.899,20,1.386,21,1.312,22,1.96,23,2.834,24,2.311,25,2.584,26,2.918,27,1.644,28,1.354,29,2.696,30,2.41,31,1.477,32,2.598,33,1.942,34,1.517,35,2.307,36,2.142,37,2.536,38,1.501,39,1.517,40,2.614,41,2.728,42,2.918,43,1.821,44,2.19,45,2.075,46,2.41,47,1.894,48,3.163,49,1.078,50,2.918,51,2.761,52,1.373,53,2.41,54,2.491,55,2.373,56,3.262,57,2.856,58,4.583,59,2.339,60,1.312,61,1.44,62,2.054,63,1.942,64,1.386,65,2.299,66,1.318,67,2.307,68,1.33,69,1.665,70,2.41,71,2.761,72,2.918,73,2.307,74,2.075,75,1.614,76,2.054,77,1.849,78,1.55,79,2.918,80,1.849,81,1.942,82,2.347,83,1.977,84,2.034,85,1.568,86,2.918,87,2.449,88,1.781,89,1.72,90,4.402,91,2.536,92,2.918,93,3.711,94,1.878,95,2.307,96,2.918,97,2.918,98,1.624,99,2.918,100,2.536,101,2.536,102,2.491,103,1.419,104,2.918,105,2.918,106,2.918,107,2.41,108,1.732,109,2.584,110,1.977,111,2.918,112,2.918,113,2.584,114,2.761,115,2.918,116,2.834]],["component/57",[1,0.433]],["title/58-1",[117,44.6]],["name/58-1",[]],["text/58-1",[]],["component/58-1",[]],["title/58-2",[118,63.349]],["name/58-2",[]],["text/58-2",[]],["component/58-2",[]],["title/58-3",[119,50.661,120,26.479]],["name/58-3",[]],["text/58-3",[]],["component/58-3",[]],["title/58-4",[121,41.211,122,31.377]],["name/58-4",[]],["text/58-4",[]],["component/58-4",[]],["title/58-5",[13,25.784,121,41.211]],["name/58-5",[]],["text/58-5",[]],["component/58-5",[]],["title/58-6",[123,39.531]],["name/58-6",[]],["text/58-6",[]],["component/58-6",[]],["title/58",[124,26.92,125,32.616]],["name/58",[124,0.544,125,0.66]],["text/58",[1,1.389,13,1.088,14,2.448,16,1.315,18,2.083,21,2.077,28,1.661,31,1.083,34,1.112,38,2.778,39,1.112,40,1.213,41,1.708,43,1.335,49,2.403,56,1.22,57,1.325,61,1.056,64,1.7,66,0.966,68,0.975,69,2.043,80,1.355,82,1.088,83,1.449,85,1.149,88,2.185,94,1.377,103,2.246,107,1.766,108,1.269,117,1.506,120,1.118,122,2.86,123,3.37,124,2.87,125,1.377,126,3.58,127,2.139,128,2.949,129,1.537,130,1.826,131,1.976,132,2.139,133,3.112,134,1.668,135,2.139,136,5.225,137,3.58,138,1.958,139,2.077,140,1.228,141,1.57,142,1.74,143,1.795,144,3.005,145,2.139,146,2.024,147,2.449,148,1.072,149,1.859,150,1.588,151,1.859,152,2.139,153,2.139,154,1.859,155,1.976,156,2.139,157,2.139,158,3.388,159,1.626,160,2.077,161,3.354,162,3.189,163,2.521,164,1.553,165,3.58,166,1.213,167,4.233,168,2.139,169,1.388,170,3.58,171,1.626,172,1.859,173,2.077,174,2.139,175,2.024,176,2.139,177,2.077,178,2.139,179,2.024,180,2.139,181,1.521,182,2.87,183,2.723,184,2.139,185,1.156,186,1.183,187,1.412,188,1.463,189,1.813,190,2.139,191,1.355,192,1.74,193,2.957,194,1.859,195,1.143,196,1.4,197,1.524,198,1.859,200,1.463,202,1.463,203,1.325,204,1.436,205,2.139,206,1.553,207,1.537,208,1.205,209,1.315,210,2.024,211,2.077,212,2.723,213,2.139,214,1.296,215,1.691,216,2.139,217,1.143,218,1.056,219,2.139,220,1.691,221,1.691,222,1.355,223,1.4,224,2.139,225,2.139,226,1.183,227,2.056,228,2.139,229,1.859,230,2.957,231,2.139,232,2.139,233,1.714,234,1.859,235,1.859,236,1.859,237,1.859,238,1.859,239,1.607,240,1.388,241,1.74,242,1.236,243,1.244,249,2.83,250,1.933,251,1.436,252,2.139,253,2.139,254,2.139,255,2.139,256,2.139,257,1.463,258,1.668,259,1.506,260,2.139,261,1.163,262,1.766,263,1.668,264,1.22,265,2.139]],["component/58",[1,0.433]],["title/59-1",[38,21.709,185,22.813,266,28.606]],["name/59-1",[]],["text/59-1",[]],["component/59-1",[]],["title/59-2",[267,31.647,268,30.74,269,31.647,270,17.616,271,29.242]],["name/59-2",[]],["text/59-2",[]],["component/59-2",[]],["title/59-3",[34,21.942,49,15.596,120,22.061]],["name/59-3",[]],["text/59-3",[]],["component/59-3",[]],["title/59-4",[85,22.683,120,22.061,203,26.142]],["name/59-4",[]],["text/59-4",[]],["component/59-4",[]],["title/59-5",[120,26.479,272,43.247]],["name/59-5",[]],["text/59-5",[]],["component/59-5",[]],["title/59-6",[120,26.479,273,35.667]],["name/59-6",[]],["text/59-6",[]],["component/59-6",[]],["title/59-7",[274,38.065,275,39.517]],["name/59-7",[]],["text/59-7",[]],["component/59-7",[]],["title/59-8",[276,42.934]],["name/59-8",[]],["text/59-8",[]],["component/59-8",[]],["title/59",[64,24.059,207,36.405]],["name/59",[120,0.536,273,0.721]],["text/59",[1,0.804,7,1.838,12,0.43,13,0.541,14,0.433,15,0.619,20,0.921,21,1.934,24,0.972,27,0.599,28,0.9,30,0.878,31,1.353,32,1.093,33,0.708,34,1.008,36,1.424,37,0.924,38,1.696,40,1.1,41,0.507,43,0.664,44,0.505,45,0.756,47,1.735,49,1.416,52,1.258,55,0.865,57,0.659,62,0.749,63,2.195,64,2.237,65,1.911,66,2.685,67,0.841,68,2.709,69,1.107,75,1.479,85,1.772,89,1.143,93,0.69,94,0.685,103,2.092,108,0.631,110,0.721,120,3.627,134,0.83,138,1.06,140,2.469,144,0.893,161,0.772,163,2.321,166,1.516,172,0.924,181,1.901,185,4.112,188,1.327,189,0.982,197,1.138,200,0.727,202,0.727,203,4.394,207,0.764,208,1.093,209,0.654,214,0.645,217,0.568,227,1.535,240,0.69,242,0.615,243,0.619,246,0.961,251,0.714,261,0.578,266,2.914,273,2.699,277,3.118,278,1.229,279,1.656,280,3.655,281,3.118,282,0.809,283,1.303,284,0.865,285,0.654,286,1.597,287,1.275,288,1.008,289,0.669,290,1.75,291,2.88,292,2.282,293,0.908,294,1.75,295,1.159,296,2.058,297,0.631,298,1.792,299,0.924,300,1.352,301,0.649,302,0.924,303,1.628,304,2.175,305,1.303,306,1.064,307,0.924,308,1.064,309,0.649,310,0.924,311,1.565,312,3.609,313,0.908,314,0.764,315,1.327,316,1.006,317,0.893,318,1.064,319,1.555,320,1.457,321,0.749,322,1.397,323,2.323,324,1.064,325,0.924,326,1.409,327,2.323,328,1.064,329,1.516,330,1.064,331,1.064,332,1.064,333,1.064,334,1.064,335,1.064,336,1.064,337,1.064,338,1.064,339,1.064,340,1.064,341,1.064,342,1.064,343,1.064,344,1.064,345,1.064,346,1.064,347,1.064,348,1.064,349,1.064,350,0.908,351,0.781,352,1.685,353,0.924,354,1.192,355,1.064,356,0.525,357,1.602,358,1.493,359,1.493,360,0.83,361,1.939,362,2.865,363,0.961,364,1.175,365,1.339,366,1.352,367,0.908,368,1.269,369,0.799,370,1.064,371,0.908,372,1.107,373,1.167,374,0.819,375,2.214,376,1.259,377,1.314,378,0.908,379,2.865,380,1.064,381,4.126,382,1.578,383,1.064,384,1.064,385,2.058,386,0.83,387,1.939,388,1.28,389,1.064,390,0.781,391,0.741,392,0.69,393,3.834,394,1.064,395,1.064,396,1.555,397,1.064,398,0.841,399,1.064,400,0.781,401,1.939,402,1.772,403,1.939,404,1.064,405,2.673,406,1.578,407,0.924,408,0.764,409,0.772,410,1.628,411,0.741,412,1.064,413,1.347,414,1.006,415,1.493,416,1.939,417,0.649,418,0.924,419,1.409,420,1.159,421,1.064,422,0.654,423,0.708,424,0.841,425,0.924,426,1.064,427,0.983,428,0.924,429,0.603,430,1.064,431,0.819,432,1.064,433,0.961,434,1.064,435,1.064,436,0.908,437,1.064,438,1.064,439,0.636,440,0.562,441,1.006,442,1.064,443,1.064,444,1.064,445,0.809,446,0.924,447,0.727,448,0.841,449,1.064,450,1.064,451,1.033,452,0.799,453,1.064,454,0.924,455,1.064,456,1.064,457,1.628,458,0.696,459,1.064,460,0.809,461,0.924,462,1.064,463,1.064,464,1.064,465,0.924,466,1.064,467,1.064,468,1.064,469,0.853,470,0.961,471,1.064,472,1.064,473,1.006,474,0.781,475,0.865]],["component/59",[1,0.433]],["title/60-1",[476,33.662]],["name/60-1",[]],["text/60-1",[]],["component/60-1",[]],["title/60-2",[477,40.142]],["name/60-2",[]],["text/60-2",[]],["component/60-2",[]],["title/60-3",[124,33.662]],["name/60-3",[]],["text/60-3",[]],["component/60-3",[]],["title/60",[478,32.075]],["name/60",[478,0.925]],["text/60",[7,0.793,12,2.607,14,2.458,15,1.079,20,0.881,21,0.834,24,0.93,28,2.286,31,0.939,32,2.776,38,0.954,41,1.515,44,1.508,47,1.204,49,1.82,52,1.494,53,3.155,60,2.49,61,3.185,68,1.447,69,1.811,73,1.467,77,2.637,78,0.986,82,0.944,85,0.997,94,1.195,103,1.544,124,2.618,125,1.195,133,1.613,136,2.759,138,1.015,141,1.363,142,1.509,148,1.591,161,2.306,162,2.873,166,1.052,167,1.306,191,2.012,198,1.613,217,3.226,218,0.916,222,2.012,223,1.214,239,1.394,242,1.072,243,1.079,278,1.176,280,1.141,284,1.509,285,2.558,286,2.487,287,0.885,294,1.214,307,1.613,311,1.087,322,0.97,326,2.306,329,1.052,356,2.054,359,1.429,364,1.124,366,1.294,369,3.126,372,2.374,376,1.204,385,1.429,386,1.447,388,1.225,396,1.079,408,1.333,413,0.935,419,1.348,420,1.109,422,1.141,423,1.235,431,2.445,439,1.109,457,1.557,458,2.078,477,4.501,478,2.494,479,1.856,480,1.856,481,1.613,482,1.394,483,1.856,484,1.856,485,1.756,486,1.488,487,1.509,488,2.665,489,3.175,490,1.856,491,1.269,492,3.839,493,1.124,494,2.759,495,1.856,496,1.856,497,1.124,498,1.856,499,1.856,500,3.761,501,1.363,502,1.677,503,2.934,504,1.856,505,1.333,506,1.613,507,3.761,508,1.856,509,1.348,510,4.007,511,1.269,512,3.616,513,1.981,514,1.109,515,1.176,516,2.192,517,1.333,518,1.557,519,1.856,520,1.584,521,1.677,522,1.802,523,1.856,524,1.306,525,1.32,526,1.856,527,2.759,528,2.51,529,1.269,530,1.613,531,1.856,532,1.856,533,3.084,534,4.161,535,1.802,536,1.856,537,1.856,538,3.164,539,1.856,540,1.856,541,1.856,542,1.856,543,1.856,544,1.856,545,1.856,546,1.094,547,1.856,548,1.584,549,1.363,550,1.856,551,1.429,552,1.856,553,1.488,554,0.911,555,1.715,556,1.363,557,1.235,558,1.195,559,1.856,560,1.856,561,1.258,562,1.533,563,1.856,564,1.856,565,1.856]],["component/60",[1,0.433]],["title/61-1",[7,13.523,440,16.723,623,25.018,636,19.899,637,19.601]],["name/61-1",[]],["text/61-1",[]],["component/61-1",[]],["title/61-2",[1,15.239,638,33.729]],["name/61-2",[]],["text/61-2",[]],["component/61-2",[]],["title/61-3",[478,25.651,639,32.883]],["name/61-3",[]],["text/61-3",[]],["component/61-3",[]],["title/61-4",[195,19.329,196,23.674,572,27.178,639,23.478]],["name/61-4",[]],["text/61-4",[]],["component/61-4",[]],["title/61-5",[1,12.696,440,22.304,640,42.208]],["name/61-5",[]],["text/61-5",[]],["component/61-5",[]],["title/61-6",[1,15.239,641,44.028]],["name/61-6",[]],["text/61-6",[]],["component/61-6",[]],["title/61",[561,28.606,616,30.33,642,36.681]],["name/61",[643,1.828]],["text/61",[1,0.64,7,4.122,10,0.746,13,1.082,21,0.956,27,1.198,28,1.349,32,0.663,34,1.105,40,0.667,44,0.559,49,0.435,52,0.554,63,2.372,66,0.532,69,0.672,74,2.068,75,1.609,83,0.798,85,0.633,93,0.764,103,0.573,110,0.798,123,0.735,128,0.752,149,1.023,166,2.02,167,1.497,169,0.764,194,1.023,195,3.202,196,2.696,199,1.785,204,0.791,240,0.764,243,0.685,251,0.791,257,0.805,261,0.64,270,0.655,274,0.884,276,0.798,288,0.612,309,0.718,315,0.805,321,0.829,329,0.667,354,0.724,356,0.581,362,1.848,417,0.718,420,1.271,425,1.023,429,0.667,440,3.303,454,1.023,458,1.392,477,3.615,478,2.086,497,1.289,509,0.855,525,0.837,538,1.617,551,0.906,554,0.578,561,2.415,572,1.598,574,0.958,581,0.798,596,1.262,618,1.064,623,0.931,631,1.617,636,1.829,637,0.729,638,1.416,639,4.057,641,2.527,642,7.831,644,1.143,645,0.864,646,1.114,647,1.177,648,1.114,649,0.988,650,1.177,651,1.114,652,0.895,653,1.114,654,1.177,655,1.598,656,0.874,657,0.918,658,1.848,659,1.561,660,1.177,661,3.563,662,1.177,663,3.563,664,2.908,665,2.126,666,1.177,667,1.177,668,1.848,669,2.527,670,3.372,671,1.177,672,1.177,673,1.177,674,1.177,675,1.177,677,1.177,678,2.126,679,1.177,680,2.126,681,1.177,682,1.177,683,1.177,684,1.143,685,1.177,686,1.177,687,1.177,688,2.908,689,1.177,690,1.177,691,0.846,692,1.177,693,1.177,694,1.177,695,1.177,696,1.177,697,1.177,698,1.177,699,1.177,700,1.177,701,2.012,702,0.931,704,1.177,705,1.177,706,2.065,707,1.177,708,2.065,709,1.659,710,1.177,711,1.177,712,1.177,713,1.177,714,1.177,715,5.705,716,1.177,717,1.177,718,1.177,719,1.177,720,1.177,721,1.177,722,1.177,723,1.177,724,1.177,725,1.177,726,1.177,727,1.177,728,1.177,729,1.177,730,1.177,731,1.177,732,1.177,733,1.177,734,1.177,735,1.177,736,1.177,737,1.177,738,1.177,739,1.177,740,1.177,741,1.177,742,1.177,743,1.177,744,2.008,745,0.746,746,1.177,747,5.432,748,1.177,749,1.177,750,2.908,751,1.177,752,2.126,753,1.177,754,2.126,755,1.177,756,1.177,757,1.177,758,0.758,759,0.718,760,1.883,761,1.177,762,1.023,763,1.023,764,1.023,765,0.855,766,1.143,767,2.908,768,2.126,769,1.177,770,1.177,771,0.944,772,0.988,773,0.958,774,0.988,775,1.177,776,2.908,777,1.177,778,1.177,779,1.177,780,1.177,781,1.177,782,1.177,783,1.064,784,0.988,785,1.177,786,1.177,787,4.12,788,0.895,789,0.821,790,1.177,791,1.177,792,1.177,793,1.177,794,1.177,795,1.177,796,1.177,797,1.177,798,1.177,799,1.177,800,1.177,801,1.177,802,1.177,803,1.177,804,1.177,805,1.177,806,0.918,807,1.177,808,2.393,809,0.931,810,0.931,811,1.023,812,1.177,813,1.28,814,1.023,815,1.023,2226,1.323,2227,1.402]],["component/61",[1,0.433]],["title/62-1",[195,27.072,571,34.979]],["name/62-1",[]],["text/62-1",[]],["component/62-1",[]],["title/62-2",[20,24.059,195,27.072]],["name/62-2",[]],["text/62-2",[]],["component/62-2",[]],["title/62-3",[195,27.072,571,34.979]],["name/62-3",[]],["text/62-3",[]],["component/62-3",[]],["title/62-4",[478,32.075]],["name/62-4",[]],["text/62-4",[]],["component/62-4",[]],["title/62-5",[276,42.934]],["name/62-5",[]],["text/62-5",[]],["component/62-5",[]],["title/62",[195,27.072,580,37.624]],["name/62",[195,0.977]],["text/62",[7,0.719,11,0.629,12,0.68,13,1.485,14,0.685,15,0.979,16,2.618,17,1.943,18,0.979,19,0.573,20,2.819,21,0.41,22,0.612,24,1.175,27,0.948,28,0.781,31,1.187,32,0.948,33,0.606,34,1.219,35,1.33,39,0.875,40,0.517,41,1.118,43,2.657,44,1.113,45,1.196,46,0.752,47,1.092,48,3.031,49,1.704,53,1.525,57,1.042,59,0.73,60,1.538,63,1.12,64,0.433,65,0.839,66,1.745,76,4.025,77,1.849,80,0.577,82,0.464,88,0.556,89,1.382,91,1.462,94,0.586,95,0.72,98,0.507,103,0.443,108,0.541,122,1.807,123,0.568,128,1.074,129,1.209,134,1.312,140,2.219,141,0.669,148,1.175,150,0.677,151,0.792,159,0.693,162,2.015,163,0.641,167,0.641,171,0.693,183,0.693,185,1.267,189,0.461,191,1.485,195,3.28,203,0.564,204,1.574,206,0.662,214,1.421,218,0.45,233,0.73,240,1.522,242,0.972,258,0.711,264,0.52,272,2.491,276,0.617,280,1.034,282,1.279,283,1.13,285,1.794,286,1.005,287,0.435,288,0.474,294,0.596,295,0.544,296,1.295,301,1.027,302,0.792,305,0.612,311,0.533,313,0.778,315,1.151,320,0.684,322,0.476,323,0.792,326,1.222,329,0.517,350,0.778,353,1.462,356,0.83,358,0.701,359,0.701,366,0.635,367,0.778,373,2.058,374,0.701,375,0.612,376,0.591,377,1.589,379,0.792,385,1.295,386,1.312,392,0.591,396,0.979,400,1.721,402,1.838,407,0.792,409,0.662,411,1.173,417,1.027,419,0.662,420,1.005,422,0.56,423,0.606,424,0.72,429,0.517,452,0.684,460,0.693,465,0.792,474,1.721,476,0.894,477,1.849,478,2.156,482,2.57,493,2.342,497,0.552,509,0.662,510,5.947,514,0.544,520,0.778,524,1.184,527,0.792,528,0.72,529,1.151,530,2.972,538,0.693,548,0.778,549,1.235,551,1.295,554,0.826,557,0.606,569,0.684,571,4.366,575,2.634,579,0.617,581,0.617,585,0.763,591,0.823,596,0.541,611,0.807,627,0.73,630,0.526,637,1.807,638,0.606,747,0.792,758,0.586,772,0.765,816,1.682,817,0.885,818,0.911,819,0.792,820,0.911,821,1.39,822,0.669,823,0.792,824,0.778,825,0.911,826,0.842,827,0.792,828,0.885,829,0.911,830,0.911,831,1.249,832,0.862,833,4.479,834,0.911,835,0.885,836,0.862,837,1.436,838,1.634,839,2.491,840,0.911,841,1.634,842,1.684,843,0.911,844,2.034,845,0.752,846,0.911,847,0.862,848,0.911,849,0.911,850,5.002,851,0.885,852,0.911,853,0.911,854,1.295,855,0.72,856,0.885,857,1.462,858,3.493,859,0.792,860,2.037,861,0.911,862,0.778,863,0.911,864,1.936,865,0.741,866,0.911,867,2.834,868,0.701,869,1.101,870,0.792,871,0.911,872,0.911,873,2.918,874,0.911,875,2.276,876,0.765,877,0.677,878,0.701,879,0.911,880,2.247,881,0.911,882,0.911,883,3.243,884,2.218,885,0.823,886,2.972,887,0.911,888,0.911,889,0.885,890,0.596,891,0.911,892,1.592,893,0.885,894,1.592,895,0.701,896,0.648,897,0.911,898,0.778,899,1.665,900,1.592,901,0.911,902,0.842,903,3.42,904,1.634,905,0.911,906,0.862,907,0.911,908,0.568,909,0.669,910,0.911,911,0.885,912,0.655,913,0.911,914,0.911,915,0.72,916,0.911,917,0.911,918,0.752,919,0.911,920,1.295,921,0.885,922,0.911,923,0.911,924,0.911,925,1.49,926,0.911,927,0.911,928,0.911,929,2.918,930,1.312,931,0.765,932,0.911,933,0.911,934,1.682,935,0.885,936,0.862,937,0.823,938,0.911,939,0.778,940,0.911,941,0.911,942,0.778,943,0.842,944,0.911,945,0.911,946,0.911,947,0.862,948,0.765,949,0.842,950,0.911,951,0.911,952,0.577,953,0.72,954,0.911,955,0.823,956,0.911,957,0.885,958,0.911,959,0.911,960,0.911,961,0.862,962,0.911,963,0.752]],["component/62",[1,0.433]],["title/63-1",[476,33.662]],["name/63-1",[]],["text/63-1",[]],["component/63-1",[]],["title/63-2",[217,22.555,218,20.836,513,26.338]],["name/63-2",[]],["text/63-2",[]],["component/63-2",[]],["title/63-3",[439,30.274,964,40.051]],["name/63-3",[]],["text/63-3",[]],["component/63-3",[]],["title/63-4",[13,25.784,203,31.377]],["name/63-4",[]],["text/63-4",[]],["component/63-4",[]],["title/63-5",[148,25.389,965,37.201]],["name/63-5",[]],["text/63-5",[]],["component/63-5",[]],["title/63-6",[290,33.157,965,37.201]],["name/63-6",[]],["text/63-6",[]],["component/63-6",[]],["title/63-7",[203,31.377,966,37.201]],["name/63-7",[]],["text/63-7",[]],["component/63-7",[]],["title/63-8",[967,44.028,968,40.051]],["name/63-8",[]],["text/63-8",[]],["component/63-8",[]],["title/63",[82,25.784,197,21.56]],["name/63",[197,0.436,969,0.89]],["text/63",[7,2.21,12,0.808,13,2.238,14,2.724,20,2.088,21,1.521,28,1.569,41,1.614,49,2.321,52,0.94,53,1.768,57,1.238,65,0.997,66,0.903,78,1.062,140,2.525,148,1.695,166,1.133,191,2.143,197,2.462,200,1.367,203,3.204,217,3.356,218,1.67,227,3.606,257,1.367,261,1.087,262,1.651,278,2.143,286,3.457,287,0.954,290,1.308,295,1.194,322,2.298,356,0.987,368,1.308,373,1.203,396,1.968,402,1.074,408,2.431,413,1.007,420,1.194,439,4.529,491,5.011,501,1.468,511,3.007,513,3.228,546,1.178,554,0.982,583,1.22,587,2.674,638,1.331,812,1.106,837,1.706,890,2.878,908,1.247,952,4.457,964,3.476,965,1.468,966,2.484,968,3.476,970,1.999,971,1.737,972,1.999,973,1.999,974,2.214,975,3.786,976,5.458,977,1.559,978,1.393,979,1.308,980,1.194,981,1.148,982,1.999,983,5.024,984,1.999,985,1.942,986,1.468,987,1.436,988,4.397,989,3.382,990,4.397,991,1.539,992,1.737,993,3.382,994,1.999,995,2.939,996,2.16,997,1.999,998,1.942,999,1.58,1000,1.737,1001,1.58,1002,3.382,1003,1.737,1004,1.559,1005,1.999,1006,1.999,1007,1.999,1008,1.999,1009,1.999,1010,1.999,1011,1.999,1012,1.999,1013,1.999,1014,1.999,1015,1.737,1016,1.999,1017,1.737,1018,1.58,1019,1.999,1020,1.58,1021,1.999,1022,1.999,1023,1.999,1024,1.999,1025,1.999,1026,1.999,1027,1.999,1028,1.999,1029,1.999,1030,1.999,1031,1.999,1032,1.999,1033,1.559,1034,1.706,1035,3.382,1036,1.999,1037,1.999,1038,3.821,1039,1.999,1040,1.355,1041,1.58,1042,1.737,1043,1.651,1044,1.999,1045,1.737,1046,1.999,1047,1.737,1048,3.382,1049,1.355]],["component/63",[1,0.433]],["title/64-1",[476,33.662]],["name/64-1",[]],["text/64-1",[]],["component/64-1",[]],["title/64-2",[287,24.173,981,29.091]],["name/64-2",[]],["text/64-2",[]],["component/64-2",[]],["title/64-3",[322,26.479,981,29.091]],["name/64-3",[]],["text/64-3",[]],["component/64-3",[]],["title/64-4",[413,25.519,981,29.091]],["name/64-4",[]],["text/64-4",[]],["component/64-4",[]],["title/64-5",[981,29.091,996,32.356]],["name/64-5",[]],["text/64-5",[]],["component/64-5",[]],["title/64-6",[812,23.354,981,24.236,1049,28.606]],["name/64-6",[]],["text/64-6",[]],["component/64-6",[]],["title/64",[215,40.051,1050,31.377]],["name/64",[812,0.567,1050,0.635]],["text/64",[1,1.212,7,3.144,13,3.002,14,2.647,15,1.436,16,1.517,19,1.552,20,3.879,21,2.297,28,1.87,31,2.041,44,1.914,49,2.577,66,1.115,68,1.837,85,3.169,208,1.391,240,1.602,270,1.374,285,1.517,287,1.923,289,1.552,295,3.053,311,1.445,322,1.29,354,1.517,364,1.496,368,1.615,375,2.707,376,3.316,390,1.812,392,1.602,396,3.431,408,1.774,413,1.243,415,1.9,419,3.711,431,1.9,513,2.515,546,1.455,554,1.212,567,1.833,575,1.9,606,1.374,669,5.649,758,1.589,759,3.6,811,2.145,812,2.23,823,3.503,878,1.9,908,1.54,931,2.072,939,2.107,964,4.039,974,1.615,975,3.86,979,3.86,981,3.387,1050,3.653,1051,3.915,1052,2.468,1053,2.468,1054,2.468,1055,2.107,1056,2.397,1057,2.468,1058,4.031,1059,2.107,1060,2.072,1061,3.503,1062,2.336,1063,3.187,1064,3.383,1065,2.468,1066,1.925,1067,3.441,1068,2.468,1069,2.397,1070,5.109,1071,4.031,1072,5.109,1073,2.336,1074,4.031,1075,2.468,1076,2.468,1077,2.468,1078,2.468,1079,4.031,1080,2.468,1081,2.468,1082,3.503,1083,4.031,1084,2.397,1085,2.468,1086,2.145,1087,2.468,1088,2.468,1089,2.468,1090,2.468,1091,2.397,1092,1.673,1093,2.468,1094,1.576,1095,2.336,1096,2.336]],["component/64",[1,0.433]],["title/65-1",[476,33.662]],["name/65-1",[]],["text/65-1",[]],["component/65-1",[]],["title/65",[14,20.629,122,31.377]],["name/65",[2,1.51]],["text/65",[4,2.787,7,3.39,12,2.509,14,2.077,20,2.949,27,1.871,31,1.681,44,1.577,49,3.151,53,2.666,60,2.294,61,2.518,78,2.71,80,2.104,122,3.846,138,1.816,148,1.664,171,2.525,197,1.413,208,1.871,214,2.012,215,2.625,226,1.837,261,1.805,286,1.984,287,1.584,290,2.173,295,3.71,300,3.555,321,2.338,369,2.495,413,1.673,422,2.042,428,2.886,458,2.173,476,1.765,492,2.757,501,4.559,513,4.347,515,3.232,517,2.386,518,2.787,546,3.006,554,2.505,585,1.507,812,2.822,813,3.736,814,2.886,815,2.886,876,2.787,908,2.072,971,2.886,974,4.559,975,3.338,976,2.886,977,3.978,979,2.173,1050,3.159,1055,2.835,1063,2.625,1067,2.835,1086,5.396,1094,2.121,1097,3.321,1098,2.386,1099,4.909,1100,3.321,1101,3.321,1102,3.321,1103,3.321,1104,3.321,1105,2.886,1106,2.439,1107,2.315,1108,3.321]],["component/65",[1,0.433]],["title/66-1",[186,23.354,604,30.017,930,32.923]],["name/66-1",[]],["text/66-1",[]],["component/66-1",[]],["title/66-2",[186,23.354,604,30.017,1109,36.031]],["name/66-2",[]],["text/66-2",[]],["component/66-2",[]],["title/66-3",[186,28.031,1110,40.051]],["name/66-3",[]],["text/66-3",[]],["component/66-3",[]],["title/66-4",[187,41.814]],["name/66-4",[]],["text/66-4",[]],["component/66-4",[]],["title/66-5",[186,28.031,1111,40.051]],["name/66-5",[]],["text/66-5",[]],["component/66-5",[]],["title/66-6",[186,23.354,1111,33.368,1112,42.208]],["name/66-6",[]],["text/66-6",[]],["component/66-6",[]],["title/66-7",[1113,50.081]],["name/66-7",[]],["text/66-7",[]],["component/66-7",[]],["title/66-8",[1114,55.054]],["name/66-8",[]],["text/66-8",[]],["component/66-8",[]],["title/66-9",[197,26.959]],["name/66-9",[]],["text/66-9",[]],["component/66-9",[]],["title/66-10",[197,21.56,325,44.028]],["name/66-10",[]],["text/66-10",[]],["component/66-10",[]],["title/66-11",[197,21.56,1115,50.661]],["name/66-11",[]],["text/66-11",[]],["component/66-11",[]],["title/66-12",[1116,37.201,1117,44.028]],["name/66-12",[]],["text/66-12",[]],["component/66-12",[]],["title/66-13",[297,30.067,1110,40.051]],["name/66-13",[]],["text/66-13",[]],["component/66-13",[]],["title/66-14",[197,21.56,1113,40.051]],["name/66-14",[]],["text/66-14",[]],["component/66-14",[]],["title/66-15",[197,21.56,966,37.201]],["name/66-15",[]],["text/66-15",[]],["component/66-15",[]],["title/66-16",[197,21.56,1118,44.028]],["name/66-16",[]],["text/66-16",[]],["component/66-16",[]],["title/66",[138,27.701,148,25.389]],["name/66",[138,0.56,148,0.513]],["text/66",[7,0.909,12,0.329,14,2.364,19,0.953,20,0.72,21,0.682,27,0.459,28,2.134,31,0.412,39,0.788,40,2.431,41,0.388,43,0.508,47,0.528,49,0.301,53,1.392,56,0.865,65,0.756,68,0.691,76,0.573,78,0.433,82,0.414,85,0.437,93,0.528,124,1.668,129,1.528,138,1.717,140,2.462,148,1.066,166,0.462,186,1.972,187,1,188,0.557,189,0.412,197,1.825,200,0.557,209,0.932,214,0.493,217,2.61,218,2.866,223,0.533,227,0.87,264,1.213,276,1.027,279,1.294,286,3.216,287,1.7,290,1.392,291,2.001,292,0.695,297,1.262,301,0.497,309,0.497,322,2.062,326,1.101,356,0.402,365,0.562,368,0.533,372,0.464,376,0.528,391,0.567,396,1.55,398,0.643,402,0.437,409,0.591,410,0.683,411,1.057,413,1.581,429,0.462,447,0.557,469,1.215,491,1.037,497,0.493,505,0.585,506,0.707,511,1.037,514,0.486,529,1.037,546,0.48,554,0.4,557,0.542,558,0.524,598,0.695,606,0.453,630,0.47,638,0.542,645,0.598,659,2.305,691,1.528,702,1.198,709,0.635,806,0.635,827,0.707,842,2.834,845,0.672,869,1.743,890,0.992,908,0.508,930,1.182,942,1.294,952,2.499,965,1.113,967,0.707,968,0.643,979,0.533,986,0.598,987,1.089,992,0.707,996,2.519,1001,0.643,1003,2.315,1004,1.659,1015,1.317,1018,0.643,1020,0.643,1033,0.635,1038,3.428,1040,2.673,1042,0.707,1045,1.317,1047,1.317,1049,2.128,1061,0.707,1092,1.027,1094,0.52,1098,1.528,1107,1.057,1109,1.816,1110,5.006,1111,0.643,1113,0.643,1114,0.707,1116,1.113,1117,1.317,1118,0.707,1119,2.013,1120,0.791,1121,1.182,1122,1.516,1123,0.814,1124,1.516,1125,0.814,1126,1.516,1127,0.814,1128,1.516,1129,0.814,1130,1.516,1131,0.814,1132,1.516,1133,0.814,1134,1.516,1135,0.814,1136,1.516,1137,0.814,1138,0.814,1139,0.814,1140,2.127,1141,0.814,1142,1.516,1143,0.814,1144,0.814,1145,0.814,1146,0.814,1147,0.814,1148,0.814,1149,0.814,1150,0.814,1151,0.814,1152,0.814,1153,0.814,1154,2.127,1155,1.516,1156,2.664,1157,0.814,1158,1.516,1159,1.516,1160,0.814,1161,0.814,1162,2.587,1163,1.516,1164,2.127,1165,3.221,1166,2.728,1167,0.814,1168,1.516,1169,1.516,1170,1.272,1171,0.791,1172,0.814,1173,0.814,1174,0.814,1175,0.814,1176,0.791,1177,1.516,1178,1.516,1179,0.814,1180,1.516,1181,0.814,1182,1.516,1183,0.814,1184,0.814,1185,0.814,1186,0.814,1187,0.814,1188,0.814,1189,0.814,1190,0.814,1191,0.814,1192,0.814,1193,0.814,1194,0.814,1195,0.814,1196,0.814,1197,1.516,1198,0.814,1199,0.814,1200,0.814,1201,0.814,1202,0.814,1203,0.814,1204,1.233,1205,0.814,1206,0.814,1207,0.814,1208,0.814,1209,0.662,1210,0.814,1211,0.814,1212,0.814,1213,0.814,1214,0.814,1215,0.814,1216,0.695,1217,0.814,1218,0.814,1219,0.814,1220,0.814,1221,0.814,1222,0.814,1223,0.814,1224,0.814,1225,0.814,1226,0.814,1227,1.848,1228,0.814,1229,1.848,1230,0.814,1231,0.814,1232,0.814,1233,0.814,1234,0.695,1235,0.814,1236,0.672,1237,0.814,1238,0.695,1239,0.814,1240,0.814,1241,0.77,1242,0.814,1243,0.814,1244,0.814,1245,0.814,1246,0.814,1247,0.814,1248,0.683,1249,0.814,1250,0.707,1251,0.814,1252,0.707,1253,0.814,1254,0.814,1255,0.814,1256,0.814,1257,0.791,1258,0.814,1259,0.791,1260,0.814,1261,0.695,1262,0.814,1263,0.627,1264,0.814,1265,0.736,1266,0.814,1267,0.643,1268,0.814,1269,0.814,1270,0.814,1271,0.814,1272,0.814,1273,0.814,1274,0.814,1275,0.814,1276,0.814,1277,0.814,1278,0.814,1279,0.77,1280,0.814,1281,6.169,1282,0.814,1283,0.814,1284,0.814,1285,0.814,1286,0.814,1287,0.814,1288,0.707,1289,0.814,1290,0.814,1291,0.814,1292,0.814,1293,0.814,1294,0.814,1295,0.814,1296,1.516,1297,0.814,1298,1.516,1299,0.814,1300,1.516,1301,0.814,1302,1.516,1303,0.814,1304,0.707,1305,0.814,1306,0.814,1307,0.814,1308,0.707,1309,0.814,1310,0.707,1311,0.814,1312,0.707,1313,0.814,1314,0.707,1315,0.814,1316,0.814,1317,0.814,1318,0.707,1319,0.814,1320,0.707,1321,0.814,1322,0.814,1323,0.814,1324,0.752,1325,0.814,1326,0.752,1327,0.814,1328,0.814,1329,0.814,1330,0.814,1331,0.814,1332,0.814,1333,0.814,1334,0.814,1335,0.814,1336,0.814,1337,0.814,1338,0.814,1339,0.814,1340,0.814,1341,0.814,1342,0.814,1343,0.814,1344,0.814,1345,0.814,1346,0.814,1347,0.814,1348,0.814,1349,0.814,1350,0.814,1351,0.814,1352,0.814,1353,0.814,1354,0.814,1355,0.814,1356,0.814,1357,0.814,1358,0.814,1359,0.814,1360,2.127,1361,0.791,1362,0.814,1363,0.814,1364,0.672,1365,0.814,1366,0.814,1367,0.814,1368,0.814,1369,0.695,1370,1.516,1371,0.814,1372,1.516,1373,0.814,1374,0.814,1375,0.814,1376,0.814,1377,2.664,1378,0.604,1379,0.791,1380,0.814,1381,0.77,1382,0.814,1383,0.814,1384,1.434,1385,0.814,1386,0.814,1387,0.814,1388,1.516,1389,2.664,1390,0.814,1391,0.707,1392,0.814,1393,0.814,1394,0.814,1395,0.814,1396,0.814,1397,0.814,1398,0.814,1399,0.707,1400,0.707,1401,1.516,1402,0.814,1403,0.707,1404,0.814,1405,0.707,1406,0.814,1407,0.814,1408,0.814,1409,0.814,1410,0.814,1411,0.814,1412,0.814,1413,2.664,1414,0.814,1415,0.814,1416,0.814,1417,0.814,1418,0.814,1419,0.814,1420,0.814,1421,0.707,1422,0.707]],["component/66",[1,0.433]],["title/67-1",[476,33.662]],["name/67-1",[]],["text/67-1",[]],["component/67-1",[]],["title/67-2",[1423,46.518]],["name/67-2",[]],["text/67-2",[]],["component/67-2",[]],["title/67-3",[217,27.072,492,27.382]],["name/67-3",[]],["text/67-3",[]],["component/67-3",[]],["title/67-4",[53,26.479,1106,37.201]],["name/67-4",[]],["text/67-4",[]],["component/67-4",[]],["title/67-5",[513,31.613,975,33.157]],["name/67-5",[]],["text/67-5",[]],["component/67-5",[]],["title/67-6",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/67-6",[]],["text/67-6",[]],["component/67-6",[]],["title/67",[12,14.615,61,17.856,402,19.439,492,19.55]],["name/67",[492,0.554,1106,0.752]],["text/67",[1,1.164,10,1.488,12,1.994,14,0.956,20,2.343,21,1.74,24,1.176,28,2.289,33,2.576,49,2.661,53,2.991,61,2.825,65,1.929,68,1.07,74,1.67,94,1.511,103,1.142,108,1.393,124,1.247,128,1.499,164,3.584,166,1.331,169,1.524,197,0.999,206,1.705,209,2.378,217,4.292,218,2.436,220,1.856,221,1.856,222,3.626,223,3.745,226,2.14,242,1.357,257,1.606,263,1.831,286,2.948,287,1.12,289,1.476,294,2.532,295,1.403,297,1.393,311,1.375,322,2.022,329,1.331,356,1.91,364,2.344,368,3.745,372,1.339,377,1.591,396,1.366,402,2.652,409,1.705,413,1.182,439,1.403,491,4.329,492,3.892,493,1.423,494,3.362,497,1.423,513,3.079,514,1.403,515,2.451,546,2.909,633,1.97,645,2.841,655,1.764,759,1.433,765,1.705,812,1.299,813,3.443,831,1.743,880,1.808,890,1.536,896,1.67,898,2.004,912,1.687,915,1.856,969,2.04,974,4.142,975,2.532,977,1.831,979,2.532,980,1.403,981,2.221,991,1.808,996,1.499,1000,3.362,1041,1.856,1094,2.471,1105,2.04,1106,4.647,1121,1.831,1170,1.97,1261,2.004,1423,2.841,1425,1.465,1427,3.362,1428,1.785,1429,2.04,1430,1.785,1431,2.04,1432,1.856,1433,2.348,1434,2.348,1435,1.882,1436,2.28,1437,2.348,1438,2.348,1439,1.939,1440,2.128,1441,2.348,1442,2.04,1443,2.348,1444,2.348,1445,2.04,1446,2.04]],["component/67",[1,0.433]],["title/68-1",[476,33.662]],["name/68-1",[]],["text/68-1",[]],["component/68-1",[]],["title/68-2",[1423,46.518]],["name/68-2",[]],["text/68-2",[]],["component/68-2",[]],["title/68-3",[217,27.072,492,27.382]],["name/68-3",[]],["text/68-3",[]],["component/68-3",[]],["title/68-4",[60,18.981,297,25.05,1447,36.681]],["name/68-4",[]],["text/68-4",[]],["component/68-4",[]],["title/68-5",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/68-5",[]],["text/68-5",[]],["component/68-5",[]],["title/68-6",[218,20.836,505,30.33,517,30.33]],["name/68-6",[]],["text/68-6",[]],["component/68-6",[]],["title/68-7",[223,27.625,249,33.368,1448,36.681]],["name/68-7",[]],["text/68-7",[]],["component/68-7",[]],["title/68-8",[1449,55.054]],["name/68-8",[]],["text/68-8",[]],["component/68-8",[]],["title/68-9",[1450,55.054]],["name/68-9",[]],["text/68-9",[]],["component/68-9",[]],["title/68-10",[52,29.804]],["name/68-10",[]],["text/68-10",[]],["component/68-10",[]],["title/68-11",[392,32.883,1451,44.028]],["name/68-11",[]],["text/68-11",[]],["component/68-11",[]],["title/68",[12,14.615,60,16.266,402,19.439,492,19.55]],["name/68",[60,0.461,492,0.554]],["text/68",[1,0.315,7,3.324,10,0.349,12,1.317,14,0.427,20,0.909,21,0.247,24,0.525,28,0.486,33,0.698,40,0.594,49,0.387,52,0.9,53,0.548,58,0.441,60,1.814,65,0.954,68,0.872,75,1.059,78,0.797,80,0.349,81,0.366,82,0.533,84,1.046,100,0.478,101,1.663,102,0.895,103,0.268,108,0.327,122,0.341,124,1.218,128,0.351,147,0.376,148,1.323,164,1.09,169,0.974,189,0.279,192,0.448,197,0.446,204,0.704,206,0.4,208,1.078,209,0.338,214,0.333,217,1.583,218,0.517,220,0.435,221,0.435,222,0.664,223,1.728,226,0.58,249,2.577,257,1.309,261,0.299,275,0.429,278,0.349,286,1.77,287,1.094,289,0.346,294,0.686,297,0.327,305,0.37,309,0.336,311,0.322,322,1,352,2.574,356,0.272,364,0.333,368,0.982,376,0.357,377,0.373,396,0.61,398,1.513,402,0.296,413,0.756,415,0.424,423,0.366,439,1.37,488,0.462,491,2.23,492,1.239,493,0.333,497,0.635,501,0.404,505,1.647,511,0.717,512,0.478,514,0.626,515,1.213,517,1.078,525,0.745,546,1.351,554,1.455,567,0.409,606,0.835,610,0.419,628,0.448,630,0.318,645,1.683,655,0.413,668,1.663,691,0.753,702,0.435,709,0.429,758,0.354,759,0.64,813,1.152,844,0.384,855,1.812,869,0.982,880,2.033,896,0.391,899,0.314,912,0.395,915,0.435,952,1.877,953,0.435,974,0.982,975,0.686,981,0.316,986,0.404,987,0.395,991,0.424,996,0.958,999,0.829,1001,1.812,1018,0.435,1020,0.435,1033,0.429,1034,0.47,1040,1.297,1043,0.455,1049,1.554,1060,0.462,1092,0.373,1094,0.958,1098,1.078,1107,0.384,1116,0.404,1121,0.818,1227,0.911,1229,0.478,1288,0.911,1304,0.478,1308,1.992,1310,0.911,1312,1.992,1314,0.478,1318,0.911,1320,1.304,1378,0.409,1391,1.304,1399,0.478,1400,0.478,1403,0.478,1405,0.478,1421,0.478,1422,0.478,1423,0.77,1425,0.654,1427,0.911,1428,0.419,1429,0.911,1430,0.419,1431,0.478,1432,0.829,1445,0.911,1446,0.478,1447,0.911,1448,1.992,1449,0.911,1450,1.304,1451,1.663,1452,0.487,1453,0.478,1454,1.048,1455,1.048,1456,0.55,1457,1.458,1458,1.048,1459,1.048,1460,0.55,1461,1.048,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.048,1469,0.55,1470,1.048,1471,2.962,1472,0.535,1473,0.55,1474,0.55,1475,0.55,1476,1.186,1477,0.55,1478,0.55,1479,0.509,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.292,1485,0.55,1486,5.35,1487,1.914,1488,2.292,1489,1.501,1490,1.501,1491,1.501,1492,2.292,1493,1.914,1494,2.292,1495,1.914,1496,1.048,1497,1.048,1498,2.641,1499,1.048,1500,1.458,1501,2.292,1502,0.55,1503,1.914,1504,1.048,1505,0.462,1506,1.501,1507,2.962,1508,1.914,1509,1.048,1510,1.501,1511,0.55,1512,0.55,1513,1.914,1514,1.048,1515,1.914,1516,1.458,1517,1.048,1518,1.501,1519,1.501,1520,2.641,1521,0.55,1522,1.048,1523,1.914,1524,0.55,1525,1.501,1526,1.914,1527,1.048,1528,0.55,1529,2.292,1530,2.292,1531,2.641,1532,2.292,1533,1.501,1534,1.914,1535,1.048,1536,1.501,1537,1.914,1538,1.501,1539,1.501,1540,2.962,1541,0.55,1542,1.914,1543,1.914,1544,1.048,1545,0.947,1546,1.914,1547,1.501,1548,2.292,1549,0.55,1550,2.292,1551,0.55,1552,1.048,1553,0.55,1554,1.048,1555,3.26,1556,1.914,1557,1.501,1558,1.501,1559,1.048,1560,1.048,1561,0.55,1562,2.641,1563,1.501,1564,1.914,1565,1.914,1566,1.914,1567,1.281,1568,0.55,1569,1.914,1570,1.048,1571,1.048,1572,1.501,1573,1.914,1574,1.048,1575,1.501,1576,2.292,1577,1.501,1578,1.914,1579,1.501,1580,1.501,1581,1.048,1582,1.914,1583,0.55,1584,1.501,1585,1.048,1586,1.501,1587,1.048,1588,1.914,1589,0.55,1590,1.914,1591,0.55,1592,1.501,1593,1.048,1594,1.914,1595,1.048,1596,1.501,1597,1.914,1598,0.55,1599,1.501,1600,1.501,1601,1.048,1602,1.914,1603,1.048,1604,1.048,1605,1.501,1606,1.048,1607,0.55,1608,1.914,1609,1.501,1610,2.962,1611,1.048,1612,1.048,1613,0.55,1614,1.501,1615,1.914,1616,1.501,1617,0.55,1618,1.048,1619,0.55,1620,1.501,1621,0.55,1622,1.048,1623,1.048,1624,1.048,1625,1.501,1626,0.55,1627,1.914,1628,1.048,1629,1.914,1630,1.501,1631,1.501,1632,1.501,1633,0.55,1634,0.55,1635,1.914,1636,1.501,1637,0.55,1638,1.048,1639,0.55,1640,0.55,1641,1.048,1642,1.914,1643,0.55,1644,0.55,1645,1.048,1646,0.55,1647,1.048,1648,0.55,1649,1.048,1650,1.048,1651,0.55,1652,0.55,1653,1.048,1654,1.914,1655,1.914,1656,0.55,1657,1.048,1658,1.048,1659,0.55,1660,1.048,1661,1.048,1662,0.55,1663,1.501,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.501,1670,2.292,1671,1.048,1672,1.048,1673,1.048,1674,0.55,1675,0.55,1676,1.048,1677,1.501,1678,0.55,1679,0.55,1680,1.048,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.497,1686,1.501,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.048,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.048,1704,1.048,1705,1.048,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.535,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.521,1717,0.55,1718,0.55,1719,0.55,1720,0.478,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.535,1726,0.55,1727,0.818,1728,0.55,1729,0.55,1730,0.55,1731,0.535,1732,0.55,1733,0.535,1734,0.55,1735,0.55,1736,0.55,1737,0.357,1738,0.521,1739,0.497,1740,0.535,1741,0.462,1742,1.048,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.048,1750,0.55,1751,1.048,1752,0.55,1753,0.478,1754,0.55]],["component/68",[1,0.433]],["title/69-1",[476,33.662]],["name/69-1",[]],["text/69-1",[]],["component/69-1",[]],["title/69-2",[82,25.784,226,28.031]],["name/69-2",[]],["text/69-2",[]],["component/69-2",[]],["title/69-3",[227,29.091,392,32.883]],["name/69-3",[]],["text/69-3",[]],["component/69-3",[]],["title/69-4",[227,36.376]],["name/69-4",[]],["text/69-4",[]],["component/69-4",[]],["title/69-5",[264,36.145]],["name/69-5",[]],["text/69-5",[]],["component/69-5",[]],["title/69-6",[439,37.856]],["name/69-6",[]],["text/69-6",[]],["component/69-6",[]],["title/69-7",[227,29.091,390,37.201]],["name/69-7",[]],["text/69-7",[]],["component/69-7",[]],["title/69-8",[227,36.376]],["name/69-8",[]],["text/69-8",[]],["component/69-8",[]],["title/69",[226,35.051]],["name/69",[226,1.011]],["text/69",[7,2.215,12,0.81,14,0.816,22,1.347,24,3.152,28,2.045,31,1.015,32,1.911,44,0.952,49,1.628,52,1.595,60,0.902,61,0.99,65,1.691,82,1.726,84,1.398,122,3.21,124,2.341,125,1.291,140,1.151,147,1.371,148,1.005,159,3.351,162,1.384,169,1.301,189,1.717,197,0.853,217,1.071,218,0.99,226,3.48,227,4.858,229,1.742,234,1.742,235,1.742,236,3.829,237,1.742,238,1.742,239,1.506,241,1.631,242,1.159,243,1.166,259,1.411,264,4.827,278,1.27,285,1.233,287,3.196,295,1.198,309,1.224,314,3.166,322,3.029,351,2.49,356,0.99,364,1.215,373,1.206,390,4.619,392,3.761,413,2.61,422,1.233,429,1.137,436,1.711,439,3.463,461,1.742,493,2.055,497,3.141,511,1.371,515,1.27,554,0.985,561,1.359,585,0.91,610,3.351,626,2.1,627,1.607,628,4.216,745,1.27,812,1.876,813,1.206,842,1.441,890,1.312,895,1.544,908,1.251,952,1.27,953,2.681,974,1.312,979,2.219,980,1.198,996,2.166,999,1.585,1004,1.564,1040,2.298,1049,2.298,1063,1.585,1094,2.814,1099,1.585,1107,1.398,1428,1.525,1435,1.607,1476,1.585,1753,5.036,1755,2.005,1756,1.631,1757,5.182,1758,3.391,1759,2.005,1760,3.391,1761,4.406,1762,2.005,1763,2.005,1764,2.005,1765,3.391,1766,3.391,1767,3.391,1768,1.897,1769,4.28,1770,4.406,1771,1.947,1772,3.391,1773,2.005,1774,1.683,1775,1.426,1776,2.005,1777,2.005,1778,1.947,1779,2.005,1780,2.005,1781,2.005,1782,1.711,1783,2.005,1784,5.034]],["component/69",[1,0.433]],["title/70-1",[744,34.979,745,32.102]],["name/70-1",[]],["text/70-1",[]],["component/70-1",[]],["title/70-2",[75,28.031,1787,44.028]],["name/70-2",[]],["text/70-2",[]],["component/70-2",[]],["title/70-3",[209,31.147,585,22.984]],["name/70-3",[]],["text/70-3",[]],["component/70-3",[]],["title/70-4",[585,22.984,1790,46.812]],["name/70-4",[]],["text/70-4",[]],["component/70-4",[]],["title/70-5",[388,41.814]],["name/70-5",[]],["text/70-5",[]],["component/70-5",[]],["title/70-6",[64,30.084]],["name/70-6",[]],["text/70-6",[]],["component/70-6",[]],["title/70-7",[478,32.075]],["name/70-7",[]],["text/70-7",[]],["component/70-7",[]],["title/70-8",[18,29.47,48,28.031]],["name/70-8",[]],["text/70-8",[]],["component/70-8",[]],["title/70-9",[53,22.061,60,18.981,478,21.371]],["name/70-9",[]],["text/70-9",[]],["component/70-9",[]],["title/70-10",[585,19.149,850,32.5,1791,32.923]],["name/70-10",[]],["text/70-10",[]],["component/70-10",[]],["title/70",[1440,34.843]],["name/70",[1440,1.005]],["text/70",[1,1.589,4,1.233,7,3.861,11,1.426,12,1.236,14,1.569,17,0.978,18,1.202,20,0.374,21,1.886,22,0.529,24,1.035,27,0.444,28,0.365,31,0.744,32,0.444,34,2.341,38,1.333,39,0.764,40,1.972,41,1.46,44,0.374,48,2.791,49,2.178,51,0.745,52,1.636,53,2.354,54,1.254,60,1.733,61,1.02,64,1.652,65,0.733,66,1.571,67,0.622,68,0.67,69,0.838,74,1.843,75,2.648,76,0.554,77,3.033,78,1.848,80,0.931,82,0.401,83,0.996,85,0.423,88,0.481,103,1.005,120,0.768,123,0.917,124,0.418,128,0.938,140,0.452,147,0.539,155,0.727,158,1.39,159,1.571,166,0.833,169,0.954,179,0.745,181,1.045,185,0.426,189,1.312,193,0.65,195,0.421,196,0.962,197,0.625,202,0.539,204,0.987,208,2.364,209,2.769,214,0.89,218,0.389,239,0.592,242,0.849,251,0.529,261,2.602,262,0.65,264,1.179,266,0.996,270,0.438,273,0.554,278,1.642,280,0.484,282,0.599,283,0.529,287,2.001,288,0.409,289,1.299,291,0.592,295,0.47,300,0.549,301,0.481,305,0.529,314,0.566,317,1.233,321,0.554,322,2.192,356,1.28,360,0.614,365,1.014,372,1.179,382,2.489,388,2.019,391,0.549,402,0.423,413,1.306,417,0.481,420,0.878,422,0.484,429,0.833,440,0.416,441,1.39,447,0.539,458,0.515,473,0.745,474,0.578,477,1.309,478,2.675,485,0.745,514,1.549,516,2.401,517,0.566,518,1.233,524,1.034,525,0.56,528,1.162,529,0.539,554,1.015,557,0.524,558,2.239,561,0.534,571,0.544,574,0.64,575,0.606,576,1.214,583,0.481,585,2.675,586,2.453,587,1.633,589,1.214,600,0.712,606,2.335,624,0.727,626,0.91,631,1.117,634,0.697,636,1.63,637,0.91,656,0.585,657,0.614,691,1.056,744,1.79,745,2.442,760,1.301,764,0.684,765,1.883,771,1.178,789,0.549,808,0.987,809,0.622,813,0.474,832,0.745,850,2.356,854,1.591,860,1.277,865,1.195,883,0.661,896,1.045,899,1.179,900,0.745,948,0.661,952,2.204,963,1.214,987,1.056,996,1.655,1043,0.65,1049,1.757,1050,1.605,1066,0.614,1073,0.745,1096,1.39,1098,1.056,1099,0.622,1216,0.672,1248,0.661,1279,1.39,1378,1.091,1425,0.491,1440,1.426,1727,0.614,1737,0.511,1741,0.661,1785,0.684,1786,0.712,1787,1.795,1788,2.71,1790,1.909,1791,2.386,1792,0.684,1793,0.765,1794,0.787,1795,0.787,1796,0.765,1797,3.561,1798,0.787,1799,0.787,1800,0.787,1801,0.787,1802,0.787,1803,0.787,1804,0.787,1805,0.787,1806,0.787,1807,0.787,1808,1.734,1809,0.787,1810,0.787,1811,1.591,1812,2.453,1813,0.745,1814,0.65,1815,0.765,1816,0.787,1817,0.787,1818,0.684,1819,0.622,1820,0.684,1821,0.599,1822,0.787,1823,0.787,1824,1.469,1825,1.469,1827,0.787,1828,0.787,1829,0.787,1830,0.765,1831,0.787,1832,0.787,1837,1.633,1839,1.469,1840,0.787,1841,0.787,1842,0.787,1843,0.765,1844,0.787,1845,1.469,1846,1.83,1847,1.469,1848,1.469,1849,1.469,1850,0.787,1852,0.814,1853,0.814,1854,0.697,1855,1.518,1856,0.787,1857,0.814,1858,0.814,1859,1.518,1860,1.301,1861,1.301,1862,1.518,1863,1.518,1864,2.135,1865,1.214,1866,1.301,1867,1.427,1869,0.814,1870,1.091,1906,0.745,1998,0.765,2014,0.745,2016,0.631,2027,1.358,2043,0.745,2142,1.39,2143,0.787,2228,0.845,2229,1.75,2230,1.75,2231,1.75,2232,2.322,2233,0.938,2234,0.938,2235,0.938,2236,0.938,2237,0.938,2238,0.814,2239,0.938,2240,0.938,2241,1.75,2242,0.938,2243,0.938,2244,0.938,2245,0.765,2246,0.938,2247,0.938,2248,0.938,2249,1.577,2250,0.845,2251,0.845,2252,0.845,2253,0.845,2254,0.845,2255,0.938,2256,0.938,2257,0.885,2258,0.787,2259,0.885,2260,0.938,2261,0.885,2262,0.938,2263,0.938]],["component/70",[1,0.433]],["title/71-1",[183,38.526,202,34.652]],["name/71-1",[]],["text/71-1",[]],["component/71-1",[]],["title/71-2",[52,23.834,77,32.102]],["name/71-2",[]],["text/71-2",[]],["component/71-2",[]],["title/71-3",[12,20.469,39,26.336]],["name/71-3",[]],["text/71-3",[]],["component/71-3",[]],["title/71-4",[22,34.027,61,25.009]],["name/71-4",[]],["text/71-4",[]],["component/71-4",[]],["title/71-5",[12,17.053,19,26.54,60,18.981]],["name/71-5",[]],["text/71-5",[]],["component/71-5",[]],["title/71-6",[12,20.469,1871,44.028]],["name/71-6",[]],["text/71-6",[]],["component/71-6",[]],["title/71-7",[855,54.823]],["name/71-7",[]],["text/71-7",[]],["component/71-7",[]],["title/71",[478,32.075]],["name/71",[478,0.925]],["text/71",[7,4.34,11,4.154,12,1.276,15,0.758,16,1.942,19,0.819,21,1.42,39,1.211,49,2.328,52,0.613,60,2.561,61,3.111,69,1.802,77,2.435,88,1.421,89,0.768,123,0.813,129,1.673,181,4.05,189,0.659,195,0.696,208,1.78,218,1.15,274,0.979,285,1.942,288,0.677,366,1.623,424,2.497,440,0.688,477,0.825,481,1.132,487,1.059,516,0.899,562,1.076,571,1.608,572,3.686,576,3.649,585,2.004,596,0.773,606,0.725,626,1.442,762,1.132,763,4.264,808,2.121,819,1.132,821,1.076,862,3.281,980,0.778,986,0.956,1263,1.003,1267,3.038,1837,3.492,1860,3.913,1861,1.154,1865,1.924,1866,2.063,1868,1.203,1871,1.132,1872,1.302,1873,3.843,1874,2.329,1875,3.158,1876,1.302,1877,1.302,1878,1.302,1879,1.302,1880,2.329,1881,3.843,1882,1.593,1883,2.329,1884,2.329,1885,1.302,1886,1.302,1887,5.328,1888,5.328,1889,2.329,1890,1.302,1891,0.99,1892,1.302,1893,1.302,1894,2.329,1895,1.302,1896,1.302,1897,1.302,1898,1.302,1899,4.264,1900,5.694,1901,3.843,1902,5.694,1903,1.302,1904,1.302,1905,1.302,1906,3.637,1907,3.843,1908,3.843,1909,1.302,1910,1.302,1911,1.302,1912,3.843,1913,3.843,1914,1.302,1915,3.158,1916,1.302,1917,1.302,1918,3.158,1919,1.302,1920,1.302,1921,3.158,1922,1.302,1923,1.302,1924,3.158,1925,3.158,1926,1.302,1927,3.158,1928,4.906,1929,1.302,1930,1.302,1931,2.152,1932,2.204,1933,2.329,1934,2.329,1935,2.329,1936,2.329,1937,3.158,1938,2.329,1939,2.329,1940,2.329,1941,2.329,1942,1.302,1943,2.329,1944,1.203,1945,1.302,1946,2.329,1947,2.329,1948,1.302,1949,1.302,1950,1.302,1951,1.302,1952,1.302,1953,1.302,1954,1.302,1955,1.302,1956,1.302,1957,1.302,1958,1.302,1959,1.302,1960,1.177,1961,1.302,1962,1.302,1963,2.329]],["component/71",[1,0.433]],["title/72-1",[288,32.932]],["name/72-1",[]],["text/72-1",[]],["component/72-1",[]],["title/72",[476,33.662]],["name/72",[476,0.971]],["text/72",[1,2.13,10,3.809,11,4.151,12,2.429,13,3.604,14,1.685,15,2.407,16,2.544,17,2.755,18,3.497,19,3.78,20,2.855,21,1.861,31,2.095,34,2.151,36,3.038,44,1.965,58,3.317,59,3.317,60,1.861,61,2.043,64,2.855,66,2.715,68,3.227,80,2.622,84,4.191,95,3.271,108,2.456,124,2.199,138,2.262,140,2.376,163,4.232,164,3.005,169,2.686,171,3.147,185,2.236,186,2.289,187,2.731,188,2.83,251,4.038,285,2.544,360,3.227,440,2.186,514,2.473,525,4.275,551,3.186,553,3.317,554,2.032,567,3.073,610,3.147,656,3.073,774,3.473,878,3.186,899,2.361,1209,3.366,1785,5.224,1814,3.418,2070,3.915,2264,4.929,2265,4.651,2266,4.929,2267,4.651,2268,4.929,2269,4.929]],["component/72",[1,0.433]],["title/73-1",[64,30.084]],["name/73-1",[]],["text/73-1",[]],["component/73-1",[]],["title/73-2",[14,20.629,1050,31.377]],["name/73-2",[]],["text/73-2",[]],["component/73-2",[]],["title/73-3",[38,21.709,41,20.139,185,22.813]],["name/73-3",[]],["text/73-3",[]],["component/73-3",[]],["title/73",[1964,49.413]],["name/73",[1964,1.426]],["text/73",[1,1.684,7,3.882,13,0.962,14,0.97,15,0.777,17,0.474,24,0.357,27,1.592,31,1.207,32,0.753,34,0.982,36,0.522,38,2.879,39,0.37,41,0.638,44,1.132,48,0.394,49,1.044,60,0.32,61,0.351,62,0.941,64,2.568,65,0.942,66,1.276,68,1.635,75,0.739,78,0.71,81,0.89,82,0.362,83,1.281,89,0.419,103,1.745,110,0.906,117,0.941,120,0.699,130,0.607,138,1.033,154,1.162,166,2.221,185,3.585,186,0.739,187,0.882,188,0.914,189,0.957,191,0.451,197,1.795,200,0.487,202,1.293,226,0.394,240,0.867,242,0.772,243,0.414,251,0.478,258,0.555,259,0.941,261,0.727,264,0.406,266,0.906,270,1.327,280,0.437,287,1.348,288,0.695,290,0.466,296,0.548,297,0.793,299,1.642,301,0.816,303,0.597,304,2.299,305,0.478,310,1.162,312,2,317,0.597,321,0.941,329,0.758,354,1.162,356,0.933,357,1.104,365,0.491,372,0.406,373,0.428,374,0.548,381,0.579,388,0.47,391,0.496,406,0.579,411,0.496,417,0.434,418,1.162,420,0.425,422,0.437,429,0.758,440,0.376,445,1.812,446,1.162,447,0.487,452,2.695,458,0.466,474,0.522,475,1.087,486,0.57,493,0.81,516,0.491,546,0.419,553,0.57,554,0.928,556,0.981,558,1.217,579,0.482,581,0.906,585,0.323,593,0.57,596,0.793,604,0.506,605,1.708,606,1.052,616,0.96,619,0.597,626,1.476,630,0.411,636,4.171,637,3.224,639,1.227,657,1.474,659,0.522,758,1.534,759,1.153,771,1.071,784,0.597,788,1.016,789,0.932,806,0.555,808,0.478,812,0.739,813,0.804,831,0.528,842,0.96,854,0.548,857,0.618,868,0.548,869,0.466,877,0.993,890,0.875,895,0.548,899,1.612,909,0.522,912,0.96,918,0.588,920,1.029,966,0.981,978,0.496,995,0.618,1050,0.441,1059,0.607,1064,1.122,1092,1.915,1209,0.579,1234,1.141,1236,2.334,1238,0.607,1248,1.122,1250,2.071,1252,1.162,1263,0.548,1267,4.115,1364,0.588,1369,1.141,1378,1.403,1432,0.563,1442,0.618,1505,2,1567,0.607,1720,0.618,1727,0.555,1737,0.867,1756,0.579,1774,1.122,1775,0.506,1782,0.607,1791,1.042,1808,2,1811,0.548,1814,1.104,1819,2.234,1820,0.618,1821,2.452,1870,0.528,1882,0.487,1891,0.541,1965,0.712,1966,0.712,1967,0.691,1970,2.383,1971,2.383,1972,2.383,1973,1.337,1974,2.383,1975,2.034,1976,3.992,1979,2.383,1980,2.255,1981,2.383,1982,1.235,1983,0.712,1984,1.337,1985,1.265,1986,1.298,1987,1.337,1989,0.712,2001,0.712,2002,0.712,2003,0.712,2004,1.89,2005,1.89,2006,0.673,2007,0.712,2008,0.712,2009,1.298,2010,0.712,2011,0.712,2012,0.712,2013,0.712,2014,0.673,2015,0.691,2016,1.071,2017,1.968,2018,1.586,2019,0.618,2020,0.618,2021,0.618,2022,1.208,2023,0.607,2024,1.337,2025,0.712,2026,0.643,2027,1.235,2028,0.643,2029,1.208,2030,0.712,2031,1.337,2032,1.337,2033,4.523,2034,4.218,2035,2.383,2036,1.337,2037,1.337,2038,1.89,2039,1.337,2040,1.265,2041,0.712,2042,0.643,2043,0.673,2044,0.691,2045,0.588,2046,0.673,2047,0.618,2048,0.712,2049,0.712,2050,0.712,2051,1.337,2052,1.337,2053,0.63,2054,0.712,2055,0.712,2056,1.337,2057,1.337,2058,0.712,2059,0.712,2060,0.691,2061,0.712,2062,0.712,2063,0.712,2064,2.383,2065,0.712,2066,1.337,2067,0.712,2068,1.162,2069,1.298,2070,0.673,2071,0.712,2072,0.712,2073,0.712,2078,0.712,2079,0.712,2080,0.618,2081,0.618,2082,0.618,2083,0.618,2084,0.712,2085,0.712,2086,0.712,2087,0.712,2088,0.657,2089,0.712,2090,0.643,2091,0.712,2092,0.555,2093,0.618,2094,0.712,2095,0.657,2096,0.657,2097,0.673,2098,0.712,2099,0.712,2100,0.712,2101,0.712,2102,0.712,2103,0.712,2104,1.337,2105,1.337,2106,4.986,2107,4.986,2108,1.337,2111,4.495,2112,1.337,2113,1.337,2114,3.917,2115,1.235,2116,3.225,2117,1.337,2118,1.337,2119,0.691,2120,1.087,2121,0.673,2122,0.712,2123,0.691,2124,0.712,2125,0.712,2126,0.712,2127,0.691,2128,0.712,2129,0.712,2130,0.673,2131,0.712,2132,1.337,2270,2.839,2271,2.839,2272,1.592,2273,0.8]],["component/73",[1,0.433]],["title/74-1",[14,17.187,1882,28.87,2092,32.923]],["name/74-1",[]],["text/74-1",[]],["component/74-1",[]],["title/74-2",[585,19.149,1425,26.338,2135,33.368]],["name/74-2",[]],["text/74-2",[]],["component/74-2",[]],["title/74-3",[49,15.596,1737,27.396,1775,30.017]],["name/74-3",[]],["text/74-3",[]],["component/74-3",[]],["title/74-4",[48,20.014,810,28.596,909,26.562,2159,31.436]],["name/74-4",[]],["text/74-4",[]],["component/74-4",[]],["title/74",[2161,50.081]],["name/74",[2161,1.445]],["text/74",[1,1.714,7,2.823,12,0.787,14,1.756,18,1.924,21,1.487,24,1.658,28,2.359,38,1.001,41,1.578,44,1.571,48,3.152,49,1.593,52,1.556,60,1.487,61,0.961,64,1.571,65,1.649,66,1.494,76,1.371,84,1.357,85,1.046,88,1.188,89,1.148,90,1.499,93,1.264,103,0.947,108,1.155,117,2.329,185,2.331,189,0.986,196,1.274,197,0.828,218,0.961,226,1.077,259,1.371,263,1.519,270,1.841,288,1.719,294,1.274,297,1.155,300,1.357,301,2.019,311,1.14,315,1.332,351,1.43,354,2.033,365,1.344,371,1.662,372,1.887,377,1.319,388,1.285,391,1.357,417,1.188,429,1.104,440,1.748,445,2.515,447,1.332,448,3.409,515,1.234,524,1.371,549,1.43,557,1.296,558,1.253,569,1.463,581,1.319,585,0.883,606,2.4,626,2.671,630,1.125,636,4.557,637,3.528,649,1.634,652,1.48,659,1.43,691,1.399,744,2.284,745,2.096,759,2.632,765,1.414,774,1.634,788,1.48,789,3.971,808,1.308,809,1.539,810,1.539,812,1.83,813,1.99,824,3.681,844,1.357,868,5.086,869,1.274,877,1.446,886,1.692,899,1.111,909,1.43,978,1.357,1017,1.692,1041,1.539,1092,2.242,1098,1.399,1166,1.692,1425,1.215,1430,1.48,1440,1.071,1737,1.264,1775,1.385,1792,1.692,1818,1.692,1819,1.539,1821,3.279,1870,2.456,1882,1.332,1891,1.48,1899,3.748,1964,1.519,2016,1.561,2017,2.732,2018,3.619,2019,1.692,2020,1.692,2021,1.692,2023,1.662,2045,2.732,2047,2.874,2068,1.692,2080,1.692,2081,1.692,2082,1.692,2083,1.692,2092,1.519,2093,1.692,2120,1.584,2135,4.896,2159,1.692,2162,3.213,2163,1.947,2164,1.947,2165,1.947,2166,1.76,2167,1.947,2168,1.891,2169,1.947,2170,1.947,2171,1.947,2172,1.947,2173,1.947,2174,1.947,2175,1.799,2176,1.947,2177,1.947,2178,1.891,2179,1.947,2180,1.947,2181,1.947,2182,1.947,2183,1.947,2184,1.947,2185,1.947,2186,1.891,2187,1.947,2188,1.799,2189,1.947,2190,1.842,2191,1.947,2192,1.891,2193,1.947,2194,1.947,2195,1.947,2196,1.947,2197,1.947,2198,1.947]],["component/74",[1,0.433]],["title/75-1",[0,63.349]],["name/75-1",[]],["text/75-1",[]],["component/75-1",[]],["title/75",[1,19.056]],["name/75",[2,1.51]],["text/75",[1,1.72,3,2.918,4,2.449,5,2.918,6,2.918,7,1.247,8,2.918,9,2.918,10,1.849,11,2.014,12,2.858,13,2.347,14,1.878,15,3.325,16,3.515,17,3.07,18,3.325,19,2.899,20,1.386,21,1.312,22,1.96,23,2.834,24,2.311,25,2.584,26,2.918,27,1.644,28,1.354,29,2.696,30,2.41,31,1.477,32,2.598,33,1.942,34,1.517,35,2.307,36,2.142,37,2.536,38,1.501,39,1.517,40,2.614,41,2.728,42,2.918,43,1.821,44,2.19,45,2.075,46,2.41,47,1.894,48,3.163,49,1.078,50,2.918,51,2.761,52,1.373,53,2.41,54,2.491,55,2.373,56,3.262,57,2.856,58,4.583,59,2.339,60,1.312,61,1.44,62,2.054,63,1.942,64,1.386,65,2.299,66,1.318,67,2.307,68,1.33,69,1.665,70,2.41,71,2.761,72,2.918,73,2.307,74,2.075,75,1.614,76,2.054,77,1.849,78,1.55,79,2.918,80,1.849,81,1.942,82,2.347,83,1.977,84,2.034,85,1.568,86,2.918,87,2.449,88,1.781,89,1.72,90,4.402,91,2.536,92,2.918,93,3.711,94,1.878,95,2.307,96,2.918,97,2.918,98,1.624,99,2.918,100,2.536,101,2.536,102,2.491,103,1.419,104,2.918,105,2.918,106,2.918,107,2.41,108,1.732,109,2.584,110,1.977,111,2.918,112,2.918,113,2.584,114,2.761,115,2.918,116,2.834]],["component/75",[1,0.433]],["title/76-1",[117,44.6]],["name/76-1",[]],["text/76-1",[]],["component/76-1",[]],["title/76-2",[118,63.349]],["name/76-2",[]],["text/76-2",[]],["component/76-2",[]],["title/76-3",[119,50.661,120,26.479]],["name/76-3",[]],["text/76-3",[]],["component/76-3",[]],["title/76-4",[121,41.211,122,31.377]],["name/76-4",[]],["text/76-4",[]],["component/76-4",[]],["title/76-5",[13,25.784,121,41.211]],["name/76-5",[]],["text/76-5",[]],["component/76-5",[]],["title/76-6",[123,39.531]],["name/76-6",[]],["text/76-6",[]],["component/76-6",[]],["title/76",[124,26.92,125,32.616]],["name/76",[124,0.544,125,0.66]],["text/76",[1,1.389,13,1.088,14,2.448,16,1.315,18,2.083,21,2.077,28,1.661,31,1.083,34,1.112,38,2.778,39,1.112,40,1.213,41,1.708,43,1.335,49,2.403,56,1.22,57,1.325,61,1.056,64,1.7,66,0.966,68,0.975,69,2.043,80,1.355,82,1.088,83,1.449,85,1.149,88,2.185,94,1.377,103,2.246,107,1.766,108,1.269,117,1.506,120,1.118,122,2.86,123,3.37,124,2.87,125,1.377,126,3.58,127,2.139,128,2.949,129,1.537,130,1.826,131,1.976,132,2.139,133,3.112,134,1.668,135,2.139,136,5.225,137,3.58,138,1.958,139,2.077,140,1.228,141,1.57,142,1.74,143,1.795,144,3.005,145,2.139,146,2.024,147,2.449,148,1.072,149,1.859,150,1.588,151,1.859,152,2.139,153,2.139,154,1.859,155,1.976,156,2.139,157,2.139,158,3.388,159,1.626,160,2.077,161,3.354,162,3.189,163,2.521,164,1.553,165,3.58,166,1.213,167,4.233,168,2.139,169,1.388,170,3.58,171,1.626,172,1.859,173,2.077,174,2.139,175,2.024,176,2.139,177,2.077,178,2.139,179,2.024,180,2.139,181,1.521,182,2.87,183,2.723,184,2.139,185,1.156,186,1.183,187,1.412,188,1.463,189,1.813,190,2.139,191,1.355,192,1.74,193,2.957,194,1.859,195,1.143,196,1.4,197,1.524,198,1.859,200,1.463,202,1.463,203,1.325,204,1.436,205,2.139,206,1.553,207,1.537,208,1.205,209,1.315,210,2.024,211,2.077,212,2.723,213,2.139,214,1.296,215,1.691,216,2.139,217,1.143,218,1.056,219,2.139,220,1.691,221,1.691,222,1.355,223,1.4,224,2.139,225,2.139,226,1.183,227,2.056,228,2.139,229,1.859,230,2.957,231,2.139,232,2.139,233,1.714,234,1.859,235,1.859,236,1.859,237,1.859,238,1.859,239,1.607,240,1.388,241,1.74,242,1.236,243,1.244,249,2.83,250,1.933,251,1.436,252,2.139,253,2.139,254,2.139,255,2.139,256,2.139,257,1.463,258,1.668,259,1.506,260,2.139,261,1.163,262,1.766,263,1.668,264,1.22,265,2.139]],["component/76",[1,0.433]],["title/77-1",[38,21.709,185,22.813,266,28.606]],["name/77-1",[]],["text/77-1",[]],["component/77-1",[]],["title/77-2",[267,31.647,268,30.74,269,31.647,270,17.616,271,29.242]],["name/77-2",[]],["text/77-2",[]],["component/77-2",[]],["title/77-3",[34,21.942,49,15.596,120,22.061]],["name/77-3",[]],["text/77-3",[]],["component/77-3",[]],["title/77-4",[85,22.683,120,22.061,203,26.142]],["name/77-4",[]],["text/77-4",[]],["component/77-4",[]],["title/77-5",[120,26.479,272,43.247]],["name/77-5",[]],["text/77-5",[]],["component/77-5",[]],["title/77-6",[120,26.479,273,35.667]],["name/77-6",[]],["text/77-6",[]],["component/77-6",[]],["title/77-7",[274,38.065,275,39.517]],["name/77-7",[]],["text/77-7",[]],["component/77-7",[]],["title/77-8",[276,42.934]],["name/77-8",[]],["text/77-8",[]],["component/77-8",[]],["title/77",[64,24.059,207,36.405]],["name/77",[120,0.536,273,0.721]],["text/77",[1,0.804,7,1.838,12,0.43,13,0.541,14,0.433,15,0.619,20,0.921,21,1.934,24,0.972,27,0.599,28,0.9,30,0.878,31,1.353,32,1.093,33,0.708,34,1.008,36,1.424,37,0.924,38,1.696,40,1.1,41,0.507,43,0.664,44,0.505,45,0.756,47,1.735,49,1.416,52,1.258,55,0.865,57,0.659,62,0.749,63,2.195,64,2.237,65,1.911,66,2.685,67,0.841,68,2.709,69,1.107,75,1.479,85,1.772,89,1.143,93,0.69,94,0.685,103,2.092,108,0.631,110,0.721,120,3.627,134,0.83,138,1.06,140,2.469,144,0.893,161,0.772,163,2.321,166,1.516,172,0.924,181,1.901,185,4.112,188,1.327,189,0.982,197,1.138,200,0.727,202,0.727,203,4.394,207,0.764,208,1.093,209,0.654,214,0.645,217,0.568,227,1.535,240,0.69,242,0.615,243,0.619,246,0.961,251,0.714,261,0.578,266,2.914,273,2.699,277,3.118,278,1.229,279,1.656,280,3.655,281,3.118,282,0.809,283,1.303,284,0.865,285,0.654,286,1.597,287,1.275,288,1.008,289,0.669,290,1.75,291,2.88,292,2.282,293,0.908,294,1.75,295,1.159,296,2.058,297,0.631,298,1.792,299,0.924,300,1.352,301,0.649,302,0.924,303,1.628,304,2.175,305,1.303,306,1.064,307,0.924,308,1.064,309,0.649,310,0.924,311,1.565,312,3.609,313,0.908,314,0.764,315,1.327,316,1.006,317,0.893,318,1.064,319,1.555,320,1.457,321,0.749,322,1.397,323,2.323,324,1.064,325,0.924,326,1.409,327,2.323,328,1.064,329,1.516,330,1.064,331,1.064,332,1.064,333,1.064,334,1.064,335,1.064,336,1.064,337,1.064,338,1.064,339,1.064,340,1.064,341,1.064,342,1.064,343,1.064,344,1.064,345,1.064,346,1.064,347,1.064,348,1.064,349,1.064,350,0.908,351,0.781,352,1.685,353,0.924,354,1.192,355,1.064,356,0.525,357,1.602,358,1.493,359,1.493,360,0.83,361,1.939,362,2.865,363,0.961,364,1.175,365,1.339,366,1.352,367,0.908,368,1.269,369,0.799,370,1.064,371,0.908,372,1.107,373,1.167,374,0.819,375,2.214,376,1.259,377,1.314,378,0.908,379,2.865,380,1.064,381,4.126,382,1.578,383,1.064,384,1.064,385,2.058,386,0.83,387,1.939,388,1.28,389,1.064,390,0.781,391,0.741,392,0.69,393,3.834,394,1.064,395,1.064,396,1.555,397,1.064,398,0.841,399,1.064,400,0.781,401,1.939,402,1.772,403,1.939,404,1.064,405,2.673,406,1.578,407,0.924,408,0.764,409,0.772,410,1.628,411,0.741,412,1.064,413,1.347,414,1.006,415,1.493,416,1.939,417,0.649,418,0.924,419,1.409,420,1.159,421,1.064,422,0.654,423,0.708,424,0.841,425,0.924,426,1.064,427,0.983,428,0.924,429,0.603,430,1.064,431,0.819,432,1.064,433,0.961,434,1.064,435,1.064,436,0.908,437,1.064,438,1.064,439,0.636,440,0.562,441,1.006,442,1.064,443,1.064,444,1.064,445,0.809,446,0.924,447,0.727,448,0.841,449,1.064,450,1.064,451,1.033,452,0.799,453,1.064,454,0.924,455,1.064,456,1.064,457,1.628,458,0.696,459,1.064,460,0.809,461,0.924,462,1.064,463,1.064,464,1.064,465,0.924,466,1.064,467,1.064,468,1.064,469,0.853,470,0.961,471,1.064,472,1.064,473,1.006,474,0.781,475,0.865]],["component/77",[1,0.433]],["title/78-1",[476,33.662]],["name/78-1",[]],["text/78-1",[]],["component/78-1",[]],["title/78-2",[477,40.142]],["name/78-2",[]],["text/78-2",[]],["component/78-2",[]],["title/78-3",[124,33.662]],["name/78-3",[]],["text/78-3",[]],["component/78-3",[]],["title/78",[478,32.075]],["name/78",[478,0.925]],["text/78",[7,0.793,12,2.607,14,2.458,15,1.079,20,0.881,21,0.834,24,0.93,28,2.286,31,0.939,32,2.776,38,0.954,41,1.515,44,1.508,47,1.204,49,1.82,52,1.494,53,3.155,60,2.49,61,3.185,68,1.447,69,1.811,73,1.467,77,2.637,78,0.986,82,0.944,85,0.997,94,1.195,103,1.544,124,2.618,125,1.195,133,1.613,136,2.759,138,1.015,141,1.363,142,1.509,148,1.591,161,2.306,162,2.873,166,1.052,167,1.306,191,2.012,198,1.613,217,3.226,218,0.916,222,2.012,223,1.214,239,1.394,242,1.072,243,1.079,278,1.176,280,1.141,284,1.509,285,2.558,286,2.487,287,0.885,294,1.214,307,1.613,311,1.087,322,0.97,326,2.306,329,1.052,356,2.054,359,1.429,364,1.124,366,1.294,369,3.126,372,2.374,376,1.204,385,1.429,386,1.447,388,1.225,396,1.079,408,1.333,413,0.935,419,1.348,420,1.109,422,1.141,423,1.235,431,2.445,439,1.109,457,1.557,458,2.078,477,4.501,478,2.494,479,1.856,480,1.856,481,1.613,482,1.394,483,1.856,484,1.856,485,1.756,486,1.488,487,1.509,488,2.665,489,3.175,490,1.856,491,1.269,492,3.839,493,1.124,494,2.759,495,1.856,496,1.856,497,1.124,498,1.856,499,1.856,500,3.761,501,1.363,502,1.677,503,2.934,504,1.856,505,1.333,506,1.613,507,3.761,508,1.856,509,1.348,510,4.007,511,1.269,512,3.616,513,1.981,514,1.109,515,1.176,516,2.192,517,1.333,518,1.557,519,1.856,520,1.584,521,1.677,522,1.802,523,1.856,524,1.306,525,1.32,526,1.856,527,2.759,528,2.51,529,1.269,530,1.613,531,1.856,532,1.856,533,3.084,534,4.161,535,1.802,536,1.856,537,1.856,538,3.164,539,1.856,540,1.856,541,1.856,542,1.856,543,1.856,544,1.856,545,1.856,546,1.094,547,1.856,548,1.584,549,1.363,550,1.856,551,1.429,552,1.856,553,1.488,554,0.911,555,1.715,556,1.363,557,1.235,558,1.195,559,1.856,560,1.856,561,1.258,562,1.533,563,1.856,564,1.856,565,1.856]],["component/78",[1,0.433]],["title/79-1",[7,13.523,440,16.723,623,25.018,636,19.899,637,19.601]],["name/79-1",[]],["text/79-1",[]],["component/79-1",[]],["title/79-2",[1,15.239,638,33.729]],["name/79-2",[]],["text/79-2",[]],["component/79-2",[]],["title/79-3",[478,25.651,639,32.883]],["name/79-3",[]],["text/79-3",[]],["component/79-3",[]],["title/79-4",[195,19.329,196,23.674,572,27.178,639,23.478]],["name/79-4",[]],["text/79-4",[]],["component/79-4",[]],["title/79-5",[1,12.696,440,22.304,640,42.208]],["name/79-5",[]],["text/79-5",[]],["component/79-5",[]],["title/79-6",[1,15.239,641,44.028]],["name/79-6",[]],["text/79-6",[]],["component/79-6",[]],["title/79",[561,28.606,616,30.33,642,36.681]],["name/79",[643,1.828]],["text/79",[1,0.64,7,4.122,10,0.746,13,1.082,21,0.956,27,1.198,28,1.349,32,0.663,34,1.105,40,0.667,44,0.559,49,0.435,52,0.554,63,2.372,66,0.532,69,0.672,74,2.068,75,1.609,83,0.798,85,0.633,93,0.764,103,0.573,110,0.798,123,0.735,128,0.752,149,1.023,166,2.02,167,1.497,169,0.764,194,1.023,195,3.202,196,2.696,199,1.785,204,0.791,240,0.764,243,0.685,251,0.791,257,0.805,261,0.64,270,0.655,274,0.884,276,0.798,288,0.612,309,0.718,315,0.805,321,0.829,329,0.667,354,0.724,356,0.581,362,1.848,417,0.718,420,1.271,425,1.023,429,0.667,440,3.303,454,1.023,458,1.392,477,3.615,478,2.086,497,1.289,509,0.855,525,0.837,538,1.617,551,0.906,554,0.578,561,2.415,572,1.598,574,0.958,581,0.798,596,1.262,618,1.064,623,0.931,631,1.617,636,1.829,637,0.729,638,1.416,639,4.057,641,2.527,642,7.831,644,1.143,645,0.864,646,1.114,647,1.177,648,1.114,649,0.988,650,1.177,651,1.114,652,0.895,653,1.114,654,1.177,655,1.598,656,0.874,657,0.918,658,1.848,659,1.561,660,1.177,661,3.563,662,1.177,663,3.563,664,2.908,665,2.126,666,1.177,667,1.177,668,1.848,669,2.527,670,3.372,671,1.177,672,1.177,673,1.177,674,1.177,675,1.177,677,1.177,678,2.126,679,1.177,680,2.126,681,1.177,682,1.177,683,1.177,684,1.143,685,1.177,686,1.177,687,1.177,688,2.908,689,1.177,690,1.177,691,0.846,692,1.177,693,1.177,694,1.177,695,1.177,696,1.177,697,1.177,698,1.177,699,1.177,700,1.177,701,2.012,702,0.931,704,1.177,705,1.177,706,2.065,707,1.177,708,2.065,709,1.659,710,1.177,711,1.177,712,1.177,713,1.177,714,1.177,715,5.705,716,1.177,717,1.177,718,1.177,719,1.177,720,1.177,721,1.177,722,1.177,723,1.177,724,1.177,725,1.177,726,1.177,727,1.177,728,1.177,729,1.177,730,1.177,731,1.177,732,1.177,733,1.177,734,1.177,735,1.177,736,1.177,737,1.177,738,1.177,739,1.177,740,1.177,741,1.177,742,1.177,743,1.177,744,2.008,745,0.746,746,1.177,747,5.432,748,1.177,749,1.177,750,2.908,751,1.177,752,2.126,753,1.177,754,2.126,755,1.177,756,1.177,757,1.177,758,0.758,759,0.718,760,1.883,761,1.177,762,1.023,763,1.023,764,1.023,765,0.855,766,1.143,767,2.908,768,2.126,769,1.177,770,1.177,771,0.944,772,0.988,773,0.958,774,0.988,775,1.177,776,2.908,777,1.177,778,1.177,779,1.177,780,1.177,781,1.177,782,1.177,783,1.064,784,0.988,785,1.177,786,1.177,787,4.12,788,0.895,789,0.821,790,1.177,791,1.177,792,1.177,793,1.177,794,1.177,795,1.177,796,1.177,797,1.177,798,1.177,799,1.177,800,1.177,801,1.177,802,1.177,803,1.177,804,1.177,805,1.177,806,0.918,807,1.177,808,2.393,809,0.931,810,0.931,811,1.023,812,1.177,813,1.28,814,1.023,815,1.023,2226,1.323,2227,1.402]],["component/79",[1,0.433]],["title/80-1",[195,27.072,571,34.979]],["name/80-1",[]],["text/80-1",[]],["component/80-1",[]],["title/80-2",[20,24.059,195,27.072]],["name/80-2",[]],["text/80-2",[]],["component/80-2",[]],["title/80-3",[195,27.072,571,34.979]],["name/80-3",[]],["text/80-3",[]],["component/80-3",[]],["title/80-4",[478,32.075]],["name/80-4",[]],["text/80-4",[]],["component/80-4",[]],["title/80-5",[276,42.934]],["name/80-5",[]],["text/80-5",[]],["component/80-5",[]],["title/80",[195,27.072,580,37.624]],["name/80",[195,0.977]],["text/80",[7,0.719,11,0.629,12,0.68,13,1.485,14,0.685,15,0.979,16,2.618,17,1.943,18,0.979,19,0.573,20,2.819,21,0.41,22,0.612,24,1.175,27,0.948,28,0.781,31,1.187,32,0.948,33,0.606,34,1.219,35,1.33,39,0.875,40,0.517,41,1.118,43,2.657,44,1.113,45,1.196,46,0.752,47,1.092,48,3.031,49,1.704,53,1.525,57,1.042,59,0.73,60,1.538,63,1.12,64,0.433,65,0.839,66,1.745,76,4.025,77,1.849,80,0.577,82,0.464,88,0.556,89,1.382,91,1.462,94,0.586,95,0.72,98,0.507,103,0.443,108,0.541,122,1.807,123,0.568,128,1.074,129,1.209,134,1.312,140,2.219,141,0.669,148,1.175,150,0.677,151,0.792,159,0.693,162,2.015,163,0.641,167,0.641,171,0.693,183,0.693,185,1.267,189,0.461,191,1.485,195,3.28,203,0.564,204,1.574,206,0.662,214,1.421,218,0.45,233,0.73,240,1.522,242,0.972,258,0.711,264,0.52,272,2.491,276,0.617,280,1.034,282,1.279,283,1.13,285,1.794,286,1.005,287,0.435,288,0.474,294,0.596,295,0.544,296,1.295,301,1.027,302,0.792,305,0.612,311,0.533,313,0.778,315,1.151,320,0.684,322,0.476,323,0.792,326,1.222,329,0.517,350,0.778,353,1.462,356,0.83,358,0.701,359,0.701,366,0.635,367,0.778,373,2.058,374,0.701,375,0.612,376,0.591,377,1.589,379,0.792,385,1.295,386,1.312,392,0.591,396,0.979,400,1.721,402,1.838,407,0.792,409,0.662,411,1.173,417,1.027,419,0.662,420,1.005,422,0.56,423,0.606,424,0.72,429,0.517,452,0.684,460,0.693,465,0.792,474,1.721,476,0.894,477,1.849,478,2.156,482,2.57,493,2.342,497,0.552,509,0.662,510,5.947,514,0.544,520,0.778,524,1.184,527,0.792,528,0.72,529,1.151,530,2.972,538,0.693,548,0.778,549,1.235,551,1.295,554,0.826,557,0.606,569,0.684,571,4.366,575,2.634,579,0.617,581,0.617,585,0.763,591,0.823,596,0.541,611,0.807,627,0.73,630,0.526,637,1.807,638,0.606,747,0.792,758,0.586,772,0.765,816,1.682,817,0.885,818,0.911,819,0.792,820,0.911,821,1.39,822,0.669,823,0.792,824,0.778,825,0.911,826,0.842,827,0.792,828,0.885,829,0.911,830,0.911,831,1.249,832,0.862,833,4.479,834,0.911,835,0.885,836,0.862,837,1.436,838,1.634,839,2.491,840,0.911,841,1.634,842,1.684,843,0.911,844,2.034,845,0.752,846,0.911,847,0.862,848,0.911,849,0.911,850,5.002,851,0.885,852,0.911,853,0.911,854,1.295,855,0.72,856,0.885,857,1.462,858,3.493,859,0.792,860,2.037,861,0.911,862,0.778,863,0.911,864,1.936,865,0.741,866,0.911,867,2.834,868,0.701,869,1.101,870,0.792,871,0.911,872,0.911,873,2.918,874,0.911,875,2.276,876,0.765,877,0.677,878,0.701,879,0.911,880,2.247,881,0.911,882,0.911,883,3.243,884,2.218,885,0.823,886,2.972,887,0.911,888,0.911,889,0.885,890,0.596,891,0.911,892,1.592,893,0.885,894,1.592,895,0.701,896,0.648,897,0.911,898,0.778,899,1.665,900,1.592,901,0.911,902,0.842,903,3.42,904,1.634,905,0.911,906,0.862,907,0.911,908,0.568,909,0.669,910,0.911,911,0.885,912,0.655,913,0.911,914,0.911,915,0.72,916,0.911,917,0.911,918,0.752,919,0.911,920,1.295,921,0.885,922,0.911,923,0.911,924,0.911,925,1.49,926,0.911,927,0.911,928,0.911,929,2.918,930,1.312,931,0.765,932,0.911,933,0.911,934,1.682,935,0.885,936,0.862,937,0.823,938,0.911,939,0.778,940,0.911,941,0.911,942,0.778,943,0.842,944,0.911,945,0.911,946,0.911,947,0.862,948,0.765,949,0.842,950,0.911,951,0.911,952,0.577,953,0.72,954,0.911,955,0.823,956,0.911,957,0.885,958,0.911,959,0.911,960,0.911,961,0.862,962,0.911,963,0.752]],["component/80",[1,0.433]],["title/81-1",[476,33.662]],["name/81-1",[]],["text/81-1",[]],["component/81-1",[]],["title/81-2",[217,22.555,218,20.836,513,26.338]],["name/81-2",[]],["text/81-2",[]],["component/81-2",[]],["title/81-3",[439,30.274,964,40.051]],["name/81-3",[]],["text/81-3",[]],["component/81-3",[]],["title/81-4",[13,25.784,203,31.377]],["name/81-4",[]],["text/81-4",[]],["component/81-4",[]],["title/81-5",[148,25.389,965,37.201]],["name/81-5",[]],["text/81-5",[]],["component/81-5",[]],["title/81-6",[290,33.157,965,37.201]],["name/81-6",[]],["text/81-6",[]],["component/81-6",[]],["title/81-7",[203,31.377,966,37.201]],["name/81-7",[]],["text/81-7",[]],["component/81-7",[]],["title/81-8",[967,44.028,968,40.051]],["name/81-8",[]],["text/81-8",[]],["component/81-8",[]],["title/81",[82,25.784,197,21.56]],["name/81",[197,0.436,969,0.89]],["text/81",[7,2.21,12,0.808,13,2.238,14,2.724,20,2.088,21,1.521,28,1.569,41,1.614,49,2.321,52,0.94,53,1.768,57,1.238,65,0.997,66,0.903,78,1.062,140,2.525,148,1.695,166,1.133,191,2.143,197,2.462,200,1.367,203,3.204,217,3.356,218,1.67,227,3.606,257,1.367,261,1.087,262,1.651,278,2.143,286,3.457,287,0.954,290,1.308,295,1.194,322,2.298,356,0.987,368,1.308,373,1.203,396,1.968,402,1.074,408,2.431,413,1.007,420,1.194,439,4.529,491,5.011,501,1.468,511,3.007,513,3.228,546,1.178,554,0.982,583,1.22,587,2.674,638,1.331,812,1.106,837,1.706,890,2.878,908,1.247,952,4.457,964,3.476,965,1.468,966,2.484,968,3.476,970,1.999,971,1.737,972,1.999,973,1.999,974,2.214,975,3.786,976,5.458,977,1.559,978,1.393,979,1.308,980,1.194,981,1.148,982,1.999,983,5.024,984,1.999,985,1.942,986,1.468,987,1.436,988,4.397,989,3.382,990,4.397,991,1.539,992,1.737,993,3.382,994,1.999,995,2.939,996,2.16,997,1.999,998,1.942,999,1.58,1000,1.737,1001,1.58,1002,3.382,1003,1.737,1004,1.559,1005,1.999,1006,1.999,1007,1.999,1008,1.999,1009,1.999,1010,1.999,1011,1.999,1012,1.999,1013,1.999,1014,1.999,1015,1.737,1016,1.999,1017,1.737,1018,1.58,1019,1.999,1020,1.58,1021,1.999,1022,1.999,1023,1.999,1024,1.999,1025,1.999,1026,1.999,1027,1.999,1028,1.999,1029,1.999,1030,1.999,1031,1.999,1032,1.999,1033,1.559,1034,1.706,1035,3.382,1036,1.999,1037,1.999,1038,3.821,1039,1.999,1040,1.355,1041,1.58,1042,1.737,1043,1.651,1044,1.999,1045,1.737,1046,1.999,1047,1.737,1048,3.382,1049,1.355]],["component/81",[1,0.433]],["title/82-1",[476,33.662]],["name/82-1",[]],["text/82-1",[]],["component/82-1",[]],["title/82-2",[287,24.173,981,29.091]],["name/82-2",[]],["text/82-2",[]],["component/82-2",[]],["title/82-3",[322,26.479,981,29.091]],["name/82-3",[]],["text/82-3",[]],["component/82-3",[]],["title/82-4",[413,25.519,981,29.091]],["name/82-4",[]],["text/82-4",[]],["component/82-4",[]],["title/82-5",[981,29.091,996,32.356]],["name/82-5",[]],["text/82-5",[]],["component/82-5",[]],["title/82-6",[812,23.354,981,24.236,1049,28.606]],["name/82-6",[]],["text/82-6",[]],["component/82-6",[]],["title/82",[215,40.051,1050,31.377]],["name/82",[812,0.567,1050,0.635]],["text/82",[1,1.212,7,3.144,13,3.002,14,2.647,15,1.436,16,1.517,19,1.552,20,3.879,21,2.297,28,1.87,31,2.041,44,1.914,49,2.577,66,1.115,68,1.837,85,3.169,208,1.391,240,1.602,270,1.374,285,1.517,287,1.923,289,1.552,295,3.053,311,1.445,322,1.29,354,1.517,364,1.496,368,1.615,375,2.707,376,3.316,390,1.812,392,1.602,396,3.431,408,1.774,413,1.243,415,1.9,419,3.711,431,1.9,513,2.515,546,1.455,554,1.212,567,1.833,575,1.9,606,1.374,669,5.649,758,1.589,759,3.6,811,2.145,812,2.23,823,3.503,878,1.9,908,1.54,931,2.072,939,2.107,964,4.039,974,1.615,975,3.86,979,3.86,981,3.387,1050,3.653,1051,3.915,1052,2.468,1053,2.468,1054,2.468,1055,2.107,1056,2.397,1057,2.468,1058,4.031,1059,2.107,1060,2.072,1061,3.503,1062,2.336,1063,3.187,1064,3.383,1065,2.468,1066,1.925,1067,3.441,1068,2.468,1069,2.397,1070,5.109,1071,4.031,1072,5.109,1073,2.336,1074,4.031,1075,2.468,1076,2.468,1077,2.468,1078,2.468,1079,4.031,1080,2.468,1081,2.468,1082,3.503,1083,4.031,1084,2.397,1085,2.468,1086,2.145,1087,2.468,1088,2.468,1089,2.468,1090,2.468,1091,2.397,1092,1.673,1093,2.468,1094,1.576,1095,2.336,1096,2.336]],["component/82",[1,0.433]],["title/83-1",[476,33.662]],["name/83-1",[]],["text/83-1",[]],["component/83-1",[]],["title/83",[14,20.629,122,31.377]],["name/83",[2,1.51]],["text/83",[4,2.787,7,3.39,12,2.509,14,2.077,20,2.949,27,1.871,31,1.681,44,1.577,49,3.151,53,2.666,60,2.294,61,2.518,78,2.71,80,2.104,122,3.846,138,1.816,148,1.664,171,2.525,197,1.413,208,1.871,214,2.012,215,2.625,226,1.837,261,1.805,286,1.984,287,1.584,290,2.173,295,3.71,300,3.555,321,2.338,369,2.495,413,1.673,422,2.042,428,2.886,458,2.173,476,1.765,492,2.757,501,4.559,513,4.347,515,3.232,517,2.386,518,2.787,546,3.006,554,2.505,585,1.507,812,2.822,813,3.736,814,2.886,815,2.886,876,2.787,908,2.072,971,2.886,974,4.559,975,3.338,976,2.886,977,3.978,979,2.173,1050,3.159,1055,2.835,1063,2.625,1067,2.835,1086,5.396,1094,2.121,1097,3.321,1098,2.386,1099,4.909,1100,3.321,1101,3.321,1102,3.321,1103,3.321,1104,3.321,1105,2.886,1106,2.439,1107,2.315,1108,3.321]],["component/83",[1,0.433]],["title/84-1",[186,23.354,604,30.017,930,32.923]],["name/84-1",[]],["text/84-1",[]],["component/84-1",[]],["title/84-2",[186,23.354,604,30.017,1109,36.031]],["name/84-2",[]],["text/84-2",[]],["component/84-2",[]],["title/84-3",[186,28.031,1110,40.051]],["name/84-3",[]],["text/84-3",[]],["component/84-3",[]],["title/84-4",[187,41.814]],["name/84-4",[]],["text/84-4",[]],["component/84-4",[]],["title/84-5",[186,28.031,1111,40.051]],["name/84-5",[]],["text/84-5",[]],["component/84-5",[]],["title/84-6",[186,23.354,1111,33.368,1112,42.208]],["name/84-6",[]],["text/84-6",[]],["component/84-6",[]],["title/84-7",[1113,50.081]],["name/84-7",[]],["text/84-7",[]],["component/84-7",[]],["title/84-8",[1114,55.054]],["name/84-8",[]],["text/84-8",[]],["component/84-8",[]],["title/84-9",[197,26.959]],["name/84-9",[]],["text/84-9",[]],["component/84-9",[]],["title/84-10",[197,21.56,325,44.028]],["name/84-10",[]],["text/84-10",[]],["component/84-10",[]],["title/84-11",[197,21.56,1115,50.661]],["name/84-11",[]],["text/84-11",[]],["component/84-11",[]],["title/84-12",[1116,37.201,1117,44.028]],["name/84-12",[]],["text/84-12",[]],["component/84-12",[]],["title/84-13",[297,30.067,1110,40.051]],["name/84-13",[]],["text/84-13",[]],["component/84-13",[]],["title/84-14",[197,21.56,1113,40.051]],["name/84-14",[]],["text/84-14",[]],["component/84-14",[]],["title/84-15",[197,21.56,966,37.201]],["name/84-15",[]],["text/84-15",[]],["component/84-15",[]],["title/84-16",[197,21.56,1118,44.028]],["name/84-16",[]],["text/84-16",[]],["component/84-16",[]],["title/84",[138,27.701,148,25.389]],["name/84",[138,0.56,148,0.513]],["text/84",[7,0.909,12,0.329,14,2.364,19,0.953,20,0.72,21,0.682,27,0.459,28,2.134,31,0.412,39,0.788,40,2.431,41,0.388,43,0.508,47,0.528,49,0.301,53,1.392,56,0.865,65,0.756,68,0.691,76,0.573,78,0.433,82,0.414,85,0.437,93,0.528,124,1.668,129,1.528,138,1.717,140,2.462,148,1.066,166,0.462,186,1.972,187,1,188,0.557,189,0.412,197,1.825,200,0.557,209,0.932,214,0.493,217,2.61,218,2.866,223,0.533,227,0.87,264,1.213,276,1.027,279,1.294,286,3.216,287,1.7,290,1.392,291,2.001,292,0.695,297,1.262,301,0.497,309,0.497,322,2.062,326,1.101,356,0.402,365,0.562,368,0.533,372,0.464,376,0.528,391,0.567,396,1.55,398,0.643,402,0.437,409,0.591,410,0.683,411,1.057,413,1.581,429,0.462,447,0.557,469,1.215,491,1.037,497,0.493,505,0.585,506,0.707,511,1.037,514,0.486,529,1.037,546,0.48,554,0.4,557,0.542,558,0.524,598,0.695,606,0.453,630,0.47,638,0.542,645,0.598,659,2.305,691,1.528,702,1.198,709,0.635,806,0.635,827,0.707,842,2.834,845,0.672,869,1.743,890,0.992,908,0.508,930,1.182,942,1.294,952,2.499,965,1.113,967,0.707,968,0.643,979,0.533,986,0.598,987,1.089,992,0.707,996,2.519,1001,0.643,1003,2.315,1004,1.659,1015,1.317,1018,0.643,1020,0.643,1033,0.635,1038,3.428,1040,2.673,1042,0.707,1045,1.317,1047,1.317,1049,2.128,1061,0.707,1092,1.027,1094,0.52,1098,1.528,1107,1.057,1109,1.816,1110,5.006,1111,0.643,1113,0.643,1114,0.707,1116,1.113,1117,1.317,1118,0.707,1119,2.013,1120,0.791,1121,1.182,1122,1.516,1123,0.814,1124,1.516,1125,0.814,1126,1.516,1127,0.814,1128,1.516,1129,0.814,1130,1.516,1131,0.814,1132,1.516,1133,0.814,1134,1.516,1135,0.814,1136,1.516,1137,0.814,1138,0.814,1139,0.814,1140,2.127,1141,0.814,1142,1.516,1143,0.814,1144,0.814,1145,0.814,1146,0.814,1147,0.814,1148,0.814,1149,0.814,1150,0.814,1151,0.814,1152,0.814,1153,0.814,1154,2.127,1155,1.516,1156,2.664,1157,0.814,1158,1.516,1159,1.516,1160,0.814,1161,0.814,1162,2.587,1163,1.516,1164,2.127,1165,3.221,1166,2.728,1167,0.814,1168,1.516,1169,1.516,1170,1.272,1171,0.791,1172,0.814,1173,0.814,1174,0.814,1175,0.814,1176,0.791,1177,1.516,1178,1.516,1179,0.814,1180,1.516,1181,0.814,1182,1.516,1183,0.814,1184,0.814,1185,0.814,1186,0.814,1187,0.814,1188,0.814,1189,0.814,1190,0.814,1191,0.814,1192,0.814,1193,0.814,1194,0.814,1195,0.814,1196,0.814,1197,1.516,1198,0.814,1199,0.814,1200,0.814,1201,0.814,1202,0.814,1203,0.814,1204,1.233,1205,0.814,1206,0.814,1207,0.814,1208,0.814,1209,0.662,1210,0.814,1211,0.814,1212,0.814,1213,0.814,1214,0.814,1215,0.814,1216,0.695,1217,0.814,1218,0.814,1219,0.814,1220,0.814,1221,0.814,1222,0.814,1223,0.814,1224,0.814,1225,0.814,1226,0.814,1227,1.848,1228,0.814,1229,1.848,1230,0.814,1231,0.814,1232,0.814,1233,0.814,1234,0.695,1235,0.814,1236,0.672,1237,0.814,1238,0.695,1239,0.814,1240,0.814,1241,0.77,1242,0.814,1243,0.814,1244,0.814,1245,0.814,1246,0.814,1247,0.814,1248,0.683,1249,0.814,1250,0.707,1251,0.814,1252,0.707,1253,0.814,1254,0.814,1255,0.814,1256,0.814,1257,0.791,1258,0.814,1259,0.791,1260,0.814,1261,0.695,1262,0.814,1263,0.627,1264,0.814,1265,0.736,1266,0.814,1267,0.643,1268,0.814,1269,0.814,1270,0.814,1271,0.814,1272,0.814,1273,0.814,1274,0.814,1275,0.814,1276,0.814,1277,0.814,1278,0.814,1279,0.77,1280,0.814,1281,6.169,1282,0.814,1283,0.814,1284,0.814,1285,0.814,1286,0.814,1287,0.814,1288,0.707,1289,0.814,1290,0.814,1291,0.814,1292,0.814,1293,0.814,1294,0.814,1295,0.814,1296,1.516,1297,0.814,1298,1.516,1299,0.814,1300,1.516,1301,0.814,1302,1.516,1303,0.814,1304,0.707,1305,0.814,1306,0.814,1307,0.814,1308,0.707,1309,0.814,1310,0.707,1311,0.814,1312,0.707,1313,0.814,1314,0.707,1315,0.814,1316,0.814,1317,0.814,1318,0.707,1319,0.814,1320,0.707,1321,0.814,1322,0.814,1323,0.814,1324,0.752,1325,0.814,1326,0.752,1327,0.814,1328,0.814,1329,0.814,1330,0.814,1331,0.814,1332,0.814,1333,0.814,1334,0.814,1335,0.814,1336,0.814,1337,0.814,1338,0.814,1339,0.814,1340,0.814,1341,0.814,1342,0.814,1343,0.814,1344,0.814,1345,0.814,1346,0.814,1347,0.814,1348,0.814,1349,0.814,1350,0.814,1351,0.814,1352,0.814,1353,0.814,1354,0.814,1355,0.814,1356,0.814,1357,0.814,1358,0.814,1359,0.814,1360,2.127,1361,0.791,1362,0.814,1363,0.814,1364,0.672,1365,0.814,1366,0.814,1367,0.814,1368,0.814,1369,0.695,1370,1.516,1371,0.814,1372,1.516,1373,0.814,1374,0.814,1375,0.814,1376,0.814,1377,2.664,1378,0.604,1379,0.791,1380,0.814,1381,0.77,1382,0.814,1383,0.814,1384,1.434,1385,0.814,1386,0.814,1387,0.814,1388,1.516,1389,2.664,1390,0.814,1391,0.707,1392,0.814,1393,0.814,1394,0.814,1395,0.814,1396,0.814,1397,0.814,1398,0.814,1399,0.707,1400,0.707,1401,1.516,1402,0.814,1403,0.707,1404,0.814,1405,0.707,1406,0.814,1407,0.814,1408,0.814,1409,0.814,1410,0.814,1411,0.814,1412,0.814,1413,2.664,1414,0.814,1415,0.814,1416,0.814,1417,0.814,1418,0.814,1419,0.814,1420,0.814,1421,0.707,1422,0.707]],["component/84",[1,0.433]],["title/85-1",[476,33.662]],["name/85-1",[]],["text/85-1",[]],["component/85-1",[]],["title/85-2",[1423,46.518]],["name/85-2",[]],["text/85-2",[]],["component/85-2",[]],["title/85-3",[217,27.072,492,27.382]],["name/85-3",[]],["text/85-3",[]],["component/85-3",[]],["title/85-4",[53,26.479,1106,37.201]],["name/85-4",[]],["text/85-4",[]],["component/85-4",[]],["title/85-5",[513,31.613,975,33.157]],["name/85-5",[]],["text/85-5",[]],["component/85-5",[]],["title/85-6",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/85-6",[]],["text/85-6",[]],["component/85-6",[]],["title/85",[12,14.615,61,17.856,402,19.439,492,19.55]],["name/85",[492,0.554,1106,0.752]],["text/85",[1,1.164,10,1.488,12,1.994,14,0.956,20,2.343,21,1.74,24,1.176,28,2.289,33,2.576,49,2.661,53,2.991,61,2.825,65,1.929,68,1.07,74,1.67,94,1.511,103,1.142,108,1.393,124,1.247,128,1.499,164,3.584,166,1.331,169,1.524,197,0.999,206,1.705,209,2.378,217,4.292,218,2.436,220,1.856,221,1.856,222,3.626,223,3.745,226,2.14,242,1.357,257,1.606,263,1.831,286,2.948,287,1.12,289,1.476,294,2.532,295,1.403,297,1.393,311,1.375,322,2.022,329,1.331,356,1.91,364,2.344,368,3.745,372,1.339,377,1.591,396,1.366,402,2.652,409,1.705,413,1.182,439,1.403,491,4.329,492,3.892,493,1.423,494,3.362,497,1.423,513,3.079,514,1.403,515,2.451,546,2.909,633,1.97,645,2.841,655,1.764,759,1.433,765,1.705,812,1.299,813,3.443,831,1.743,880,1.808,890,1.536,896,1.67,898,2.004,912,1.687,915,1.856,969,2.04,974,4.142,975,2.532,977,1.831,979,2.532,980,1.403,981,2.221,991,1.808,996,1.499,1000,3.362,1041,1.856,1094,2.471,1105,2.04,1106,4.647,1121,1.831,1170,1.97,1261,2.004,1423,2.841,1425,1.465,1427,3.362,1428,1.785,1429,2.04,1430,1.785,1431,2.04,1432,1.856,1433,2.348,1434,2.348,1435,1.882,1436,2.28,1437,2.348,1438,2.348,1439,1.939,1440,2.128,1441,2.348,1442,2.04,1443,2.348,1444,2.348,1445,2.04,1446,2.04]],["component/85",[1,0.433]],["title/86-1",[476,33.662]],["name/86-1",[]],["text/86-1",[]],["component/86-1",[]],["title/86-2",[1423,46.518]],["name/86-2",[]],["text/86-2",[]],["component/86-2",[]],["title/86-3",[217,27.072,492,27.382]],["name/86-3",[]],["text/86-3",[]],["component/86-3",[]],["title/86-4",[60,18.981,297,25.05,1447,36.681]],["name/86-4",[]],["text/86-4",[]],["component/86-4",[]],["title/86-5",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/86-5",[]],["text/86-5",[]],["component/86-5",[]],["title/86-6",[218,20.836,505,30.33,517,30.33]],["name/86-6",[]],["text/86-6",[]],["component/86-6",[]],["title/86-7",[223,27.625,249,33.368,1448,36.681]],["name/86-7",[]],["text/86-7",[]],["component/86-7",[]],["title/86-8",[1449,55.054]],["name/86-8",[]],["text/86-8",[]],["component/86-8",[]],["title/86-9",[1450,55.054]],["name/86-9",[]],["text/86-9",[]],["component/86-9",[]],["title/86-10",[52,29.804]],["name/86-10",[]],["text/86-10",[]],["component/86-10",[]],["title/86-11",[392,32.883,1451,44.028]],["name/86-11",[]],["text/86-11",[]],["component/86-11",[]],["title/86",[12,14.615,60,16.266,402,19.439,492,19.55]],["name/86",[60,0.461,492,0.554]],["text/86",[1,0.315,7,3.324,10,0.349,12,1.317,14,0.427,20,0.909,21,0.247,24,0.525,28,0.486,33,0.698,40,0.594,49,0.387,52,0.9,53,0.548,58,0.441,60,1.814,65,0.954,68,0.872,75,1.059,78,0.797,80,0.349,81,0.366,82,0.533,84,1.046,100,0.478,101,1.663,102,0.895,103,0.268,108,0.327,122,0.341,124,1.218,128,0.351,147,0.376,148,1.323,164,1.09,169,0.974,189,0.279,192,0.448,197,0.446,204,0.704,206,0.4,208,1.078,209,0.338,214,0.333,217,1.583,218,0.517,220,0.435,221,0.435,222,0.664,223,1.728,226,0.58,249,2.577,257,1.309,261,0.299,275,0.429,278,0.349,286,1.77,287,1.094,289,0.346,294,0.686,297,0.327,305,0.37,309,0.336,311,0.322,322,1,352,2.574,356,0.272,364,0.333,368,0.982,376,0.357,377,0.373,396,0.61,398,1.513,402,0.296,413,0.756,415,0.424,423,0.366,439,1.37,488,0.462,491,2.23,492,1.239,493,0.333,497,0.635,501,0.404,505,1.647,511,0.717,512,0.478,514,0.626,515,1.213,517,1.078,525,0.745,546,1.351,554,1.455,567,0.409,606,0.835,610,0.419,628,0.448,630,0.318,645,1.683,655,0.413,668,1.663,691,0.753,702,0.435,709,0.429,758,0.354,759,0.64,813,1.152,844,0.384,855,1.812,869,0.982,880,2.033,896,0.391,899,0.314,912,0.395,915,0.435,952,1.877,953,0.435,974,0.982,975,0.686,981,0.316,986,0.404,987,0.395,991,0.424,996,0.958,999,0.829,1001,1.812,1018,0.435,1020,0.435,1033,0.429,1034,0.47,1040,1.297,1043,0.455,1049,1.554,1060,0.462,1092,0.373,1094,0.958,1098,1.078,1107,0.384,1116,0.404,1121,0.818,1227,0.911,1229,0.478,1288,0.911,1304,0.478,1308,1.992,1310,0.911,1312,1.992,1314,0.478,1318,0.911,1320,1.304,1378,0.409,1391,1.304,1399,0.478,1400,0.478,1403,0.478,1405,0.478,1421,0.478,1422,0.478,1423,0.77,1425,0.654,1427,0.911,1428,0.419,1429,0.911,1430,0.419,1431,0.478,1432,0.829,1445,0.911,1446,0.478,1447,0.911,1448,1.992,1449,0.911,1450,1.304,1451,1.663,1452,0.487,1453,0.478,1454,1.048,1455,1.048,1456,0.55,1457,1.458,1458,1.048,1459,1.048,1460,0.55,1461,1.048,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.048,1469,0.55,1470,1.048,1471,2.962,1472,0.535,1473,0.55,1474,0.55,1475,0.55,1476,1.186,1477,0.55,1478,0.55,1479,0.509,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.292,1485,0.55,1486,5.35,1487,1.914,1488,2.292,1489,1.501,1490,1.501,1491,1.501,1492,2.292,1493,1.914,1494,2.292,1495,1.914,1496,1.048,1497,1.048,1498,2.641,1499,1.048,1500,1.458,1501,2.292,1502,0.55,1503,1.914,1504,1.048,1505,0.462,1506,1.501,1507,2.962,1508,1.914,1509,1.048,1510,1.501,1511,0.55,1512,0.55,1513,1.914,1514,1.048,1515,1.914,1516,1.458,1517,1.048,1518,1.501,1519,1.501,1520,2.641,1521,0.55,1522,1.048,1523,1.914,1524,0.55,1525,1.501,1526,1.914,1527,1.048,1528,0.55,1529,2.292,1530,2.292,1531,2.641,1532,2.292,1533,1.501,1534,1.914,1535,1.048,1536,1.501,1537,1.914,1538,1.501,1539,1.501,1540,2.962,1541,0.55,1542,1.914,1543,1.914,1544,1.048,1545,0.947,1546,1.914,1547,1.501,1548,2.292,1549,0.55,1550,2.292,1551,0.55,1552,1.048,1553,0.55,1554,1.048,1555,3.26,1556,1.914,1557,1.501,1558,1.501,1559,1.048,1560,1.048,1561,0.55,1562,2.641,1563,1.501,1564,1.914,1565,1.914,1566,1.914,1567,1.281,1568,0.55,1569,1.914,1570,1.048,1571,1.048,1572,1.501,1573,1.914,1574,1.048,1575,1.501,1576,2.292,1577,1.501,1578,1.914,1579,1.501,1580,1.501,1581,1.048,1582,1.914,1583,0.55,1584,1.501,1585,1.048,1586,1.501,1587,1.048,1588,1.914,1589,0.55,1590,1.914,1591,0.55,1592,1.501,1593,1.048,1594,1.914,1595,1.048,1596,1.501,1597,1.914,1598,0.55,1599,1.501,1600,1.501,1601,1.048,1602,1.914,1603,1.048,1604,1.048,1605,1.501,1606,1.048,1607,0.55,1608,1.914,1609,1.501,1610,2.962,1611,1.048,1612,1.048,1613,0.55,1614,1.501,1615,1.914,1616,1.501,1617,0.55,1618,1.048,1619,0.55,1620,1.501,1621,0.55,1622,1.048,1623,1.048,1624,1.048,1625,1.501,1626,0.55,1627,1.914,1628,1.048,1629,1.914,1630,1.501,1631,1.501,1632,1.501,1633,0.55,1634,0.55,1635,1.914,1636,1.501,1637,0.55,1638,1.048,1639,0.55,1640,0.55,1641,1.048,1642,1.914,1643,0.55,1644,0.55,1645,1.048,1646,0.55,1647,1.048,1648,0.55,1649,1.048,1650,1.048,1651,0.55,1652,0.55,1653,1.048,1654,1.914,1655,1.914,1656,0.55,1657,1.048,1658,1.048,1659,0.55,1660,1.048,1661,1.048,1662,0.55,1663,1.501,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.501,1670,2.292,1671,1.048,1672,1.048,1673,1.048,1674,0.55,1675,0.55,1676,1.048,1677,1.501,1678,0.55,1679,0.55,1680,1.048,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.497,1686,1.501,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.048,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.048,1704,1.048,1705,1.048,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.535,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.521,1717,0.55,1718,0.55,1719,0.55,1720,0.478,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.535,1726,0.55,1727,0.818,1728,0.55,1729,0.55,1730,0.55,1731,0.535,1732,0.55,1733,0.535,1734,0.55,1735,0.55,1736,0.55,1737,0.357,1738,0.521,1739,0.497,1740,0.535,1741,0.462,1742,1.048,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.048,1750,0.55,1751,1.048,1752,0.55,1753,0.478,1754,0.55]],["component/86",[1,0.433]],["title/87-1",[476,33.662]],["name/87-1",[]],["text/87-1",[]],["component/87-1",[]],["title/87-2",[82,25.784,226,28.031]],["name/87-2",[]],["text/87-2",[]],["component/87-2",[]],["title/87-3",[227,29.091,392,32.883]],["name/87-3",[]],["text/87-3",[]],["component/87-3",[]],["title/87-4",[227,36.376]],["name/87-4",[]],["text/87-4",[]],["component/87-4",[]],["title/87-5",[264,36.145]],["name/87-5",[]],["text/87-5",[]],["component/87-5",[]],["title/87-6",[439,37.856]],["name/87-6",[]],["text/87-6",[]],["component/87-6",[]],["title/87-7",[227,29.091,390,37.201]],["name/87-7",[]],["text/87-7",[]],["component/87-7",[]],["title/87-8",[227,36.376]],["name/87-8",[]],["text/87-8",[]],["component/87-8",[]],["title/87",[226,35.051]],["name/87",[226,1.011]],["text/87",[7,2.215,12,0.81,14,0.816,22,1.347,24,3.152,28,2.045,31,1.015,32,1.911,44,0.952,49,1.628,52,1.595,60,0.902,61,0.99,65,1.691,82,1.726,84,1.398,122,3.21,124,2.341,125,1.291,140,1.151,147,1.371,148,1.005,159,3.351,162,1.384,169,1.301,189,1.717,197,0.853,217,1.071,218,0.99,226,3.48,227,4.858,229,1.742,234,1.742,235,1.742,236,3.829,237,1.742,238,1.742,239,1.506,241,1.631,242,1.159,243,1.166,259,1.411,264,4.827,278,1.27,285,1.233,287,3.196,295,1.198,309,1.224,314,3.166,322,3.029,351,2.49,356,0.99,364,1.215,373,1.206,390,4.619,392,3.761,413,2.61,422,1.233,429,1.137,436,1.711,439,3.463,461,1.742,493,2.055,497,3.141,511,1.371,515,1.27,554,0.985,561,1.359,585,0.91,610,3.351,626,2.1,627,1.607,628,4.216,745,1.27,812,1.876,813,1.206,842,1.441,890,1.312,895,1.544,908,1.251,952,1.27,953,2.681,974,1.312,979,2.219,980,1.198,996,2.166,999,1.585,1004,1.564,1040,2.298,1049,2.298,1063,1.585,1094,2.814,1099,1.585,1107,1.398,1428,1.525,1435,1.607,1476,1.585,1753,5.036,1755,2.005,1756,1.631,1757,5.182,1758,3.391,1759,2.005,1760,3.391,1761,4.406,1762,2.005,1763,2.005,1764,2.005,1765,3.391,1766,3.391,1767,3.391,1768,1.897,1769,4.28,1770,4.406,1771,1.947,1772,3.391,1773,2.005,1774,1.683,1775,1.426,1776,2.005,1777,2.005,1778,1.947,1779,2.005,1780,2.005,1781,2.005,1782,1.711,1783,2.005,1784,5.034]],["component/87",[1,0.433]],["title/88-1",[744,34.979,745,32.102]],["name/88-1",[]],["text/88-1",[]],["component/88-1",[]],["title/88-2",[75,28.031,1787,44.028]],["name/88-2",[]],["text/88-2",[]],["component/88-2",[]],["title/88-3",[209,31.147,585,22.984]],["name/88-3",[]],["text/88-3",[]],["component/88-3",[]],["title/88-4",[585,22.984,1790,46.812]],["name/88-4",[]],["text/88-4",[]],["component/88-4",[]],["title/88-5",[388,41.814]],["name/88-5",[]],["text/88-5",[]],["component/88-5",[]],["title/88-6",[64,30.084]],["name/88-6",[]],["text/88-6",[]],["component/88-6",[]],["title/88-7",[478,32.075]],["name/88-7",[]],["text/88-7",[]],["component/88-7",[]],["title/88-8",[18,29.47,48,28.031]],["name/88-8",[]],["text/88-8",[]],["component/88-8",[]],["title/88-9",[53,22.061,60,18.981,478,21.371]],["name/88-9",[]],["text/88-9",[]],["component/88-9",[]],["title/88-10",[585,19.149,850,32.5,1791,32.923]],["name/88-10",[]],["text/88-10",[]],["component/88-10",[]],["title/88",[1440,34.843]],["name/88",[1440,1.005]],["text/88",[1,1.589,4,1.233,7,3.861,11,1.426,12,1.236,14,1.569,17,0.978,18,1.202,20,0.374,21,1.886,22,0.529,24,1.035,27,0.444,28,0.365,31,0.744,32,0.444,34,2.341,38,1.333,39,0.764,40,1.972,41,1.46,44,0.374,48,2.791,49,2.178,51,0.745,52,1.636,53,2.354,54,1.254,60,1.733,61,1.02,64,1.652,65,0.733,66,1.571,67,0.622,68,0.67,69,0.838,74,1.843,75,2.648,76,0.554,77,3.033,78,1.848,80,0.931,82,0.401,83,0.996,85,0.423,88,0.481,103,1.005,120,0.768,123,0.917,124,0.418,128,0.938,140,0.452,147,0.539,155,0.727,158,1.39,159,1.571,166,0.833,169,0.954,179,0.745,181,1.045,185,0.426,189,1.312,193,0.65,195,0.421,196,0.962,197,0.625,202,0.539,204,0.987,208,2.364,209,2.769,214,0.89,218,0.389,239,0.592,242,0.849,251,0.529,261,2.602,262,0.65,264,1.179,266,0.996,270,0.438,273,0.554,278,1.642,280,0.484,282,0.599,283,0.529,287,2.001,288,0.409,289,1.299,291,0.592,295,0.47,300,0.549,301,0.481,305,0.529,314,0.566,317,1.233,321,0.554,322,2.192,356,1.28,360,0.614,365,1.014,372,1.179,382,2.489,388,2.019,391,0.549,402,0.423,413,1.306,417,0.481,420,0.878,422,0.484,429,0.833,440,0.416,441,1.39,447,0.539,458,0.515,473,0.745,474,0.578,477,1.309,478,2.675,485,0.745,514,1.549,516,2.401,517,0.566,518,1.233,524,1.034,525,0.56,528,1.162,529,0.539,554,1.015,557,0.524,558,2.239,561,0.534,571,0.544,574,0.64,575,0.606,576,1.214,583,0.481,585,2.675,586,2.453,587,1.633,589,1.214,600,0.712,606,2.335,624,0.727,626,0.91,631,1.117,634,0.697,636,1.63,637,0.91,656,0.585,657,0.614,691,1.056,744,1.79,745,2.442,760,1.301,764,0.684,765,1.883,771,1.178,789,0.549,808,0.987,809,0.622,813,0.474,832,0.745,850,2.356,854,1.591,860,1.277,865,1.195,883,0.661,896,1.045,899,1.179,900,0.745,948,0.661,952,2.204,963,1.214,987,1.056,996,1.655,1043,0.65,1049,1.757,1050,1.605,1066,0.614,1073,0.745,1096,1.39,1098,1.056,1099,0.622,1216,0.672,1248,0.661,1279,1.39,1378,1.091,1425,0.491,1440,1.426,1727,0.614,1737,0.511,1741,0.661,1785,0.684,1786,0.712,1787,1.795,1788,2.71,1790,1.909,1791,2.386,1792,0.684,1793,0.765,1794,0.787,1795,0.787,1796,0.765,1797,3.561,1798,0.787,1799,0.787,1800,0.787,1801,0.787,1802,0.787,1803,0.787,1804,0.787,1805,0.787,1806,0.787,1807,0.787,1808,1.734,1809,0.787,1810,0.787,1811,1.591,1812,2.453,1813,0.745,1814,0.65,1815,0.765,1816,0.787,1817,0.787,1818,0.684,1819,0.622,1820,0.684,1821,0.599,1822,0.787,1823,0.787,1824,1.469,1825,1.469,1827,0.787,1828,0.787,1829,0.787,1830,0.765,1831,0.787,1832,0.787,1837,1.633,1839,1.469,1840,0.787,1841,0.787,1842,0.787,1843,0.765,1844,0.787,1845,1.469,1846,1.83,1847,1.469,1848,1.469,1849,1.469,1850,0.787,1852,0.814,1853,0.814,1854,0.697,1855,1.518,1856,0.787,1857,0.814,1858,0.814,1859,1.518,1860,1.301,1861,1.301,1862,1.518,1863,1.518,1864,2.135,1865,1.214,1866,1.301,1867,1.427,1869,0.814,1870,1.091,1906,0.745,1998,0.765,2014,0.745,2016,0.631,2027,1.358,2043,0.745,2142,1.39,2143,0.787,2228,0.845,2229,1.75,2230,1.75,2231,1.75,2232,2.322,2233,0.938,2234,0.938,2235,0.938,2236,0.938,2237,0.938,2238,0.814,2239,0.938,2240,0.938,2241,1.75,2242,0.938,2243,0.938,2244,0.938,2245,0.765,2246,0.938,2247,0.938,2248,0.938,2249,1.577,2250,0.845,2251,0.845,2252,0.845,2253,0.845,2254,0.845,2255,0.938,2256,0.938,2257,0.885,2258,0.787,2259,0.885,2260,0.938,2261,0.885,2262,0.938,2263,0.938]],["component/88",[1,0.433]],["title/89-1",[183,38.526,202,34.652]],["name/89-1",[]],["text/89-1",[]],["component/89-1",[]],["title/89-2",[52,23.834,77,32.102]],["name/89-2",[]],["text/89-2",[]],["component/89-2",[]],["title/89-3",[12,20.469,39,26.336]],["name/89-3",[]],["text/89-3",[]],["component/89-3",[]],["title/89-4",[22,34.027,61,25.009]],["name/89-4",[]],["text/89-4",[]],["component/89-4",[]],["title/89-5",[12,17.053,19,26.54,60,18.981]],["name/89-5",[]],["text/89-5",[]],["component/89-5",[]],["title/89-6",[12,20.469,1871,44.028]],["name/89-6",[]],["text/89-6",[]],["component/89-6",[]],["title/89-7",[855,54.823]],["name/89-7",[]],["text/89-7",[]],["component/89-7",[]],["title/89",[478,32.075]],["name/89",[478,0.925]],["text/89",[7,4.34,11,4.154,12,1.276,15,0.758,16,1.942,19,0.819,21,1.42,39,1.211,49,2.328,52,0.613,60,2.561,61,3.111,69,1.802,77,2.435,88,1.421,89,0.768,123,0.813,129,1.673,181,4.05,189,0.659,195,0.696,208,1.78,218,1.15,274,0.979,285,1.942,288,0.677,366,1.623,424,2.497,440,0.688,477,0.825,481,1.132,487,1.059,516,0.899,562,1.076,571,1.608,572,3.686,576,3.649,585,2.004,596,0.773,606,0.725,626,1.442,762,1.132,763,4.264,808,2.121,819,1.132,821,1.076,862,3.281,980,0.778,986,0.956,1263,1.003,1267,3.038,1837,3.492,1860,3.913,1861,1.154,1865,1.924,1866,2.063,1868,1.203,1871,1.132,1872,1.302,1873,3.843,1874,2.329,1875,3.158,1876,1.302,1877,1.302,1878,1.302,1879,1.302,1880,2.329,1881,3.843,1882,1.593,1883,2.329,1884,2.329,1885,1.302,1886,1.302,1887,5.328,1888,5.328,1889,2.329,1890,1.302,1891,0.99,1892,1.302,1893,1.302,1894,2.329,1895,1.302,1896,1.302,1897,1.302,1898,1.302,1899,4.264,1900,5.694,1901,3.843,1902,5.694,1903,1.302,1904,1.302,1905,1.302,1906,3.637,1907,3.843,1908,3.843,1909,1.302,1910,1.302,1911,1.302,1912,3.843,1913,3.843,1914,1.302,1915,3.158,1916,1.302,1917,1.302,1918,3.158,1919,1.302,1920,1.302,1921,3.158,1922,1.302,1923,1.302,1924,3.158,1925,3.158,1926,1.302,1927,3.158,1928,4.906,1929,1.302,1930,1.302,1931,2.152,1932,2.204,1933,2.329,1934,2.329,1935,2.329,1936,2.329,1937,3.158,1938,2.329,1939,2.329,1940,2.329,1941,2.329,1942,1.302,1943,2.329,1944,1.203,1945,1.302,1946,2.329,1947,2.329,1948,1.302,1949,1.302,1950,1.302,1951,1.302,1952,1.302,1953,1.302,1954,1.302,1955,1.302,1956,1.302,1957,1.302,1958,1.302,1959,1.302,1960,1.177,1961,1.302,1962,1.302,1963,2.329]],["component/89",[1,0.433]],["title/90-1",[288,32.932]],["name/90-1",[]],["text/90-1",[]],["component/90-1",[]],["title/90",[476,33.662]],["name/90",[476,0.971]],["text/90",[1,2.13,10,3.809,11,4.151,12,2.429,13,3.604,14,1.685,15,2.407,16,2.544,17,2.755,18,3.497,19,3.78,20,2.855,21,1.861,31,2.095,34,2.151,36,3.038,44,1.965,58,3.317,59,3.317,60,1.861,61,2.043,64,2.855,66,2.715,68,3.227,80,2.622,84,4.191,95,3.271,108,2.456,124,2.199,138,2.262,140,2.376,163,4.232,164,3.005,169,2.686,171,3.147,185,2.236,186,2.289,187,2.731,188,2.83,251,4.038,285,2.544,360,3.227,440,2.186,514,2.473,525,4.275,551,3.186,553,3.317,554,2.032,567,3.073,610,3.147,656,3.073,774,3.473,878,3.186,899,2.361,1209,3.366,1785,5.224,1814,3.418,2070,3.915,2264,4.929,2265,4.651,2266,4.929,2267,4.651,2268,4.929,2269,4.929]],["component/90",[1,0.433]],["title/91-1",[64,30.084]],["name/91-1",[]],["text/91-1",[]],["component/91-1",[]],["title/91-2",[14,20.629,1050,31.377]],["name/91-2",[]],["text/91-2",[]],["component/91-2",[]],["title/91-3",[38,21.709,41,20.139,185,22.813]],["name/91-3",[]],["text/91-3",[]],["component/91-3",[]],["title/91",[1964,49.413]],["name/91",[1964,1.426]],["text/91",[1,1.684,7,3.882,13,0.962,14,0.97,15,0.777,17,0.474,24,0.357,27,1.592,31,1.207,32,0.753,34,0.982,36,0.522,38,2.879,39,0.37,41,0.638,44,1.132,48,0.394,49,1.044,60,0.32,61,0.351,62,0.941,64,2.568,65,0.942,66,1.276,68,1.635,75,0.739,78,0.71,81,0.89,82,0.362,83,1.281,89,0.419,103,1.745,110,0.906,117,0.941,120,0.699,130,0.607,138,1.033,154,1.162,166,2.221,185,3.585,186,0.739,187,0.882,188,0.914,189,0.957,191,0.451,197,1.795,200,0.487,202,1.293,226,0.394,240,0.867,242,0.772,243,0.414,251,0.478,258,0.555,259,0.941,261,0.727,264,0.406,266,0.906,270,1.327,280,0.437,287,1.348,288,0.695,290,0.466,296,0.548,297,0.793,299,1.642,301,0.816,303,0.597,304,2.299,305,0.478,310,1.162,312,2,317,0.597,321,0.941,329,0.758,354,1.162,356,0.933,357,1.104,365,0.491,372,0.406,373,0.428,374,0.548,381,0.579,388,0.47,391,0.496,406,0.579,411,0.496,417,0.434,418,1.162,420,0.425,422,0.437,429,0.758,440,0.376,445,1.812,446,1.162,447,0.487,452,2.695,458,0.466,474,0.522,475,1.087,486,0.57,493,0.81,516,0.491,546,0.419,553,0.57,554,0.928,556,0.981,558,1.217,579,0.482,581,0.906,585,0.323,593,0.57,596,0.793,604,0.506,605,1.708,606,1.052,616,0.96,619,0.597,626,1.476,630,0.411,636,4.171,637,3.224,639,1.227,657,1.474,659,0.522,758,1.534,759,1.153,771,1.071,784,0.597,788,1.016,789,0.932,806,0.555,808,0.478,812,0.739,813,0.804,831,0.528,842,0.96,854,0.548,857,0.618,868,0.548,869,0.466,877,0.993,890,0.875,895,0.548,899,1.612,909,0.522,912,0.96,918,0.588,920,1.029,966,0.981,978,0.496,995,0.618,1050,0.441,1059,0.607,1064,1.122,1092,1.915,1209,0.579,1234,1.141,1236,2.334,1238,0.607,1248,1.122,1250,2.071,1252,1.162,1263,0.548,1267,4.115,1364,0.588,1369,1.141,1378,1.403,1432,0.563,1442,0.618,1505,2,1567,0.607,1720,0.618,1727,0.555,1737,0.867,1756,0.579,1774,1.122,1775,0.506,1782,0.607,1791,1.042,1808,2,1811,0.548,1814,1.104,1819,2.234,1820,0.618,1821,2.452,1870,0.528,1882,0.487,1891,0.541,1965,0.712,1966,0.712,1967,0.691,1970,2.383,1971,2.383,1972,2.383,1973,1.337,1974,2.383,1975,2.034,1976,3.992,1979,2.383,1980,2.255,1981,2.383,1982,1.235,1983,0.712,1984,1.337,1985,1.265,1986,1.298,1987,1.337,1989,0.712,2001,0.712,2002,0.712,2003,0.712,2004,1.89,2005,1.89,2006,0.673,2007,0.712,2008,0.712,2009,1.298,2010,0.712,2011,0.712,2012,0.712,2013,0.712,2014,0.673,2015,0.691,2016,1.071,2017,1.968,2018,1.586,2019,0.618,2020,0.618,2021,0.618,2022,1.208,2023,0.607,2024,1.337,2025,0.712,2026,0.643,2027,1.235,2028,0.643,2029,1.208,2030,0.712,2031,1.337,2032,1.337,2033,4.523,2034,4.218,2035,2.383,2036,1.337,2037,1.337,2038,1.89,2039,1.337,2040,1.265,2041,0.712,2042,0.643,2043,0.673,2044,0.691,2045,0.588,2046,0.673,2047,0.618,2048,0.712,2049,0.712,2050,0.712,2051,1.337,2052,1.337,2053,0.63,2054,0.712,2055,0.712,2056,1.337,2057,1.337,2058,0.712,2059,0.712,2060,0.691,2061,0.712,2062,0.712,2063,0.712,2064,2.383,2065,0.712,2066,1.337,2067,0.712,2068,1.162,2069,1.298,2070,0.673,2071,0.712,2072,0.712,2073,0.712,2078,0.712,2079,0.712,2080,0.618,2081,0.618,2082,0.618,2083,0.618,2084,0.712,2085,0.712,2086,0.712,2087,0.712,2088,0.657,2089,0.712,2090,0.643,2091,0.712,2092,0.555,2093,0.618,2094,0.712,2095,0.657,2096,0.657,2097,0.673,2098,0.712,2099,0.712,2100,0.712,2101,0.712,2102,0.712,2103,0.712,2104,1.337,2105,1.337,2106,4.986,2107,4.986,2108,1.337,2111,4.495,2112,1.337,2113,1.337,2114,3.917,2115,1.235,2116,3.225,2117,1.337,2118,1.337,2119,0.691,2120,1.087,2121,0.673,2122,0.712,2123,0.691,2124,0.712,2125,0.712,2126,0.712,2127,0.691,2128,0.712,2129,0.712,2130,0.673,2131,0.712,2132,1.337,2270,2.839,2271,2.839,2272,1.592,2273,0.8]],["component/91",[1,0.433]],["title/92-1",[14,17.187,1882,28.87,2092,32.923]],["name/92-1",[]],["text/92-1",[]],["component/92-1",[]],["title/92-2",[585,19.149,1425,26.338,2135,33.368]],["name/92-2",[]],["text/92-2",[]],["component/92-2",[]],["title/92-3",[49,15.596,1737,27.396,1775,30.017]],["name/92-3",[]],["text/92-3",[]],["component/92-3",[]],["title/92-4",[48,20.014,810,28.596,909,26.562,2159,31.436]],["name/92-4",[]],["text/92-4",[]],["component/92-4",[]],["title/92",[2161,50.081]],["name/92",[2161,1.445]],["text/92",[1,1.714,7,2.823,12,0.787,14,1.756,18,1.924,21,1.487,24,1.658,28,2.359,38,1.001,41,1.578,44,1.571,48,3.152,49,1.593,52,1.556,60,1.487,61,0.961,64,1.571,65,1.649,66,1.494,76,1.371,84,1.357,85,1.046,88,1.188,89,1.148,90,1.499,93,1.264,103,0.947,108,1.155,117,2.329,185,2.331,189,0.986,196,1.274,197,0.828,218,0.961,226,1.077,259,1.371,263,1.519,270,1.841,288,1.719,294,1.274,297,1.155,300,1.357,301,2.019,311,1.14,315,1.332,351,1.43,354,2.033,365,1.344,371,1.662,372,1.887,377,1.319,388,1.285,391,1.357,417,1.188,429,1.104,440,1.748,445,2.515,447,1.332,448,3.409,515,1.234,524,1.371,549,1.43,557,1.296,558,1.253,569,1.463,581,1.319,585,0.883,606,2.4,626,2.671,630,1.125,636,4.557,637,3.528,649,1.634,652,1.48,659,1.43,691,1.399,744,2.284,745,2.096,759,2.632,765,1.414,774,1.634,788,1.48,789,3.971,808,1.308,809,1.539,810,1.539,812,1.83,813,1.99,824,3.681,844,1.357,868,5.086,869,1.274,877,1.446,886,1.692,899,1.111,909,1.43,978,1.357,1017,1.692,1041,1.539,1092,2.242,1098,1.399,1166,1.692,1425,1.215,1430,1.48,1440,1.071,1737,1.264,1775,1.385,1792,1.692,1818,1.692,1819,1.539,1821,3.279,1870,2.456,1882,1.332,1891,1.48,1899,3.748,1964,1.519,2016,1.561,2017,2.732,2018,3.619,2019,1.692,2020,1.692,2021,1.692,2023,1.662,2045,2.732,2047,2.874,2068,1.692,2080,1.692,2081,1.692,2082,1.692,2083,1.692,2092,1.519,2093,1.692,2120,1.584,2135,4.896,2159,1.692,2162,3.213,2163,1.947,2164,1.947,2165,1.947,2166,1.76,2167,1.947,2168,1.891,2169,1.947,2170,1.947,2171,1.947,2172,1.947,2173,1.947,2174,1.947,2175,1.799,2176,1.947,2177,1.947,2178,1.891,2179,1.947,2180,1.947,2181,1.947,2182,1.947,2183,1.947,2184,1.947,2185,1.947,2186,1.891,2187,1.947,2188,1.799,2189,1.947,2190,1.842,2191,1.947,2192,1.891,2193,1.947,2194,1.947,2195,1.947,2196,1.947,2197,1.947,2198,1.947]],["component/92",[1,0.433]],["title/93-1",[0,63.349]],["name/93-1",[]],["text/93-1",[]],["component/93-1",[]],["title/93",[1,19.056]],["name/93",[2,1.51]],["text/93",[1,1.72,3,2.918,4,2.449,5,2.918,6,2.918,7,1.247,8,2.918,9,2.918,10,1.849,11,2.014,12,2.858,13,2.347,14,1.878,15,3.325,16,3.515,17,3.07,18,3.325,19,2.899,20,1.386,21,1.312,22,1.96,23,2.834,24,2.311,25,2.584,26,2.918,27,1.644,28,1.354,29,2.696,30,2.41,31,1.477,32,2.598,33,1.942,34,1.517,35,2.307,36,2.142,37,2.536,38,1.501,39,1.517,40,2.614,41,2.728,42,2.918,43,1.821,44,2.19,45,2.075,46,2.41,47,1.894,48,3.163,49,1.078,50,2.918,51,2.761,52,1.373,53,2.41,54,2.491,55,2.373,56,3.262,57,2.856,58,4.583,59,2.339,60,1.312,61,1.44,62,2.054,63,1.942,64,1.386,65,2.299,66,1.318,67,2.307,68,1.33,69,1.665,70,2.41,71,2.761,72,2.918,73,2.307,74,2.075,75,1.614,76,2.054,77,1.849,78,1.55,79,2.918,80,1.849,81,1.942,82,2.347,83,1.977,84,2.034,85,1.568,86,2.918,87,2.449,88,1.781,89,1.72,90,4.402,91,2.536,92,2.918,93,3.711,94,1.878,95,2.307,96,2.918,97,2.918,98,1.624,99,2.918,100,2.536,101,2.536,102,2.491,103,1.419,104,2.918,105,2.918,106,2.918,107,2.41,108,1.732,109,2.584,110,1.977,111,2.918,112,2.918,113,2.584,114,2.761,115,2.918,116,2.834]],["component/93",[1,0.433]],["title/94-1",[476,33.662]],["name/94-1",[]],["text/94-1",[]],["component/94-1",[]],["title/94",[585,28.74]],["name/94",[2,1.51]],["text/94",[1,2.383,12,2.503,14,2.523,20,2.942,32,4.464,64,2.942,68,3.61,81,4.124,141,4.549,242,3.58,289,3.895,375,4.161,514,3.702,554,3.043,583,3.781,585,2.811,606,3.448,858,5.6,948,5.2,980,3.702,1440,3.407,2258,6.195,2274,7.38,2275,6.651,2276,8.014,2277,8.014]],["component/94",[1,0.433]],["title/95-1",[961,59.946]],["name/95-1",[]],["text/95-1",[]],["component/95-1",[]],["title/95-2",[554,24.885,925,44.874]],["name/95-2",[]],["text/95-2",[]],["component/95-2",[]],["title/95-3",[125,27.174,773,34.335,2278,45.316]],["name/95-3",[]],["text/95-3",[]],["component/95-3",[]],["title/95-4",[27,20.382,78,19.221,773,29.425,2278,38.835]],["name/95-4",[]],["text/95-4",[]],["component/95-4",[]],["title/95-5",[1440,34.843]],["name/95-5",[]],["text/95-5",[]],["component/95-5",[]],["title/95-6",[27,17.832,78,16.816,266,21.448,2190,29.947,2278,33.977]],["name/95-6",[]],["text/95-6",[]],["component/95-6",[]],["title/95-7",[52,23.834,1440,27.865]],["name/95-7",[]],["text/95-7",[]],["component/95-7",[]],["title/95-8",[1364,52.325]],["name/95-8",[]],["text/95-8",[]],["component/95-8",[]],["title/95-9",[420,37.856]],["name/95-9",[]],["text/95-9",[]],["component/95-9",[]],["title/95-10",[2279,75.47]],["name/95-10",[]],["text/95-10",[]],["component/95-10",[]],["title/95-11",[242,24.393,870,36.681,2161,33.368]],["name/95-11",[]],["text/95-11",[]],["component/95-11",[]],["title/95",[1440,23.215,2275,45.316,2280,45.316]],["name/95",[2275,1.962]],["text/95",[7,3.821,18,0.951,27,1.604,28,1.32,32,0.921,33,1.088,34,1.965,41,1.358,44,2.147,49,1.052,52,1.339,56,1.624,57,1.012,60,0.735,64,0.776,66,0.738,67,1.292,68,1.722,73,2.25,75,1.575,78,2.008,81,1.088,82,1.448,84,2.635,103,1.838,114,1.547,125,1.052,155,1.51,164,1.187,166,0.927,169,1.061,183,2.164,185,0.883,189,0.828,212,2.164,218,0.807,242,0.945,261,0.889,266,3.064,270,0.91,276,1.929,293,1.395,305,1.098,312,1.372,315,2.585,329,0.927,377,1.929,400,1.2,420,1.701,440,0.864,514,1.701,515,1.803,538,2.164,549,1.2,554,0.803,557,1.088,558,1.052,585,1.291,596,0.97,626,1.012,630,0.945,631,2.874,649,2.389,653,2.693,655,1.228,656,1.214,744,1.129,771,1.31,773,4.575,813,0.984,870,2.473,876,1.372,898,1.395,899,0.933,904,1.588,908,1.02,925,1.448,948,1.372,952,1.036,961,1.547,980,2.258,1121,1.275,1364,4.645,1381,1.547,1435,1.31,1440,3.093,1453,1.421,1505,1.372,1725,1.588,1789,1.588,1797,1.51,1808,1.372,1811,1.259,1812,1.547,1837,1.292,1846,1.448,1891,2.164,1931,1.51,1932,1.547,1975,1.395,1980,1.547,2033,1.421,2090,1.478,2142,1.547,2161,1.292,2175,1.51,2190,4.849,2245,2.764,2249,1.755,2250,3.055,2251,1.755,2252,1.755,2253,1.755,2254,1.755,2274,1.947,2275,8.191,2278,7.76,2279,7.631,2280,3.055,2281,2.115,2282,2.115,2283,2.115,2284,2.115,2285,2.115,2286,2.115,2287,2.115,2288,2.115,2289,2.115,2290,2.115,2291,2.115,2292,2.115,2293,2.115,2294,2.115,2295,2.115,2296,2.115,2297,2.115,2298,2.115,2299,2.115,2300,2.115,2301,2.115,2302,2.115,2303,2.115,2304,2.115,2305,2.115,2306,2.115,2307,2.115,2308,2.115,2309,2.115,2310,2.115,2311,2.115,2312,2.115,2313,2.115,2314,2.115,2315,2.115,2316,2.115,2317,2.115,2318,2.115,2319,2.115,2320,2.115,2321,2.115,2322,2.115,2323,2.115,2324,2.115,2325,2.115,2326,2.115,2327,2.115,2328,2.115,2329,3.681,2330,3.681,2331,2.115,2332,2.115,2333,2.115,2334,2.115,2335,2.115,2336,1.947,2337,1.947,2338,1.947,2339,1.837,2340,1.689,2341,2.115,2342,2.115,2343,2.115,2344,2.115,2345,2.115,2346,2.115,2347,2.115,2348,2.115,2349,2.115,2350,2.115,2351,2.115,2352,2.115,2353,1.755,2354,1.947,2355,2.115,2356,2.115,2357,2.115,2358,2.115,2359,2.115,2360,2.115,2361,2.115,2362,1.755,2363,4.889,2364,2.115,2365,2.115,2366,2.115,2367,2.115,2368,2.115,2369,2.115,2370,2.115]],["component/95",[1,0.433]],["title/96-1",[56,20.639,579,24.515,583,22.078,980,21.615]],["name/96-1",[]],["text/96-1",[]],["component/96-1",[]],["title/96-2",[2133,63.349]],["name/96-2",[]],["text/96-2",[]],["component/96-2",[]],["title/96-3",[22,21.256,56,18.057,583,19.316,2134,30.74,2135,25.018]],["name/96-3",[]],["text/96-3",[]],["component/96-3",[]],["title/96-4",[56,20.639,63,24.082,859,31.436,2136,38.835]],["name/96-4",[]],["text/96-4",[]],["component/96-4",[]],["title/96-5",[1116,37.201,1440,27.865]],["name/96-5",[]],["text/96-5",[]],["component/96-5",[]],["title/96",[583,38.666]],["name/96",[583,1.116]],["text/96",[1,0.926,7,3.652,14,1.253,21,1.384,24,1.542,49,1.137,52,1.448,56,4.586,68,2.191,89,1.814,131,2.844,161,4.298,214,1.865,261,2.614,264,1.756,270,1.713,280,1.892,283,2.067,288,3.076,291,3.613,309,1.879,314,2.212,320,2.313,329,1.745,356,1.519,358,2.37,373,1.852,382,2.504,440,3.127,460,2.341,509,2.235,516,2.125,558,1.981,579,2.086,580,3.571,583,5.217,585,2.685,606,2.677,619,2.583,630,2.779,744,3.32,745,1.95,845,2.542,859,2.675,875,3.751,878,2.37,899,1.756,920,2.37,925,2.726,980,2.873,1116,2.26,1165,4.347,1324,2.844,1326,2.844,1440,1.693,1453,2.675,1737,3.121,1811,2.37,1837,2.433,1846,2.726,1870,2.286,1882,2.105,1944,5.468,1975,2.627,2033,2.675,2120,3.912,2133,5.918,2134,2.99,2135,2.433,2137,3.459,2138,3.304,2139,5.163,2140,3.304,2141,3.304,2142,2.912,2143,3.078,2144,3.304,2145,3.304,2146,3.304,2147,3.304,2148,3.304,2149,3.459,2150,3.304,2151,3.459,2152,3.459,2153,3.304,2154,3.459,2155,3.459,2156,5.405,2157,3.181,2158,3.459]],["component/96",[1,0.433]],["title/97-1",[117,44.6]],["name/97-1",[]],["text/97-1",[]],["component/97-1",[]],["title/97-2",[118,63.349]],["name/97-2",[]],["text/97-2",[]],["component/97-2",[]],["title/97-3",[119,50.661,120,26.479]],["name/97-3",[]],["text/97-3",[]],["component/97-3",[]],["title/97-4",[121,41.211,122,31.377]],["name/97-4",[]],["text/97-4",[]],["component/97-4",[]],["title/97-5",[13,25.784,121,41.211]],["name/97-5",[]],["text/97-5",[]],["component/97-5",[]],["title/97-6",[123,39.531]],["name/97-6",[]],["text/97-6",[]],["component/97-6",[]],["title/97",[124,26.92,125,32.616]],["name/97",[124,0.544,125,0.66]],["text/97",[1,1.323,13,1.017,14,2.355,16,2.079,18,1.968,21,2.326,28,1.569,31,1.012,34,1.039,38,2.66,39,1.039,40,1.133,41,1.614,43,1.247,49,2.472,56,1.14,57,1.238,61,0.987,64,1.606,66,0.903,68,0.911,69,1.93,80,1.267,82,1.017,83,1.355,85,1.074,88,2.064,94,1.287,103,2.516,107,1.651,108,1.186,110,1.355,117,2.381,120,1.045,122,2.723,123,3.228,124,2.748,125,1.287,126,3.382,127,1.999,128,2.808,129,1.436,130,1.706,131,1.847,132,1.999,133,2.939,134,1.559,135,1.999,136,5.027,137,3.382,138,1.849,139,1.942,140,1.148,141,1.468,142,1.626,143,1.678,144,2.839,145,1.999,146,1.891,147,2.313,148,1.002,149,1.737,150,1.484,151,1.737,152,1.999,153,1.999,154,1.737,155,1.847,156,1.999,157,1.999,158,3.201,159,1.52,160,3.285,161,3.193,162,3.571,163,2.381,164,1.452,165,3.382,166,1.133,167,3.641,168,1.999,169,1.297,170,4.397,171,1.52,172,1.737,173,1.942,174,1.999,175,1.891,176,1.999,177,1.942,178,1.999,179,1.891,180,1.999,181,1.422,182,2.712,183,2.572,184,1.999,185,1.828,186,1.106,187,1.319,188,1.367,189,1.713,190,1.999,191,2.143,192,2.751,193,3.632,194,1.737,195,1.068,196,1.308,197,1.871,198,1.737,199,1.678,200,1.367,201,1.891,202,1.367,203,2.723,204,1.343,205,1.999,206,1.452,207,1.436,208,1.126,209,1.229,210,1.891,211,1.942,212,2.572,213,1.999,214,1.211,215,1.58,216,1.999,217,1.068,218,0.987,219,1.999,220,1.58,221,1.58,222,1.267,223,1.308,224,1.999,225,1.999,226,1.106,227,1.942,228,1.999,229,1.737,230,2.794,231,1.999,232,1.999,233,1.602,234,1.737,235,1.737,236,1.737,237,1.737,238,1.737,239,1.502,240,1.297,241,1.626,242,1.155,243,1.163,244,2.146,245,2.066,246,1.807,247,2.066,248,2.146,249,2.674,250,1.807,251,1.343,252,1.999,253,1.999,254,1.999,255,1.999,256,1.999,257,1.367,258,1.559,259,1.407,260,1.999,261,1.087,262,1.651,263,1.559,264,1.14,265,1.999]],["component/97",[1,0.433]],["title/98-1",[38,21.709,185,22.813,266,28.606]],["name/98-1",[]],["text/98-1",[]],["component/98-1",[]],["title/98-2",[267,31.647,268,30.74,269,31.647,270,17.616,271,29.242]],["name/98-2",[]],["text/98-2",[]],["component/98-2",[]],["title/98-3",[34,21.942,49,15.596,120,22.061]],["name/98-3",[]],["text/98-3",[]],["component/98-3",[]],["title/98-4",[85,22.683,120,22.061,203,26.142]],["name/98-4",[]],["text/98-4",[]],["component/98-4",[]],["title/98-5",[120,26.479,272,43.247]],["name/98-5",[]],["text/98-5",[]],["component/98-5",[]],["title/98-6",[120,26.479,273,35.667]],["name/98-6",[]],["text/98-6",[]],["component/98-6",[]],["title/98-7",[274,38.065,275,39.517]],["name/98-7",[]],["text/98-7",[]],["component/98-7",[]],["title/98-8",[276,42.934]],["name/98-8",[]],["text/98-8",[]],["component/98-8",[]],["title/98",[64,24.059,207,36.405]],["name/98",[120,0.536,273,0.721]],["text/98",[1,0.804,7,1.838,12,0.43,13,0.541,14,0.433,15,0.619,20,0.921,21,1.934,24,0.972,27,0.599,28,0.9,30,0.878,31,1.353,32,1.093,33,0.708,34,1.008,36,1.424,37,0.924,38,1.696,40,1.1,41,0.507,43,0.664,44,0.505,45,0.756,47,1.735,49,1.416,52,1.258,55,0.865,57,0.659,62,0.749,63,2.195,64,2.237,65,1.911,66,2.685,67,0.841,68,2.709,69,1.107,75,1.479,85,1.772,89,1.143,93,0.69,94,0.685,103,2.092,108,0.631,110,0.721,120,3.627,134,0.83,138,1.06,140,2.469,144,0.893,161,0.772,163,2.321,166,1.516,172,0.924,181,1.901,185,4.112,188,1.327,189,0.982,197,1.138,200,0.727,202,0.727,203,4.394,207,0.764,208,1.093,209,0.654,214,0.645,217,0.568,227,1.535,240,0.69,242,0.615,243,0.619,246,0.961,251,0.714,261,0.578,266,2.914,273,2.699,277,3.118,278,1.229,279,1.656,280,3.655,281,3.118,282,0.809,283,1.303,284,0.865,285,0.654,286,1.597,287,1.275,288,1.008,289,0.669,290,1.75,291,2.88,292,2.282,293,0.908,294,1.75,295,1.159,296,2.058,297,0.631,298,1.792,299,0.924,300,1.352,301,0.649,302,0.924,303,1.628,304,2.175,305,1.303,306,1.064,307,0.924,308,1.064,309,0.649,310,0.924,311,1.565,312,3.609,313,0.908,314,0.764,315,1.327,316,1.006,317,0.893,318,1.064,319,1.555,320,1.457,321,0.749,322,1.397,323,2.323,324,1.064,325,0.924,326,1.409,327,2.323,328,1.064,329,1.516,330,1.064,331,1.064,332,1.064,333,1.064,334,1.064,335,1.064,336,1.064,337,1.064,338,1.064,339,1.064,340,1.064,341,1.064,342,1.064,343,1.064,344,1.064,345,1.064,346,1.064,347,1.064,348,1.064,349,1.064,350,0.908,351,0.781,352,1.685,353,0.924,354,1.192,355,1.064,356,0.525,357,1.602,358,1.493,359,1.493,360,0.83,361,1.939,362,2.865,363,0.961,364,1.175,365,1.339,366,1.352,367,0.908,368,1.269,369,0.799,370,1.064,371,0.908,372,1.107,373,1.167,374,0.819,375,2.214,376,1.259,377,1.314,378,0.908,379,2.865,380,1.064,381,4.126,382,1.578,383,1.064,384,1.064,385,2.058,386,0.83,387,1.939,388,1.28,389,1.064,390,0.781,391,0.741,392,0.69,393,3.834,394,1.064,395,1.064,396,1.555,397,1.064,398,0.841,399,1.064,400,0.781,401,1.939,402,1.772,403,1.939,404,1.064,405,2.673,406,1.578,407,0.924,408,0.764,409,0.772,410,1.628,411,0.741,412,1.064,413,1.347,414,1.006,415,1.493,416,1.939,417,0.649,418,0.924,419,1.409,420,1.159,421,1.064,422,0.654,423,0.708,424,0.841,425,0.924,426,1.064,427,0.983,428,0.924,429,0.603,430,1.064,431,0.819,432,1.064,433,0.961,434,1.064,435,1.064,436,0.908,437,1.064,438,1.064,439,0.636,440,0.562,441,1.006,442,1.064,443,1.064,444,1.064,445,0.809,446,0.924,447,0.727,448,0.841,449,1.064,450,1.064,451,1.033,452,0.799,453,1.064,454,0.924,455,1.064,456,1.064,457,1.628,458,0.696,459,1.064,460,0.809,461,0.924,462,1.064,463,1.064,464,1.064,465,0.924,466,1.064,467,1.064,468,1.064,469,0.853,470,0.961,471,1.064,472,1.064,473,1.006,474,0.781,475,0.865]],["component/98",[1,0.433]],["title/99-1",[476,33.662]],["name/99-1",[]],["text/99-1",[]],["component/99-1",[]],["title/99-2",[477,40.142]],["name/99-2",[]],["text/99-2",[]],["component/99-2",[]],["title/99-3",[124,33.662]],["name/99-3",[]],["text/99-3",[]],["component/99-3",[]],["title/99",[478,32.075]],["name/99",[478,0.925]],["text/99",[7,0.793,12,2.607,14,2.458,15,1.079,20,0.881,21,0.834,24,0.93,28,2.286,31,0.939,32,2.776,38,0.954,41,1.515,44,1.508,47,1.204,49,1.82,52,1.494,53,3.155,60,2.49,61,3.185,68,1.447,69,1.811,73,1.467,77,2.637,78,0.986,82,0.944,85,0.997,94,1.195,103,1.544,124,2.618,125,1.195,133,1.613,136,2.759,138,1.015,141,1.363,142,1.509,148,1.591,161,2.306,162,2.873,166,1.052,167,1.306,191,2.012,198,1.613,217,3.226,218,0.916,222,2.012,223,1.214,239,1.394,242,1.072,243,1.079,278,1.176,280,1.141,284,1.509,285,2.558,286,2.487,287,0.885,294,1.214,307,1.613,311,1.087,322,0.97,326,2.306,329,1.052,356,2.054,359,1.429,364,1.124,366,1.294,369,3.126,372,2.374,376,1.204,385,1.429,386,1.447,388,1.225,396,1.079,408,1.333,413,0.935,419,1.348,420,1.109,422,1.141,423,1.235,431,2.445,439,1.109,457,1.557,458,2.078,477,4.501,478,2.494,479,1.856,480,1.856,481,1.613,482,1.394,483,1.856,484,1.856,485,1.756,486,1.488,487,1.509,488,2.665,489,3.175,490,1.856,491,1.269,492,3.839,493,1.124,494,2.759,495,1.856,496,1.856,497,1.124,498,1.856,499,1.856,500,3.761,501,1.363,502,1.677,503,2.934,504,1.856,505,1.333,506,1.613,507,3.761,508,1.856,509,1.348,510,4.007,511,1.269,512,3.616,513,1.981,514,1.109,515,1.176,516,2.192,517,1.333,518,1.557,519,1.856,520,1.584,521,1.677,522,1.802,523,1.856,524,1.306,525,1.32,526,1.856,527,2.759,528,2.51,529,1.269,530,1.613,531,1.856,532,1.856,533,3.084,534,4.161,535,1.802,536,1.856,537,1.856,538,3.164,539,1.856,540,1.856,541,1.856,542,1.856,543,1.856,544,1.856,545,1.856,546,1.094,547,1.856,548,1.584,549,1.363,550,1.856,551,1.429,552,1.856,553,1.488,554,0.911,555,1.715,556,1.363,557,1.235,558,1.195,559,1.856,560,1.856,561,1.258,562,1.533,563,1.856,564,1.856,565,1.856]],["component/99",[1,0.433]],["title/100-1",[38,26.057,39,26.336]],["name/100-1",[]],["text/100-1",[]],["component/100-1",[]],["title/100-2",[38,26.057,61,25.009]],["name/100-2",[]],["text/100-2",[]],["component/100-2",[]],["title/100-3",[38,21.709,138,23.079,185,22.813]],["name/100-3",[]],["text/100-3",[]],["component/100-3",[]],["title/100-4",[41,15.1,120,16.541,207,22.741,273,22.28,402,17.007]],["name/100-4",[]],["text/100-4",[]],["component/100-4",[]],["title/100-5",[66,22.883,566,54.392]],["name/100-5",[]],["text/100-5",[]],["component/100-5",[]],["title/100-6",[12,25.595]],["name/100-6",[]],["text/100-6",[]],["component/100-6",[]],["title/100",[288,32.932]],["name/100",[288,0.95]],["text/100",[1,1.19,12,1.903,13,0.883,14,0.707,15,1.01,17,1.156,18,1.01,20,1.424,21,2.392,24,1.502,31,1.518,32,0.978,34,2.057,36,2.201,38,2.993,39,0.902,40,0.984,41,1.888,43,1.871,44,1.879,47,1.127,49,2.15,52,0.817,53,2.78,55,1.412,56,1.711,57,1.075,60,1.348,61,1.953,62,1.222,64,0.824,66,2.817,68,2.424,69,0.99,75,0.96,77,1.9,78,1.593,81,1.156,82,0.883,85,0.933,87,1.457,88,1.059,103,3.207,109,1.538,110,1.176,120,0.907,121,1.412,124,1.593,138,1.639,140,0.997,143,1.457,147,1.187,150,1.289,162,1.199,163,1.222,166,0.984,167,1.222,182,1.392,185,3.564,186,1.659,187,1.979,189,2.004,191,1.1,192,1.412,195,2.842,196,1.136,199,1.457,201,2.837,204,2.014,207,2.154,208,2.23,218,0.857,222,1.1,230,1.434,233,1.392,250,1.569,266,1.176,270,0.966,275,1.354,277,2.439,280,3.577,281,1.412,284,1.412,285,1.067,288,1.559,300,1.21,304,1.412,305,2.014,309,1.059,319,3.776,329,1.7,358,1.337,360,2.339,364,1.052,365,1.199,366,1.21,369,1.304,372,0.99,373,1.045,378,1.482,396,1.01,400,2.201,402,0.933,406,1.412,417,1.83,420,1.792,422,1.067,423,1.156,429,0.984,440,0.917,452,2.253,460,1.32,477,2.508,478,2.385,482,1.304,486,1.392,487,1.412,492,0.938,493,1.052,500,1.569,502,1.569,507,1.569,510,1.412,521,1.569,529,1.187,554,1.473,561,1.176,567,1.289,568,1.864,569,1.304,570,1.864,571,2.732,572,1.304,573,1.864,574,1.412,575,1.337,576,1.434,577,1.864,578,1.864,579,1.176,580,1.289,581,1.176,582,3.219,583,1.059,584,1.864,585,1.795,586,2.837,587,2.37,588,1.794,589,1.434,590,3.219,591,1.569,592,1.864,593,1.392,594,3.219,595,1.794,596,1.779,597,1.864,598,1.482,599,1.686,600,1.569,601,1.864,602,1.604,603,1.864,604,1.234,605,1.569,606,0.966,607,1.864,608,1.864,609,1.864,610,1.32,611,1.538,612,1.864,613,1.794,614,1.864,615,1.864,616,1.247,617,1.794,618,1.569,619,1.457,620,1.864,621,1.864,622,1.569,623,1.372,624,1.604,625,1.794,626,1.075,627,1.392,628,1.412,629,1.864,630,1.003,631,1.32,632,1.686,633,1.457,634,1.538,635,1.864]],["component/100",[1,0.433]],["title/101-1",[7,13.523,440,16.723,623,25.018,636,19.899,637,19.601]],["name/101-1",[]],["text/101-1",[]],["component/101-1",[]],["title/101-2",[1,15.239,638,33.729]],["name/101-2",[]],["text/101-2",[]],["component/101-2",[]],["title/101-3",[478,25.651,639,32.883]],["name/101-3",[]],["text/101-3",[]],["component/101-3",[]],["title/101-4",[195,19.329,196,23.674,572,27.178,639,23.478]],["name/101-4",[]],["text/101-4",[]],["component/101-4",[]],["title/101-5",[1,12.696,440,22.304,640,42.208]],["name/101-5",[]],["text/101-5",[]],["component/101-5",[]],["title/101-6",[1,15.239,641,44.028]],["name/101-6",[]],["text/101-6",[]],["component/101-6",[]],["title/101",[561,28.606,616,30.33,642,36.681]],["name/101",[643,1.828]],["text/101",[1,0.637,7,4.119,10,0.742,13,1.077,21,0.952,27,1.193,28,1.344,32,0.66,34,1.1,40,0.664,44,0.556,49,0.433,52,0.551,63,2.363,66,0.529,68,0.534,69,0.668,74,2.059,75,1.602,83,0.794,85,0.629,93,0.76,103,0.57,110,0.794,123,0.731,128,0.748,149,1.018,166,2.012,167,1.49,169,0.76,194,1.018,195,3.194,196,2.687,199,1.776,204,0.786,240,0.76,243,0.681,251,0.786,257,0.801,261,0.637,270,0.652,274,0.88,276,0.794,288,0.609,309,0.715,315,0.801,321,0.824,329,0.664,354,0.72,356,0.578,362,1.839,417,0.715,420,1.265,425,1.018,429,0.664,440,3.295,454,1.018,458,1.385,477,3.605,478,2.078,497,1.282,509,0.85,525,0.833,538,1.609,551,0.902,554,0.575,561,2.405,572,1.59,574,0.953,581,0.794,596,1.256,618,1.058,623,0.926,631,1.609,636,1.821,637,0.725,638,1.409,639,4.047,641,2.516,642,7.859,644,1.137,645,0.86,646,1.108,647,1.171,648,1.108,649,0.983,650,1.171,651,1.108,652,0.89,653,1.108,654,1.171,655,1.59,656,0.87,657,0.913,658,1.839,659,1.554,660,1.171,661,3.549,662,1.171,663,3.549,664,2.896,665,2.116,666,1.171,667,1.171,668,1.839,669,2.516,670,3.358,671,1.171,672,1.171,673,1.171,674,1.171,675,1.171,676,1.257,677,1.171,678,2.116,679,1.171,680,2.116,681,1.171,682,1.171,683,1.171,684,1.137,685,1.171,686,1.171,687,1.171,688,2.896,689,1.171,690,1.171,691,0.841,692,1.171,693,1.171,694,1.171,695,1.171,696,1.171,697,1.171,698,1.171,699,1.171,700,1.171,701,2.003,702,0.926,703,1.316,704,1.171,705,1.171,706,2.056,707,1.171,708,2.056,709,1.651,710,1.171,711,1.171,712,1.171,713,1.171,714,1.171,715,5.688,716,1.171,717,1.171,718,1.171,719,1.171,720,1.171,721,1.171,722,1.171,723,1.171,724,1.171,725,1.171,726,1.171,727,1.171,728,1.171,729,1.171,730,1.171,731,1.171,732,1.171,733,1.171,734,1.171,735,1.171,736,1.171,737,1.171,738,1.171,739,1.171,740,1.171,741,1.171,742,1.171,743,1.171,744,1.999,745,0.742,746,1.171,747,5.419,748,1.171,749,1.171,750,2.896,751,1.171,752,2.116,753,1.171,754,2.116,755,1.171,756,1.171,757,1.171,758,0.754,759,0.715,760,1.875,761,1.171,762,1.018,763,1.018,764,1.018,765,0.85,766,1.137,767,2.896,768,2.116,769,1.171,770,1.171,771,0.939,772,0.983,773,0.953,774,0.983,775,1.171,776,2.896,777,1.171,778,1.171,779,1.171,780,1.171,781,1.171,782,1.171,783,1.058,784,0.983,785,1.171,786,1.171,787,4.583,788,0.89,789,0.816,790,1.171,791,1.171,792,1.171,793,1.171,794,1.171,795,1.171,796,1.171,797,1.171,798,1.171,799,1.171,800,1.171,801,1.171,802,1.171,803,1.171,804,1.171,805,1.171,806,0.913,807,1.171,808,2.384,809,0.926,810,0.926,811,1.018,812,1.171,813,1.273,814,1.018,815,1.018]],["component/101",[1,0.433]],["title/102-1",[195,27.072,571,34.979]],["name/102-1",[]],["text/102-1",[]],["component/102-1",[]],["title/102-2",[20,24.059,195,27.072]],["name/102-2",[]],["text/102-2",[]],["component/102-2",[]],["title/102-3",[195,27.072,571,34.979]],["name/102-3",[]],["text/102-3",[]],["component/102-3",[]],["title/102-4",[478,32.075]],["name/102-4",[]],["text/102-4",[]],["component/102-4",[]],["title/102-5",[276,42.934]],["name/102-5",[]],["text/102-5",[]],["component/102-5",[]],["title/102",[195,27.072,580,37.624]],["name/102",[195,0.977]],["text/102",[7,0.719,11,0.629,12,0.68,13,1.485,14,0.685,15,0.979,16,2.618,17,1.943,18,0.979,19,0.573,20,2.819,21,0.41,22,0.612,24,1.175,27,0.948,28,0.781,31,1.187,32,0.948,33,0.606,34,1.219,35,1.33,39,0.875,40,0.517,41,1.118,43,2.657,44,1.113,45,1.196,46,0.752,47,1.092,48,3.031,49,1.704,53,1.525,57,1.042,59,0.73,60,1.538,63,1.12,64,0.433,65,0.839,66,1.745,76,4.025,77,1.849,80,0.577,82,0.464,88,0.556,89,1.382,91,1.462,94,0.586,95,0.72,98,0.507,103,0.443,108,0.541,122,1.807,123,0.568,128,1.074,129,1.209,134,1.312,140,2.219,141,0.669,148,1.175,150,0.677,151,0.792,159,0.693,162,2.015,163,0.641,167,0.641,171,0.693,183,0.693,185,1.267,189,0.461,191,1.485,195,3.28,203,0.564,204,1.574,206,0.662,214,1.421,218,0.45,233,0.73,240,1.522,242,0.972,258,0.711,264,0.52,272,2.491,276,0.617,280,1.034,282,1.279,283,1.13,285,1.794,286,1.005,287,0.435,288,0.474,294,0.596,295,0.544,296,1.295,301,1.027,302,0.792,305,0.612,311,0.533,313,0.778,315,1.151,320,0.684,322,0.476,323,0.792,326,1.222,329,0.517,350,0.778,353,1.462,356,0.83,358,0.701,359,0.701,366,0.635,367,0.778,373,2.058,374,0.701,375,0.612,376,0.591,377,1.589,379,0.792,385,1.295,386,1.312,392,0.591,396,0.979,400,1.721,402,1.838,407,0.792,409,0.662,411,1.173,417,1.027,419,0.662,420,1.005,422,0.56,423,0.606,424,0.72,429,0.517,452,0.684,460,0.693,465,0.792,474,1.721,476,0.894,477,1.849,478,2.156,482,2.57,493,2.342,497,0.552,509,0.662,510,5.947,514,0.544,520,0.778,524,1.184,527,0.792,528,0.72,529,1.151,530,2.972,538,0.693,548,0.778,549,1.235,551,1.295,554,0.826,557,0.606,569,0.684,571,4.366,575,2.634,579,0.617,581,0.617,585,0.763,591,0.823,596,0.541,611,0.807,627,0.73,630,0.526,637,1.807,638,0.606,747,0.792,758,0.586,772,0.765,816,1.682,817,0.885,818,0.911,819,0.792,820,0.911,821,1.39,822,0.669,823,0.792,824,0.778,825,0.911,826,0.842,827,0.792,828,0.885,829,0.911,830,0.911,831,1.249,832,0.862,833,4.479,834,0.911,835,0.885,836,0.862,837,1.436,838,1.634,839,2.491,840,0.911,841,1.634,842,1.684,843,0.911,844,2.034,845,0.752,846,0.911,847,0.862,848,0.911,849,0.911,850,5.002,851,0.885,852,0.911,853,0.911,854,1.295,855,0.72,856,0.885,857,1.462,858,3.493,859,0.792,860,2.037,861,0.911,862,0.778,863,0.911,864,1.936,865,0.741,866,0.911,867,2.834,868,0.701,869,1.101,870,0.792,871,0.911,872,0.911,873,2.918,874,0.911,875,2.276,876,0.765,877,0.677,878,0.701,879,0.911,880,2.247,881,0.911,882,0.911,883,3.243,884,2.218,885,0.823,886,2.972,887,0.911,888,0.911,889,0.885,890,0.596,891,0.911,892,1.592,893,0.885,894,1.592,895,0.701,896,0.648,897,0.911,898,0.778,899,1.665,900,1.592,901,0.911,902,0.842,903,3.42,904,1.634,905,0.911,906,0.862,907,0.911,908,0.568,909,0.669,910,0.911,911,0.885,912,0.655,913,0.911,914,0.911,915,0.72,916,0.911,917,0.911,918,0.752,919,0.911,920,1.295,921,0.885,922,0.911,923,0.911,924,0.911,925,1.49,926,0.911,927,0.911,928,0.911,929,2.918,930,1.312,931,0.765,932,0.911,933,0.911,934,1.682,935,0.885,936,0.862,937,0.823,938,0.911,939,0.778,940,0.911,941,0.911,942,0.778,943,0.842,944,0.911,945,0.911,946,0.911,947,0.862,948,0.765,949,0.842,950,0.911,951,0.911,952,0.577,953,0.72,954,0.911,955,0.823,956,0.911,957,0.885,958,0.911,959,0.911,960,0.911,961,0.862,962,0.911,963,0.752]],["component/102",[1,0.433]],["title/103-1",[476,33.662]],["name/103-1",[]],["text/103-1",[]],["component/103-1",[]],["title/103-2",[217,22.555,218,20.836,513,26.338]],["name/103-2",[]],["text/103-2",[]],["component/103-2",[]],["title/103-3",[439,30.274,964,40.051]],["name/103-3",[]],["text/103-3",[]],["component/103-3",[]],["title/103-4",[13,25.784,203,31.377]],["name/103-4",[]],["text/103-4",[]],["component/103-4",[]],["title/103-5",[148,25.389,965,37.201]],["name/103-5",[]],["text/103-5",[]],["component/103-5",[]],["title/103-6",[290,33.157,965,37.201]],["name/103-6",[]],["text/103-6",[]],["component/103-6",[]],["title/103-7",[203,31.377,966,37.201]],["name/103-7",[]],["text/103-7",[]],["component/103-7",[]],["title/103-8",[967,44.028,968,40.051]],["name/103-8",[]],["text/103-8",[]],["component/103-8",[]],["title/103",[82,25.784,197,21.56]],["name/103",[197,0.436,969,0.89]],["text/103",[7,2.21,12,0.808,13,2.238,14,2.724,20,2.088,21,1.521,28,1.569,41,1.614,49,2.321,52,0.94,53,1.768,57,1.238,65,0.997,66,0.903,78,1.062,140,2.525,148,1.695,166,1.133,191,2.143,197,2.462,200,1.367,203,3.204,217,3.356,218,1.67,227,3.606,257,1.367,261,1.087,262,1.651,278,2.143,286,3.457,287,0.954,290,1.308,295,1.194,322,2.298,356,0.987,368,1.308,373,1.203,396,1.968,402,1.074,408,2.431,413,1.007,420,1.194,439,4.529,491,5.011,501,1.468,511,3.007,513,3.228,546,1.178,554,0.982,583,1.22,587,2.674,638,1.331,812,1.106,837,1.706,890,2.878,908,1.247,952,4.457,964,3.476,965,1.468,966,2.484,968,3.476,970,1.999,971,1.737,972,1.999,973,1.999,974,2.214,975,3.786,976,5.458,977,1.559,978,1.393,979,1.308,980,1.194,981,1.148,982,1.999,983,5.024,984,1.999,985,1.942,986,1.468,987,1.436,988,4.397,989,3.382,990,4.397,991,1.539,992,1.737,993,3.382,994,1.999,995,2.939,996,2.16,997,1.999,998,1.942,999,1.58,1000,1.737,1001,1.58,1002,3.382,1003,1.737,1004,1.559,1005,1.999,1006,1.999,1007,1.999,1008,1.999,1009,1.999,1010,1.999,1011,1.999,1012,1.999,1013,1.999,1014,1.999,1015,1.737,1016,1.999,1017,1.737,1018,1.58,1019,1.999,1020,1.58,1021,1.999,1022,1.999,1023,1.999,1024,1.999,1025,1.999,1026,1.999,1027,1.999,1028,1.999,1029,1.999,1030,1.999,1031,1.999,1032,1.999,1033,1.559,1034,1.706,1035,3.382,1036,1.999,1037,1.999,1038,3.821,1039,1.999,1040,1.355,1041,1.58,1042,1.737,1043,1.651,1044,1.999,1045,1.737,1046,1.999,1047,1.737,1048,3.382,1049,1.355]],["component/103",[1,0.433]],["title/104-1",[476,33.662]],["name/104-1",[]],["text/104-1",[]],["component/104-1",[]],["title/104-2",[287,24.173,981,29.091]],["name/104-2",[]],["text/104-2",[]],["component/104-2",[]],["title/104-3",[322,26.479,981,29.091]],["name/104-3",[]],["text/104-3",[]],["component/104-3",[]],["title/104-4",[413,25.519,981,29.091]],["name/104-4",[]],["text/104-4",[]],["component/104-4",[]],["title/104-5",[981,29.091,996,32.356]],["name/104-5",[]],["text/104-5",[]],["component/104-5",[]],["title/104-6",[812,23.354,981,24.236,1049,28.606]],["name/104-6",[]],["text/104-6",[]],["component/104-6",[]],["title/104",[215,40.051,1050,31.377]],["name/104",[812,0.567,1050,0.635]],["text/104",[1,1.212,7,3.144,13,3.002,14,2.647,15,1.436,16,1.517,19,1.552,20,3.879,21,2.297,28,1.87,31,2.041,44,1.914,49,2.577,66,1.115,68,1.837,85,3.169,208,1.391,240,1.602,270,1.374,285,1.517,287,1.923,289,1.552,295,3.053,311,1.445,322,1.29,354,1.517,364,1.496,368,1.615,375,2.707,376,3.316,390,1.812,392,1.602,396,3.431,408,1.774,413,1.243,415,1.9,419,3.711,431,1.9,513,2.515,546,1.455,554,1.212,567,1.833,575,1.9,606,1.374,669,5.649,758,1.589,759,3.6,811,2.145,812,2.23,823,3.503,878,1.9,908,1.54,931,2.072,939,2.107,964,4.039,974,1.615,975,3.86,979,3.86,981,3.387,1050,3.653,1051,3.915,1052,2.468,1053,2.468,1054,2.468,1055,2.107,1056,2.397,1057,2.468,1058,4.031,1059,2.107,1060,2.072,1061,3.503,1062,2.336,1063,3.187,1064,3.383,1065,2.468,1066,1.925,1067,3.441,1068,2.468,1069,2.397,1070,5.109,1071,4.031,1072,5.109,1073,2.336,1074,4.031,1075,2.468,1076,2.468,1077,2.468,1078,2.468,1079,4.031,1080,2.468,1081,2.468,1082,3.503,1083,4.031,1084,2.397,1085,2.468,1086,2.145,1087,2.468,1088,2.468,1089,2.468,1090,2.468,1091,2.397,1092,1.673,1093,2.468,1094,1.576,1095,2.336,1096,2.336]],["component/104",[1,0.433]],["title/105-1",[476,33.662]],["name/105-1",[]],["text/105-1",[]],["component/105-1",[]],["title/105",[14,20.629,122,31.377]],["name/105",[2,1.51]],["text/105",[4,2.787,7,3.39,12,2.509,14,2.077,20,2.949,27,1.871,31,1.681,44,1.577,49,3.151,53,2.666,60,2.294,61,2.518,78,2.71,80,2.104,122,3.846,138,1.816,148,1.664,171,2.525,197,1.413,208,1.871,214,2.012,215,2.625,226,1.837,261,1.805,286,1.984,287,1.584,290,2.173,295,3.71,300,3.555,321,2.338,369,2.495,413,1.673,422,2.042,428,2.886,458,2.173,476,1.765,492,2.757,501,4.559,513,4.347,515,3.232,517,2.386,518,2.787,546,3.006,554,2.505,585,1.507,812,2.822,813,3.736,814,2.886,815,2.886,876,2.787,908,2.072,971,2.886,974,4.559,975,3.338,976,2.886,977,3.978,979,2.173,1050,3.159,1055,2.835,1063,2.625,1067,2.835,1086,5.396,1094,2.121,1097,3.321,1098,2.386,1099,4.909,1100,3.321,1101,3.321,1102,3.321,1103,3.321,1104,3.321,1105,2.886,1106,2.439,1107,2.315,1108,3.321]],["component/105",[1,0.433]],["title/106-1",[186,23.354,604,30.017,930,32.923]],["name/106-1",[]],["text/106-1",[]],["component/106-1",[]],["title/106-2",[186,23.354,604,30.017,1109,36.031]],["name/106-2",[]],["text/106-2",[]],["component/106-2",[]],["title/106-3",[186,28.031,1110,40.051]],["name/106-3",[]],["text/106-3",[]],["component/106-3",[]],["title/106-4",[187,41.814]],["name/106-4",[]],["text/106-4",[]],["component/106-4",[]],["title/106-5",[186,28.031,1111,40.051]],["name/106-5",[]],["text/106-5",[]],["component/106-5",[]],["title/106-6",[186,23.354,1111,33.368,1112,42.208]],["name/106-6",[]],["text/106-6",[]],["component/106-6",[]],["title/106-7",[1113,50.081]],["name/106-7",[]],["text/106-7",[]],["component/106-7",[]],["title/106-8",[1114,55.054]],["name/106-8",[]],["text/106-8",[]],["component/106-8",[]],["title/106-9",[197,26.959]],["name/106-9",[]],["text/106-9",[]],["component/106-9",[]],["title/106-10",[197,21.56,325,44.028]],["name/106-10",[]],["text/106-10",[]],["component/106-10",[]],["title/106-11",[197,21.56,1115,50.661]],["name/106-11",[]],["text/106-11",[]],["component/106-11",[]],["title/106-12",[1116,37.201,1117,44.028]],["name/106-12",[]],["text/106-12",[]],["component/106-12",[]],["title/106-13",[297,30.067,1110,40.051]],["name/106-13",[]],["text/106-13",[]],["component/106-13",[]],["title/106-14",[197,21.56,1113,40.051]],["name/106-14",[]],["text/106-14",[]],["component/106-14",[]],["title/106-15",[197,21.56,966,37.201]],["name/106-15",[]],["text/106-15",[]],["component/106-15",[]],["title/106-16",[197,21.56,1118,44.028]],["name/106-16",[]],["text/106-16",[]],["component/106-16",[]],["title/106",[138,27.701,148,25.389]],["name/106",[138,0.56,148,0.513]],["text/106",[7,0.909,12,0.329,14,2.364,19,0.953,20,0.72,21,0.682,27,0.459,28,2.134,31,0.412,39,0.788,40,2.431,41,0.388,43,0.508,47,0.528,49,0.301,53,1.392,56,0.865,65,0.756,68,0.691,76,0.573,78,0.433,82,0.414,85,0.437,93,0.528,124,1.668,129,1.528,138,1.717,140,2.462,148,1.066,166,0.462,186,1.972,187,1,188,0.557,189,0.412,197,1.825,200,0.557,209,0.932,214,0.493,217,2.61,218,2.866,223,0.533,227,0.87,264,1.213,276,1.027,279,1.294,286,3.216,287,1.7,290,1.392,291,2.001,292,0.695,297,1.262,301,0.497,309,0.497,322,2.062,326,1.101,356,0.402,365,0.562,368,0.533,372,0.464,376,0.528,391,0.567,396,1.55,398,0.643,402,0.437,409,0.591,410,0.683,411,1.057,413,1.581,429,0.462,447,0.557,469,1.215,491,1.037,497,0.493,505,0.585,506,0.707,511,1.037,514,0.486,529,1.037,546,0.48,554,0.4,557,0.542,558,0.524,598,0.695,606,0.453,630,0.47,638,0.542,645,0.598,659,2.305,691,1.528,702,1.198,709,0.635,806,0.635,827,0.707,842,2.834,845,0.672,869,1.743,890,0.992,908,0.508,930,1.182,942,1.294,952,2.499,965,1.113,967,0.707,968,0.643,979,0.533,986,0.598,987,1.089,992,0.707,996,2.519,1001,0.643,1003,2.315,1004,1.659,1015,1.317,1018,0.643,1020,0.643,1033,0.635,1038,3.428,1040,2.673,1042,0.707,1045,1.317,1047,1.317,1049,2.128,1061,0.707,1092,1.027,1094,0.52,1098,1.528,1107,1.057,1109,1.816,1110,5.006,1111,0.643,1113,0.643,1114,0.707,1116,1.113,1117,1.317,1118,0.707,1119,2.013,1120,0.791,1121,1.182,1122,1.516,1123,0.814,1124,1.516,1125,0.814,1126,1.516,1127,0.814,1128,1.516,1129,0.814,1130,1.516,1131,0.814,1132,1.516,1133,0.814,1134,1.516,1135,0.814,1136,1.516,1137,0.814,1138,0.814,1139,0.814,1140,2.127,1141,0.814,1142,1.516,1143,0.814,1144,0.814,1145,0.814,1146,0.814,1147,0.814,1148,0.814,1149,0.814,1150,0.814,1151,0.814,1152,0.814,1153,0.814,1154,2.127,1155,1.516,1156,2.664,1157,0.814,1158,1.516,1159,1.516,1160,0.814,1161,0.814,1162,2.587,1163,1.516,1164,2.127,1165,3.221,1166,2.728,1167,0.814,1168,1.516,1169,1.516,1170,1.272,1171,0.791,1172,0.814,1173,0.814,1174,0.814,1175,0.814,1176,0.791,1177,1.516,1178,1.516,1179,0.814,1180,1.516,1181,0.814,1182,1.516,1183,0.814,1184,0.814,1185,0.814,1186,0.814,1187,0.814,1188,0.814,1189,0.814,1190,0.814,1191,0.814,1192,0.814,1193,0.814,1194,0.814,1195,0.814,1196,0.814,1197,1.516,1198,0.814,1199,0.814,1200,0.814,1201,0.814,1202,0.814,1203,0.814,1204,1.233,1205,0.814,1206,0.814,1207,0.814,1208,0.814,1209,0.662,1210,0.814,1211,0.814,1212,0.814,1213,0.814,1214,0.814,1215,0.814,1216,0.695,1217,0.814,1218,0.814,1219,0.814,1220,0.814,1221,0.814,1222,0.814,1223,0.814,1224,0.814,1225,0.814,1226,0.814,1227,1.848,1228,0.814,1229,1.848,1230,0.814,1231,0.814,1232,0.814,1233,0.814,1234,0.695,1235,0.814,1236,0.672,1237,0.814,1238,0.695,1239,0.814,1240,0.814,1241,0.77,1242,0.814,1243,0.814,1244,0.814,1245,0.814,1246,0.814,1247,0.814,1248,0.683,1249,0.814,1250,0.707,1251,0.814,1252,0.707,1253,0.814,1254,0.814,1255,0.814,1256,0.814,1257,0.791,1258,0.814,1259,0.791,1260,0.814,1261,0.695,1262,0.814,1263,0.627,1264,0.814,1265,0.736,1266,0.814,1267,0.643,1268,0.814,1269,0.814,1270,0.814,1271,0.814,1272,0.814,1273,0.814,1274,0.814,1275,0.814,1276,0.814,1277,0.814,1278,0.814,1279,0.77,1280,0.814,1281,6.169,1282,0.814,1283,0.814,1284,0.814,1285,0.814,1286,0.814,1287,0.814,1288,0.707,1289,0.814,1290,0.814,1291,0.814,1292,0.814,1293,0.814,1294,0.814,1295,0.814,1296,1.516,1297,0.814,1298,1.516,1299,0.814,1300,1.516,1301,0.814,1302,1.516,1303,0.814,1304,0.707,1305,0.814,1306,0.814,1307,0.814,1308,0.707,1309,0.814,1310,0.707,1311,0.814,1312,0.707,1313,0.814,1314,0.707,1315,0.814,1316,0.814,1317,0.814,1318,0.707,1319,0.814,1320,0.707,1321,0.814,1322,0.814,1323,0.814,1324,0.752,1325,0.814,1326,0.752,1327,0.814,1328,0.814,1329,0.814,1330,0.814,1331,0.814,1332,0.814,1333,0.814,1334,0.814,1335,0.814,1336,0.814,1337,0.814,1338,0.814,1339,0.814,1340,0.814,1341,0.814,1342,0.814,1343,0.814,1344,0.814,1345,0.814,1346,0.814,1347,0.814,1348,0.814,1349,0.814,1350,0.814,1351,0.814,1352,0.814,1353,0.814,1354,0.814,1355,0.814,1356,0.814,1357,0.814,1358,0.814,1359,0.814,1360,2.127,1361,0.791,1362,0.814,1363,0.814,1364,0.672,1365,0.814,1366,0.814,1367,0.814,1368,0.814,1369,0.695,1370,1.516,1371,0.814,1372,1.516,1373,0.814,1374,0.814,1375,0.814,1376,0.814,1377,2.664,1378,0.604,1379,0.791,1380,0.814,1381,0.77,1382,0.814,1383,0.814,1384,1.434,1385,0.814,1386,0.814,1387,0.814,1388,1.516,1389,2.664,1390,0.814,1391,0.707,1392,0.814,1393,0.814,1394,0.814,1395,0.814,1396,0.814,1397,0.814,1398,0.814,1399,0.707,1400,0.707,1401,1.516,1402,0.814,1403,0.707,1404,0.814,1405,0.707,1406,0.814,1407,0.814,1408,0.814,1409,0.814,1410,0.814,1411,0.814,1412,0.814,1413,2.664,1414,0.814,1415,0.814,1416,0.814,1417,0.814,1418,0.814,1419,0.814,1420,0.814,1421,0.707,1422,0.707]],["component/106",[1,0.433]],["title/107-1",[476,33.662]],["name/107-1",[]],["text/107-1",[]],["component/107-1",[]],["title/107-2",[1423,46.518]],["name/107-2",[]],["text/107-2",[]],["component/107-2",[]],["title/107-3",[217,27.072,492,27.382]],["name/107-3",[]],["text/107-3",[]],["component/107-3",[]],["title/107-4",[53,26.479,1106,37.201]],["name/107-4",[]],["text/107-4",[]],["component/107-4",[]],["title/107-5",[513,31.613,975,33.157]],["name/107-5",[]],["text/107-5",[]],["component/107-5",[]],["title/107-6",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/107-6",[]],["text/107-6",[]],["component/107-6",[]],["title/107",[12,14.615,61,17.856,402,19.439,492,19.55]],["name/107",[492,0.554,1106,0.752]],["text/107",[1,1.164,10,1.488,12,1.994,14,0.956,20,2.343,21,1.74,24,1.176,28,2.289,33,2.576,49,2.661,53,2.991,61,2.825,65,1.929,68,1.07,74,1.67,94,1.511,103,1.142,108,1.393,124,1.247,128,1.499,164,3.584,166,1.331,169,1.524,197,0.999,206,1.705,209,2.378,217,4.292,218,2.436,220,1.856,221,1.856,222,3.626,223,3.745,226,2.14,242,1.357,257,1.606,263,1.831,286,2.948,287,1.12,289,1.476,294,2.532,295,1.403,297,1.393,311,1.375,322,2.022,329,1.331,356,1.91,364,2.344,368,3.745,372,1.339,377,1.591,396,1.366,402,2.652,409,1.705,413,1.182,439,1.403,491,4.329,492,3.892,493,1.423,494,3.362,497,1.423,513,3.079,514,1.403,515,2.451,546,2.909,633,1.97,645,2.841,655,1.764,759,1.433,765,1.705,812,1.299,813,3.443,831,1.743,880,1.808,890,1.536,896,1.67,898,2.004,912,1.687,915,1.856,969,2.04,974,4.142,975,2.532,977,1.831,979,2.532,980,1.403,981,2.221,991,1.808,996,1.499,1000,3.362,1041,1.856,1094,2.471,1105,2.04,1106,4.647,1121,1.831,1170,1.97,1261,2.004,1423,2.841,1425,1.465,1427,3.362,1428,1.785,1429,2.04,1430,1.785,1431,2.04,1432,1.856,1433,2.348,1434,2.348,1435,1.882,1436,2.28,1437,2.348,1438,2.348,1439,1.939,1440,2.128,1441,2.348,1442,2.04,1443,2.348,1444,2.348,1445,2.04,1446,2.04]],["component/107",[1,0.433]],["title/108-1",[476,33.662]],["name/108-1",[]],["text/108-1",[]],["component/108-1",[]],["title/108-2",[1423,46.518]],["name/108-2",[]],["text/108-2",[]],["component/108-2",[]],["title/108-3",[217,27.072,492,27.382]],["name/108-3",[]],["text/108-3",[]],["component/108-3",[]],["title/108-4",[60,18.981,297,25.05,1447,36.681]],["name/108-4",[]],["text/108-4",[]],["component/108-4",[]],["title/108-5",[222,22.921,1424,31.436,1425,22.572,1426,29.425]],["name/108-5",[]],["text/108-5",[]],["component/108-5",[]],["title/108-6",[218,20.836,505,30.33,517,30.33]],["name/108-6",[]],["text/108-6",[]],["component/108-6",[]],["title/108-7",[223,27.625,249,33.368,1448,36.681]],["name/108-7",[]],["text/108-7",[]],["component/108-7",[]],["title/108-8",[1449,55.054]],["name/108-8",[]],["text/108-8",[]],["component/108-8",[]],["title/108-9",[1450,55.054]],["name/108-9",[]],["text/108-9",[]],["component/108-9",[]],["title/108-10",[52,29.804]],["name/108-10",[]],["text/108-10",[]],["component/108-10",[]],["title/108-11",[392,32.883,1451,44.028]],["name/108-11",[]],["text/108-11",[]],["component/108-11",[]],["title/108",[12,14.615,60,16.266,402,19.439,492,19.55]],["name/108",[60,0.461,492,0.554]],["text/108",[1,0.315,7,3.324,10,0.349,12,1.317,14,0.427,20,0.909,21,0.247,24,0.525,28,0.486,33,0.698,40,0.594,49,0.387,52,0.9,53,0.548,58,0.441,60,1.814,65,0.954,68,0.872,75,1.059,78,0.797,80,0.349,81,0.366,82,0.533,84,1.046,100,0.478,101,1.663,102,0.895,103,0.268,108,0.327,122,0.341,124,1.218,128,0.351,147,0.376,148,1.323,164,1.09,169,0.974,189,0.279,192,0.448,197,0.446,204,0.704,206,0.4,208,1.078,209,0.338,214,0.333,217,1.583,218,0.517,220,0.435,221,0.435,222,0.664,223,1.728,226,0.58,249,2.577,257,1.309,261,0.299,275,0.429,278,0.349,286,1.77,287,1.094,289,0.346,294,0.686,297,0.327,305,0.37,309,0.336,311,0.322,322,1,352,2.574,356,0.272,364,0.333,368,0.982,376,0.357,377,0.373,396,0.61,398,1.513,402,0.296,413,0.756,415,0.424,423,0.366,439,1.37,488,0.462,491,2.23,492,1.239,493,0.333,497,0.635,501,0.404,505,1.647,511,0.717,512,0.478,514,0.626,515,1.213,517,1.078,525,0.745,546,1.351,554,1.455,567,0.409,606,0.835,610,0.419,628,0.448,630,0.318,645,1.683,655,0.413,668,1.663,691,0.753,702,0.435,709,0.429,758,0.354,759,0.64,813,1.152,844,0.384,855,1.812,869,0.982,880,2.033,896,0.391,899,0.314,912,0.395,915,0.435,952,1.877,953,0.435,974,0.982,975,0.686,981,0.316,986,0.404,987,0.395,991,0.424,996,0.958,999,0.829,1001,1.812,1018,0.435,1020,0.435,1033,0.429,1034,0.47,1040,1.297,1043,0.455,1049,1.554,1060,0.462,1092,0.373,1094,0.958,1098,1.078,1107,0.384,1116,0.404,1121,0.818,1227,0.911,1229,0.478,1288,0.911,1304,0.478,1308,1.992,1310,0.911,1312,1.992,1314,0.478,1318,0.911,1320,1.304,1378,0.409,1391,1.304,1399,0.478,1400,0.478,1403,0.478,1405,0.478,1421,0.478,1422,0.478,1423,0.77,1425,0.654,1427,0.911,1428,0.419,1429,0.911,1430,0.419,1431,0.478,1432,0.829,1445,0.911,1446,0.478,1447,0.911,1448,1.992,1449,0.911,1450,1.304,1451,1.663,1452,0.487,1453,0.478,1454,1.048,1455,1.048,1456,0.55,1457,1.458,1458,1.048,1459,1.048,1460,0.55,1461,1.048,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.048,1469,0.55,1470,1.048,1471,2.962,1472,0.535,1473,0.55,1474,0.55,1475,0.55,1476,1.186,1477,0.55,1478,0.55,1479,0.509,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.292,1485,0.55,1486,5.35,1487,1.914,1488,2.292,1489,1.501,1490,1.501,1491,1.501,1492,2.292,1493,1.914,1494,2.292,1495,1.914,1496,1.048,1497,1.048,1498,2.641,1499,1.048,1500,1.458,1501,2.292,1502,0.55,1503,1.914,1504,1.048,1505,0.462,1506,1.501,1507,2.962,1508,1.914,1509,1.048,1510,1.501,1511,0.55,1512,0.55,1513,1.914,1514,1.048,1515,1.914,1516,1.458,1517,1.048,1518,1.501,1519,1.501,1520,2.641,1521,0.55,1522,1.048,1523,1.914,1524,0.55,1525,1.501,1526,1.914,1527,1.048,1528,0.55,1529,2.292,1530,2.292,1531,2.641,1532,2.292,1533,1.501,1534,1.914,1535,1.048,1536,1.501,1537,1.914,1538,1.501,1539,1.501,1540,2.962,1541,0.55,1542,1.914,1543,1.914,1544,1.048,1545,0.947,1546,1.914,1547,1.501,1548,2.292,1549,0.55,1550,2.292,1551,0.55,1552,1.048,1553,0.55,1554,1.048,1555,3.26,1556,1.914,1557,1.501,1558,1.501,1559,1.048,1560,1.048,1561,0.55,1562,2.641,1563,1.501,1564,1.914,1565,1.914,1566,1.914,1567,1.281,1568,0.55,1569,1.914,1570,1.048,1571,1.048,1572,1.501,1573,1.914,1574,1.048,1575,1.501,1576,2.292,1577,1.501,1578,1.914,1579,1.501,1580,1.501,1581,1.048,1582,1.914,1583,0.55,1584,1.501,1585,1.048,1586,1.501,1587,1.048,1588,1.914,1589,0.55,1590,1.914,1591,0.55,1592,1.501,1593,1.048,1594,1.914,1595,1.048,1596,1.501,1597,1.914,1598,0.55,1599,1.501,1600,1.501,1601,1.048,1602,1.914,1603,1.048,1604,1.048,1605,1.501,1606,1.048,1607,0.55,1608,1.914,1609,1.501,1610,2.962,1611,1.048,1612,1.048,1613,0.55,1614,1.501,1615,1.914,1616,1.501,1617,0.55,1618,1.048,1619,0.55,1620,1.501,1621,0.55,1622,1.048,1623,1.048,1624,1.048,1625,1.501,1626,0.55,1627,1.914,1628,1.048,1629,1.914,1630,1.501,1631,1.501,1632,1.501,1633,0.55,1634,0.55,1635,1.914,1636,1.501,1637,0.55,1638,1.048,1639,0.55,1640,0.55,1641,1.048,1642,1.914,1643,0.55,1644,0.55,1645,1.048,1646,0.55,1647,1.048,1648,0.55,1649,1.048,1650,1.048,1651,0.55,1652,0.55,1653,1.048,1654,1.914,1655,1.914,1656,0.55,1657,1.048,1658,1.048,1659,0.55,1660,1.048,1661,1.048,1662,0.55,1663,1.501,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.501,1670,2.292,1671,1.048,1672,1.048,1673,1.048,1674,0.55,1675,0.55,1676,1.048,1677,1.501,1678,0.55,1679,0.55,1680,1.048,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.497,1686,1.501,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.048,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.048,1704,1.048,1705,1.048,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.535,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.521,1717,0.55,1718,0.55,1719,0.55,1720,0.478,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.535,1726,0.55,1727,0.818,1728,0.55,1729,0.55,1730,0.55,1731,0.535,1732,0.55,1733,0.535,1734,0.55,1735,0.55,1736,0.55,1737,0.357,1738,0.521,1739,0.497,1740,0.535,1741,0.462,1742,1.048,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.048,1750,0.55,1751,1.048,1752,0.55,1753,0.478,1754,0.55]],["component/108",[1,0.433]],["title/109-1",[476,33.662]],["name/109-1",[]],["text/109-1",[]],["component/109-1",[]],["title/109-2",[82,25.784,226,28.031]],["name/109-2",[]],["text/109-2",[]],["component/109-2",[]],["title/109-3",[227,29.091,392,32.883]],["name/109-3",[]],["text/109-3",[]],["component/109-3",[]],["title/109-4",[227,36.376]],["name/109-4",[]],["text/109-4",[]],["component/109-4",[]],["title/109-5",[264,36.145]],["name/109-5",[]],["text/109-5",[]],["component/109-5",[]],["title/109-6",[439,37.856]],["name/109-6",[]],["text/109-6",[]],["component/109-6",[]],["title/109-7",[227,29.091,390,37.201]],["name/109-7",[]],["text/109-7",[]],["component/109-7",[]],["title/109-8",[227,36.376]],["name/109-8",[]],["text/109-8",[]],["component/109-8",[]],["title/109",[226,35.051]],["name/109",[226,1.011]],["text/109",[7,2.215,12,0.81,14,0.816,22,1.347,24,3.152,28,2.045,31,1.015,32,1.911,44,0.952,49,1.628,52,1.595,60,0.902,61,0.99,65,1.691,82,1.726,84,1.398,122,3.21,124,2.341,125,1.291,140,1.151,147,1.371,148,1.005,159,3.351,162,1.384,169,1.301,189,1.717,197,0.853,217,1.071,218,0.99,226,3.48,227,4.858,229,1.742,234,1.742,235,1.742,236,3.829,237,1.742,238,1.742,239,1.506,241,1.631,242,1.159,243,1.166,259,1.411,264,4.827,278,1.27,285,1.233,287,3.196,295,1.198,309,1.224,314,3.166,322,3.029,351,2.49,356,0.99,364,1.215,373,1.206,390,4.619,392,3.761,413,2.61,422,1.233,429,1.137,436,1.711,439,3.463,461,1.742,493,2.055,497,3.141,511,1.371,515,1.27,554,0.985,561,1.359,585,0.91,610,3.351,626,2.1,627,1.607,628,4.216,745,1.27,812,1.876,813,1.206,842,1.441,890,1.312,895,1.544,908,1.251,952,1.27,953,2.681,974,1.312,979,2.219,980,1.198,996,2.166,999,1.585,1004,1.564,1040,2.298,1049,2.298,1063,1.585,1094,2.814,1099,1.585,1107,1.398,1428,1.525,1435,1.607,1476,1.585,1753,5.036,1755,2.005,1756,1.631,1757,5.182,1758,3.391,1759,2.005,1760,3.391,1761,4.406,1762,2.005,1763,2.005,1764,2.005,1765,3.391,1766,3.391,1767,3.391,1768,1.897,1769,4.28,1770,4.406,1771,1.947,1772,3.391,1773,2.005,1774,1.683,1775,1.426,1776,2.005,1777,2.005,1778,1.947,1779,2.005,1780,2.005,1781,2.005,1782,1.711,1783,2.005,1784,5.034]],["component/109",[1,0.433]],["title/110-1",[744,34.979,745,32.102]],["name/110-1",[]],["text/110-1",[]],["component/110-1",[]],["title/110-2",[148,18.128,585,16.411,1066,28.215,1785,31.436]],["name/110-2",[]],["text/110-2",[]],["component/110-2",[]],["title/110-3",[16,19.456,18,18.409,20,15.029,656,23.502,1204,25.743]],["name/110-3",[]],["text/110-3",[]],["component/110-3",[]],["title/110-4",[630,29.278,1786,45.796]],["name/110-4",[]],["text/110-4",[]],["component/110-4",[]],["title/110-5",[75,28.031,1787,44.028]],["name/110-5",[]],["text/110-5",[]],["component/110-5",[]],["title/110-6",[209,31.147,585,22.984]],["name/110-6",[]],["text/110-6",[]],["component/110-6",[]],["title/110-7",[188,24.741,261,19.664,1788,32.04,1789,35.136]],["name/110-7",[]],["text/110-7",[]],["component/110-7",[]],["title/110-8",[585,22.984,1790,46.812]],["name/110-8",[]],["text/110-8",[]],["component/110-8",[]],["title/110-9",[388,41.814]],["name/110-9",[]],["text/110-9",[]],["component/110-9",[]],["title/110-10",[64,30.084]],["name/110-10",[]],["text/110-10",[]],["component/110-10",[]],["title/110-11",[478,32.075]],["name/110-11",[]],["text/110-11",[]],["component/110-11",[]],["title/110-12",[18,29.47,48,28.031]],["name/110-12",[]],["text/110-12",[]],["component/110-12",[]],["title/110-13",[585,19.149,850,32.5,1791,32.923]],["name/110-13",[]],["text/110-13",[]],["component/110-13",[]],["title/110-14",[53,22.061,60,18.981,478,21.371]],["name/110-14",[]],["text/110-14",[]],["component/110-14",[]],["title/110-15",[56,20.639,579,24.515,583,22.078,980,21.615]],["name/110-15",[]],["text/110-15",[]],["component/110-15",[]],["title/110",[1440,34.843]],["name/110",[1440,1.005]],["text/110",[1,1.571,7,3.098,11,0.869,12,1.241,14,0.512,16,1.388,17,1.504,18,2.51,20,2.049,21,1.685,28,1.048,32,0.709,34,1.948,38,1.162,39,0.654,40,2.722,41,1.788,44,0.598,48,2.889,49,2.065,52,1.763,53,1.958,54,1.928,60,1.016,64,1.779,65,0.628,66,1.692,68,1.4,69,0.718,73,0.995,74,2.185,75,3.092,77,2.735,78,2.293,80,1.431,83,1.531,88,0.768,95,0.995,103,1.494,120,1.18,123,0.785,124,0.669,125,0.81,140,0.723,148,0.631,163,0.886,181,1.606,182,1.009,189,1.143,193,1.04,197,0.961,202,0.861,208,2.111,209,1.889,242,1.305,251,0.845,259,2.163,261,3.369,264,1.753,266,1.531,270,0.701,273,0.886,277,1.024,278,0.797,283,1.517,287,1.078,288,0.654,289,1.932,300,0.877,301,1.378,322,1.606,354,0.774,356,1.516,372,2.979,373,0.757,382,3.51,391,0.877,402,1.214,413,0.634,417,0.768,429,0.714,447,0.861,477,1.431,478,1.555,514,3.532,516,1.559,528,0.995,529,0.861,554,0.618,557,0.838,558,1.978,574,1.024,576,1.04,585,2.682,589,1.865,598,1.074,600,1.138,604,0.895,606,2.086,624,1.163,626,1.399,630,1.305,631,2.849,634,1.115,636,2.356,637,1.399,656,3.878,744,2.587,745,3.042,760,2,764,1.094,765,2.721,789,0.877,808,1.517,809,0.995,850,2.885,854,2.365,865,1.837,883,1.056,896,1.606,899,1.289,952,0.797,963,1.865,987,1.623,1040,0.853,1050,0.779,1066,1.762,1099,0.995,1204,3.048,1216,1.074,1425,0.785,1440,0.692,1476,0.995,1727,0.982,1739,1.138,1741,1.056,1785,1.963,1786,2.042,1787,1.094,1788,2.721,1791,2.922,1792,1.094,1793,1.222,1794,1.259,1795,1.259,1796,1.222,1797,4.825,1798,1.259,1799,1.259,1800,1.259,1801,1.259,1802,1.259,1803,1.259,1804,1.259,1805,1.259,1806,1.259,1807,1.259,1808,1.896,1809,1.259,1810,1.259,1811,0.969,1812,1.191,1813,1.191,1814,1.04,1815,1.222,1816,1.259,1817,1.259,1818,1.094,1819,0.995,1820,1.094,1821,0.957,1822,1.259,1823,2.258,1824,3.072,1825,1.259,1826,2.538,1827,1.259,1828,1.259,1829,1.259,1830,1.222,1831,1.259,1832,1.259,1833,1.351,1834,1.351,1835,3.298,1836,1.351,1837,1.785,1838,1.301,1839,1.259,1840,1.259,1841,1.259,1842,1.259,1843,1.222,1844,1.259,1845,2.258,1846,1.115,1847,1.259,1848,1.259,1849,2.258,1850,1.259,1851,1.351,1852,1.301,1853,1.301,1854,1.115,1855,1.301,1856,1.259,1857,1.301,1858,1.301,1859,1.301,1860,1.115,1861,1.115,1862,1.301,1863,1.301,1864,1.301,1865,1.04,1866,1.115,1867,2.194,1868,1.163,1869,1.301,1870,0.935,2371,1.628]],["component/110",[1,0.433]],["title/111-1",[183,38.526,202,34.652]],["name/111-1",[]],["text/111-1",[]],["component/111-1",[]],["title/111-2",[52,23.834,77,32.102]],["name/111-2",[]],["text/111-2",[]],["component/111-2",[]],["title/111-3",[12,20.469,39,26.336]],["name/111-3",[]],["text/111-3",[]],["component/111-3",[]],["title/111-4",[22,34.027,61,25.009]],["name/111-4",[]],["text/111-4",[]],["component/111-4",[]],["title/111-5",[12,17.053,19,26.54,60,18.981]],["name/111-5",[]],["text/111-5",[]],["component/111-5",[]],["title/111-6",[12,20.469,1871,44.028]],["name/111-6",[]],["text/111-6",[]],["component/111-6",[]],["title/111-7",[855,54.823]],["name/111-7",[]],["text/111-7",[]],["component/111-7",[]],["title/111",[478,32.075]],["name/111",[478,0.925]],["text/111",[7,4.34,11,4.154,12,1.276,15,0.758,16,1.942,19,0.819,21,1.42,39,1.211,49,2.328,52,0.613,60,2.561,61,3.111,69,1.802,77,2.435,88,1.421,89,0.768,123,0.813,129,1.673,181,4.05,189,0.659,195,0.696,208,1.78,218,1.15,274,0.979,285,1.942,288,0.677,366,1.623,424,2.497,440,0.688,477,0.825,481,1.132,487,1.059,516,0.899,562,1.076,571,1.608,572,3.686,576,3.649,585,2.004,596,0.773,606,0.725,626,1.442,762,1.132,763,4.264,808,2.121,819,1.132,821,1.076,862,3.281,980,0.778,986,0.956,1263,1.003,1267,3.038,1837,3.492,1860,3.913,1861,1.154,1865,1.924,1866,2.063,1868,1.203,1871,1.132,1872,1.302,1873,3.843,1874,2.329,1875,3.158,1876,1.302,1877,1.302,1878,1.302,1879,1.302,1880,2.329,1881,3.843,1882,1.593,1883,2.329,1884,2.329,1885,1.302,1886,1.302,1887,5.328,1888,5.328,1889,2.329,1890,1.302,1891,0.99,1892,1.302,1893,1.302,1894,2.329,1895,1.302,1896,1.302,1897,1.302,1898,1.302,1899,4.264,1900,5.694,1901,3.843,1902,5.694,1903,1.302,1904,1.302,1905,1.302,1906,3.637,1907,3.843,1908,3.843,1909,1.302,1910,1.302,1911,1.302,1912,3.843,1913,3.843,1914,1.302,1915,3.158,1916,1.302,1917,1.302,1918,3.158,1919,1.302,1920,1.302,1921,3.158,1922,1.302,1923,1.302,1924,3.158,1925,3.158,1926,1.302,1927,3.158,1928,4.906,1929,1.302,1930,1.302,1931,2.152,1932,2.204,1933,2.329,1934,2.329,1935,2.329,1936,2.329,1937,3.158,1938,2.329,1939,2.329,1940,2.329,1941,2.329,1942,1.302,1943,2.329,1944,1.203,1945,1.302,1946,2.329,1947,2.329,1948,1.302,1949,1.302,1950,1.302,1951,1.302,1952,1.302,1953,1.302,1954,1.302,1955,1.302,1956,1.302,1957,1.302,1958,1.302,1959,1.302,1960,1.177,1961,1.302,1962,1.302,1963,2.329]],["component/111",[1,0.433]],["title/112-1",[64,30.084]],["name/112-1",[]],["text/112-1",[]],["component/112-1",[]],["title/112-2",[14,20.629,1050,31.377]],["name/112-2",[]],["text/112-2",[]],["component/112-2",[]],["title/112-3",[38,21.709,41,20.139,185,22.813]],["name/112-3",[]],["text/112-3",[]],["component/112-3",[]],["title/112",[1964,49.413]],["name/112",[1964,1.426]],["text/112",[1,1.758,7,3.95,10,0.68,13,0.781,14,0.796,15,0.893,17,0.376,24,0.283,27,1.319,28,0.262,31,1.364,32,0.605,34,1.017,36,0.414,38,2.532,39,0.293,41,0.512,43,0.352,44,1.279,48,0.312,49,1.116,60,0.254,61,0.278,62,0.756,64,2.5,65,0.765,66,1.626,68,1.758,75,0.849,78,1.039,81,0.715,82,0.287,83,1.04,89,0.333,103,1.468,110,0.727,117,1.377,120,0.561,123,0.352,130,0.482,138,0.839,154,0.933,166,2.188,185,3.721,186,0.849,187,1.013,188,0.734,189,1.185,191,0.357,197,1.532,200,0.386,202,1.842,226,0.312,240,0.996,242,0.62,243,0.328,251,0.379,258,0.44,259,0.756,261,0.583,264,0.322,266,0.727,270,1.848,280,0.347,287,1.117,288,0.558,290,0.369,296,0.434,297,1.161,299,1.334,301,0.655,303,0.474,304,2.191,305,0.721,310,1.334,312,1.641,317,0.474,321,0.756,329,0.87,354,1.656,356,0.965,357,1.268,365,0.39,372,0.322,373,0.646,374,0.434,381,0.459,388,0.372,391,0.393,406,0.459,411,0.393,413,0.773,417,0.344,418,1.699,420,0.337,422,0.347,429,0.87,440,0.298,445,2.296,446,0.933,447,0.386,452,2.268,458,0.369,469,0.452,474,0.414,475,0.873,486,0.452,493,0.93,516,0.39,546,0.333,553,0.452,554,0.754,556,0.788,558,1.507,579,0.382,581,0.727,585,0.256,593,0.452,596,0.637,602,0.521,604,0.401,605,1.387,606,0.854,616,1.103,619,0.474,626,1.449,630,0.62,633,0.474,636,4.329,637,3.049,639,1.269,652,0.429,657,2.807,659,0.788,758,1.259,759,1.428,771,0.86,784,0.474,788,0.816,789,0.748,806,0.44,808,0.379,812,0.594,813,1.177,831,0.419,842,0.771,844,0.393,854,0.434,857,0.49,868,0.826,869,0.702,870,0.49,877,1.14,890,0.702,895,0.826,899,1.537,909,0.414,912,0.771,918,0.466,920,0.826,966,0.788,978,0.748,995,0.49,1050,0.349,1059,0.482,1064,0.901,1092,1.586,1209,0.459,1234,0.916,1236,3.387,1238,0.482,1248,0.901,1250,1.699,1252,1.334,1263,0.434,1267,4.515,1364,0.466,1369,0.916,1378,1.14,1432,0.446,1442,0.49,1505,2.261,1567,0.482,1685,0.51,1720,0.49,1727,0.837,1737,0.697,1756,0.459,1774,0.901,1775,0.401,1782,0.916,1791,0.837,1808,2.534,1811,0.434,1814,1.268,1819,1.85,1820,0.49,1821,2.296,1870,0.419,1882,0.386,1891,0.429,1965,0.564,1966,0.564,1967,1.042,1968,0.521,1969,1.109,1970,3.019,1971,3.019,1972,3.019,1973,1.955,1974,3.019,1975,2.577,1976,3.88,1977,3.241,1978,2.892,1979,2.693,1980,2.549,1981,3.019,1982,1.418,1983,1.073,1984,1.535,1985,1.452,1986,1.491,1987,1.535,1988,1.648,1989,1.073,1990,0.583,1991,0.606,1992,0.583,1993,0.606,1994,0.606,1995,1.206,1996,1.206,1997,0.606,1998,0.548,1999,0.606,2000,0.606,2001,0.564,2002,0.564,2003,0.564,2004,1.535,2005,1.535,2006,0.534,2007,0.564,2008,0.564,2009,0.548,2010,0.564,2011,0.564,2012,0.564,2013,0.564,2014,0.534,2015,0.548,2016,0.86,2017,1.615,2018,1.964,2019,0.933,2020,0.933,2021,0.933,2022,1.768,2023,0.916,2024,1.955,2025,1.073,2026,0.97,2027,1.418,2028,0.97,2029,1.387,2030,0.564,2031,1.073,2032,1.073,2033,3.944,2034,3.599,2035,1.955,2036,1.073,2037,1.073,2038,1.535,2039,1.073,2040,1.016,2041,0.564,2042,0.51,2043,0.534,2044,0.548,2045,0.466,2046,0.534,2047,0.49,2048,0.564,2049,0.564,2050,0.564,2051,1.073,2052,1.073,2053,0.5,2054,0.564,2055,0.564,2056,1.073,2057,1.073,2058,0.564,2059,0.564,2060,0.548,2061,0.564,2062,0.564,2063,0.564,2064,1.955,2065,0.564,2066,1.073,2067,0.564,2068,0.933,2069,1.042,2070,0.534,2071,0.564,2072,0.564,2073,0.564,2074,0.606,2075,0.606,2076,0.606,2077,0.606,2078,0.564,2079,0.564,2080,0.49,2081,0.49,2082,0.49,2083,0.49,2084,0.564,2085,0.564,2086,0.564,2087,0.564,2088,0.521,2089,0.564,2090,0.51,2091,0.564,2092,0.44,2093,0.49,2094,0.564,2095,0.521,2096,0.521,2097,0.534,2098,0.564,2099,0.564,2100,0.564,2101,0.564,2102,0.564,2103,0.564,2104,1.073,2105,1.073,2106,4.326,2107,4.326,2108,1.073,2109,0.606,2110,0.606,2111,3.859,2112,1.073,2113,1.073,2114,3.32,2115,0.992,2116,2.693,2117,1.073,2118,1.073,2119,0.548,2120,0.873,2121,0.534,2122,0.564,2123,0.548,2124,0.564,2125,0.564,2126,0.564,2127,0.548,2128,0.564,2129,0.564,2130,0.534,2131,0.564,2132,1.073]],["component/112",[1,0.433]],["title/113-1",[14,17.187,1882,28.87,2092,32.923]],["name/113-1",[]],["text/113-1",[]],["component/113-1",[]],["title/113-2",[585,19.149,1425,26.338,2135,33.368]],["name/113-2",[]],["text/113-2",[]],["component/113-2",[]],["title/113-3",[49,15.596,1737,27.396,1775,30.017]],["name/113-3",[]],["text/113-3",[]],["component/113-3",[]],["title/113-4",[48,20.014,810,28.596,909,26.562,2159,31.436]],["name/113-4",[]],["text/113-4",[]],["component/113-4",[]],["title/113-5",[1854,44.874,2160,47.94]],["name/113-5",[]],["text/113-5",[]],["component/113-5",[]],["title/113",[2161,50.081]],["name/113",[2161,1.445]],["text/113",[1,1.505,7,2.686,12,0.636,14,1.494,18,1.601,21,1.238,24,1.38,28,2.321,38,0.809,41,1.313,44,1.307,48,2.768,49,1.356,52,1.726,60,1.238,61,0.777,63,1.048,64,1.307,65,1.373,66,1.243,68,0.717,76,1.108,81,1.048,84,1.097,85,0.846,88,0.96,89,0.928,90,1.212,93,1.021,103,0.765,108,0.934,117,1.938,141,1.155,185,1.983,189,0.797,196,1.03,197,0.67,208,0.887,218,0.777,226,0.871,241,1.28,259,1.108,263,1.227,270,1.532,287,1.313,288,1.431,294,1.03,297,0.934,300,1.097,301,1.68,311,0.921,314,1.131,315,1.076,329,0.892,351,1.155,354,1.692,365,1.086,371,1.343,372,1.571,375,1.057,377,1.066,388,1.039,391,1.097,413,0.793,417,1.68,429,0.892,440,2.326,445,3.804,447,1.076,448,2.901,470,1.422,515,1.744,524,1.108,549,1.155,557,1.048,558,1.013,569,1.182,581,1.066,585,0.714,596,1.634,606,2.043,626,2.727,630,0.909,636,4.15,637,3.098,649,1.321,652,1.197,658,1.367,659,1.155,691,1.131,744,1.901,745,1.744,759,2.24,765,1.143,774,1.321,788,1.197,789,4.13,808,1.057,809,2.176,810,1.244,812,1.523,813,1.656,824,3.132,844,1.097,868,4.561,869,1.03,875,1.227,877,2.725,886,1.367,899,0.898,909,1.155,978,1.097,1017,1.367,1041,1.244,1082,1.367,1092,1.866,1098,1.131,1166,1.367,1265,1.422,1425,1.718,1430,1.197,1440,0.865,1452,1.394,1737,1.021,1775,1.119,1792,1.367,1818,1.367,1819,1.244,1821,2.79,1865,1.3,1870,2.044,1882,1.076,1891,1.197,1899,3.189,1960,1.422,1964,1.227,2016,1.261,2017,3.031,2018,3.08,2019,1.367,2020,1.367,2021,1.367,2022,1.422,2023,1.343,2026,1.422,2028,1.422,2029,3.317,2045,3.031,2047,2.392,2068,1.367,2080,1.367,2081,1.367,2082,1.367,2083,1.367,2092,1.227,2093,1.367,2120,1.28,2135,4.349,2159,1.367,2160,1.489,2162,2.674,2163,1.573,2164,1.573,2165,1.573,2166,1.422,2167,1.573,2168,1.528,2169,1.573,2170,1.573,2171,1.573,2172,1.573,2173,1.573,2174,1.573,2175,1.454,2176,1.573,2177,1.573,2178,1.528,2179,2.753,2180,1.573,2181,1.573,2182,1.573,2183,1.573,2184,1.573,2185,1.573,2186,1.528,2187,1.573,2188,1.454,2189,1.573,2190,1.489,2191,1.573,2192,1.528,2193,1.573,2194,1.573,2195,1.573,2196,1.573,2197,1.573,2198,1.573,2199,1.689,2200,2.955,2201,1.689,2202,1.689,2203,1.689,2204,1.689,2205,1.689,2206,1.689,2207,1.689,2208,1.689,2209,1.689,2210,1.689,2211,1.689,2212,1.689,2213,1.689,2214,1.689,2215,1.689,2216,1.689,2217,3.94,2218,2.955,2219,1.689,2220,1.689,2221,1.689,2222,3.94,2223,1.626,2224,1.689,2225,1.689]],["component/113",[1,0.433]],["title/114-1",[68,28.869]],["name/114-1",[]],["text/114-1",[]],["component/114-1",[]],["title/114-2",[1440,34.843]],["name/114-2",[]],["text/114-2",[]],["component/114-2",[]],["title/114-3",[556,46.518]],["name/114-3",[]],["text/114-3",[]],["component/114-3",[]],["title/114-4",[2372,63.349]],["name/114-4",[]],["text/114-4",[]],["component/114-4",[]],["title/114-5",[2373,75.47]],["name/114-5",[]],["text/114-5",[]],["component/114-5",[]],["title/114-6",[329,23.932,658,36.681,2374,50.283]],["name/114-6",[]],["text/114-6",[]],["component/114-6",[]],["title/114-7",[875,49.413]],["name/114-7",[]],["text/114-7",[]],["component/114-7",[]],["title/114-8",[75,28.031,493,30.701]],["name/114-8",[]],["text/114-8",[]],["component/114-8",[]],["title/114",[309,30.922,585,22.984]],["name/114",[309,0.625,585,0.465]],["text/114",[11,1.876,24,2.184,28,1.261,33,1.809,44,2.963,49,1.004,52,2.05,64,2.069,65,1.355,66,1.968,68,1.238,69,1.55,73,2.148,74,3.099,75,3.018,76,1.913,78,2.315,82,1.383,83,1.842,98,2.425,103,1.322,128,1.735,140,2.502,147,1.859,182,2.178,208,1.531,239,2.042,243,1.581,261,1.477,264,1.55,270,1.513,274,2.042,280,1.671,281,2.21,283,1.825,288,1.413,293,3.719,309,1.659,311,1.591,314,1.953,316,2.571,329,3.092,354,3.836,356,2.692,373,1.635,374,2.092,388,1.794,392,1.764,433,2.456,440,3.609,509,1.974,538,2.066,549,1.995,554,1.335,556,4.005,567,2.018,585,3.725,596,1.613,626,1.683,630,1.57,639,1.764,657,2.12,658,2.361,745,1.722,773,5.93,844,1.894,875,3.399,877,3.236,899,2.486,920,3.355,942,2.32,947,2.571,948,2.281,978,3.037,1094,1.735,1216,2.32,1236,2.244,1379,2.639,1428,3.313,1430,2.066,1440,2.396,1737,2.828,1782,2.32,2046,2.571,2088,2.511,2223,2.808,2362,2.917,2372,2.717,2373,3.237,2374,5.191,2375,3.237,2376,3.237,2377,3.515,2378,3.515,2379,2.917,2380,2.717,2381,3.515,2382,3.515,2383,5.636,2384,3.237,2385,3.054,2386,5.191,2387,3.515,2388,2.808,2389,3.237,2390,3.237,2391,3.237,2392,3.515,2393,3.515,2394,5.191,2395,3.515,2396,3.054,2397,3.237,2398,3.515,2399,3.515,2400,3.515]],["component/114",[98,0.801]],["title/115-1",[12,20.469,34,26.336]],["name/115-1",[]],["text/115-1",[]],["component/115-1",[]],["title/115-2",[7,18.036,589,34.863,822,30.994]],["name/115-2",[]],["text/115-2",[]],["component/115-2",[]],["title/115-3",[622,57.266]],["name/115-3",[]],["text/115-3",[]],["component/115-3",[]],["title/115-4",[48,35.051]],["name/115-4",[]],["text/115-4",[]],["component/115-4",[]],["title/115",[423,33.729,476,26.92]],["name/115",[423,0.682,476,0.544]],["text/115",[1,0.603,7,0.857,12,2.094,13,1.726,14,1.381,16,3.186,17,1.335,19,1.261,20,1.61,21,1.525,24,2.597,31,1.717,34,1.763,35,4.097,39,2.291,40,1.923,41,1.618,43,1.251,44,0.952,48,3.206,49,2.475,53,1.048,56,1.144,57,1.242,60,0.902,61,1.674,62,1.411,64,3.181,66,3.313,68,2.866,70,1.656,82,1.02,85,1.077,88,1.224,90,1.544,94,1.291,98,2.453,114,1.897,117,1.411,138,1.854,142,1.631,143,1.683,144,1.683,147,1.371,150,2.518,160,1.947,161,3.2,163,1.411,171,1.525,173,1.947,181,1.426,185,2.801,187,1.323,189,1.717,191,1.27,193,1.656,196,1.312,204,1.347,206,1.456,210,1.897,214,1.215,243,1.166,258,1.564,261,1.09,270,1.887,271,1.852,275,1.564,277,1.631,278,2.149,280,3.186,282,1.525,283,1.347,285,1.233,288,2.291,295,1.198,298,1.852,320,1.506,354,1.233,364,1.215,366,2.364,372,1.144,377,1.359,381,1.631,385,1.544,388,1.323,400,1.472,411,3.072,422,1.233,423,1.335,440,1.059,451,1.947,474,2.49,476,1.065,493,1.215,514,1.198,529,1.371,569,3.894,575,1.544,580,1.489,587,3.483,589,3.64,593,1.607,596,2.012,616,3.724,622,1.812,623,1.585,625,2.072,636,1.261,638,2.258,652,1.525,771,1.607,783,1.812,788,1.525,822,4.255,841,3.294,844,2.364,847,1.897,868,1.544,869,1.312,885,1.812,894,1.897,899,2.514,937,3.065,955,3.065,963,1.656,978,1.398,1091,1.947,1119,1.897,1381,1.897,1430,2.579,1435,1.607,1737,1.301,2396,2.253,2401,2.593,2402,2.593,2403,2.593,2404,4.04,2405,4.953,2406,2.593,2407,4.386,2408,2.593,2409,2.593,2410,2.593,2411,2.593,2412,2.388,2413,2.152,2414,1.852,2415,2.152,2416,2.593,2417,2.593,2418,2.593,2419,2.593,2420,2.593,2421,2.593,2422,2.593,2423,2.388]],["component/115",[98,0.801]],["title/116-1",[788,38.526,883,42.522]],["name/116-1",[]],["text/116-1",[]],["component/116-1",[]],["title/116-2",[301,30.922,2424,60.354]],["name/116-2",[]],["text/116-2",[]],["component/116-2",[]],["title/116-3",[31,25.651,616,36.405]],["name/116-3",[]],["text/116-3",[]],["component/116-3",[]],["title/116-4",[212,38.526,616,36.405]],["name/116-4",[]],["text/116-4",[]],["component/116-4",[]],["title/116",[1440,34.843]],["name/116",[1440,1.005]],["text/116",[15,1.41,16,1.49,18,1.41,21,1.09,24,1.99,27,2.238,31,2.954,34,2.623,39,2.064,41,1.156,44,2.77,49,0.896,65,1.98,66,2.279,68,3.327,69,1.383,71,2.293,75,3.228,78,3.1,82,2.021,89,1.429,98,4.064,103,1.932,116,2.354,140,1.392,148,1.215,164,1.76,181,1.724,189,1.227,191,1.536,196,1.586,233,1.943,270,2.211,274,1.821,281,3.23,283,2.667,285,1.49,301,4.221,313,2.069,327,2.106,354,2.442,356,1.96,364,2.407,372,1.383,373,1.458,411,1.69,427,2.239,458,1.586,475,3.23,514,1.448,516,2.742,529,1.658,580,2.949,596,2.357,616,4.969,626,2.46,630,1.401,648,2.293,653,3.758,655,1.821,656,1.8,670,2.293,701,2.293,745,3.697,758,1.56,759,1.479,773,5.237,788,1.843,813,1.458,837,2.069,856,3.857,877,2.949,880,1.866,920,1.866,978,2.768,980,3.486,1040,3.419,1066,3.935,1439,2.002,1440,2.184,1737,1.573,1789,2.354,1814,2.002,1851,4.264,1931,2.239,1986,2.354,2023,2.069,2053,3.518,2153,2.602,2354,2.887,2414,2.239,2424,6.01,2425,3.135,2426,6.01,2427,2.724,2428,2.887,2429,3.135,2430,3.135,2431,3.135,2432,3.135,2433,3.135,2434,3.135,2435,3.135,2436,2.887,2437,2.724,2438,3.135,2439,3.135,2440,3.135,2441,3.135,2442,3.135,2443,3.135,2444,3.135,2445,5.137,2446,3.135,2447,2.887,2448,2.887,2449,3.135]],["component/116",[98,0.801]],["title/117-1",[375,34.027,908,31.613]],["name/117-1",[]],["text/117-1",[]],["component/117-1",[]],["title/117",[289,39.833]],["name/117",[289,1.149]],["text/117",[10,2.776,13,3.721,14,2.977,20,2.08,22,2.942,27,2.468,34,3.256,39,2.277,44,2.974,49,2.314,56,2.499,65,2.184,66,2.829,68,1.996,89,2.582,90,3.373,129,3.148,183,3.331,261,2.381,288,2.277,289,3.938,291,3.291,301,2.673,311,2.565,360,3.417,375,2.942,427,4.047,431,3.373,525,3.115,553,3.511,579,2.969,585,2.842,596,2.6,606,2.438,759,2.673,784,3.676,821,3.618,948,3.676,978,3.053,1050,3.879,1056,4.255,1059,3.739,1062,4.145,1064,5.257,1107,3.053,1176,4.255,1774,3.676,1775,3.115,1968,4.047,2088,4.047,2161,3.463,2450,7.462,2451,5.666,2452,4.703,2453,5.218,2454,5.218,2455,7.462,2456,5.218,2457,4.527,2458,5.666]],["component/117",[98,0.801]],["title/118",[93,41.118]],["name/118",[2459,2.054]],["text/118",[7,2.892,13,2.488,16,3.006,44,2.322,65,2.438,66,2.208,81,3.255,89,2.882,93,5.436,107,4.039,108,2.902,113,4.331,124,2.598,142,5.505,200,3.344,282,3.718,288,3.518,301,2.984,315,3.344,359,5.211,373,4.67,460,3.718,524,3.442,817,4.749,860,4.249,864,4.039,878,5.211,931,5.68,1060,4.104,1067,4.174,1738,4.627,2115,4.518,2245,4.749,2353,5.249,2459,7.606,2460,5.495,2461,5.825,2462,6.325,2463,5.825,2464,6.325,2465,6.325,2466,6.325,2467,5.495,2468,8.754,2469,6.325]],["component/118",[98,0.801]],["title/119-1",[52,29.804]],["name/119-1",[]],["text/119-1",[]],["component/119-1",[]],["title/119-2",[282,21.39,296,21.658,639,18.257,899,16.049,2470,31.614,2471,36.386]],["name/119-2",[]],["text/119-2",[]],["component/119-2",[]],["title/119-3",[69,28.906,899,28.906]],["name/119-3",[]],["text/119-3",[]],["component/119-3",[]],["title/119-4",[585,19.149,596,25.05,899,24.083]],["name/119-4",[]],["text/119-4",[]],["component/119-4",[]],["title/119",[64,24.059,639,32.883]],["name/119",[64,0.487,639,0.665]],["text/119",[7,1.438,10,1.259,24,0.996,27,1.12,28,0.922,44,0.944,48,1.099,49,2.313,52,0.935,64,3.331,65,1.678,66,2.828,69,4.551,73,2.661,75,2.851,81,1.323,82,1.011,85,1.809,89,1.171,98,4.332,147,1.359,196,1.3,212,1.511,230,4.256,264,1.92,270,1.106,278,1.259,282,3.329,283,3.461,291,2.529,295,2.011,296,1.53,311,1.971,327,1.727,351,1.459,354,2.691,356,0.981,358,2.591,360,1.55,372,1.92,375,1.335,386,1.55,409,1.443,411,2.346,433,1.796,445,3.329,474,1.459,493,4.042,514,1.187,520,1.696,549,2.471,556,1.459,585,3.183,596,1.179,616,1.428,626,1.231,627,1.593,639,5.289,745,1.259,759,2.672,822,2.471,860,2.925,889,1.93,893,3.269,899,5.157,949,1.836,978,1.385,980,1.187,983,1.93,985,1.93,1069,4.252,1107,2.346,1162,4.252,1263,2.591,1384,1.88,1435,2.698,1479,1.836,1891,1.511,1968,1.836,2006,3.185,2053,1.76,2121,1.88,2157,3.478,2257,2.233,2261,2.233,2379,2.133,2384,2.367,2415,2.133,2437,2.233,2452,2.133,2457,2.053,2460,3.783,2470,3.783,2472,2.57,2473,2.57,2474,6.479,2475,2.367,2476,4.009,2477,2.57,2478,5.663,2479,4.354,2480,4.354,2481,2.57,2482,2.57,2483,2.57,2484,2.57,2485,2.233,2486,4.354,2487,2.367,2488,2.233,2489,4.354,2490,4.009,2491,2.57,2492,2.57,2493,2.57,2494,2.57,2495,2.367,2496,2.57,2497,2.57,2498,2.57,2499,2.367]],["component/119",[98,0.801]],["title/120-1",[49,18.719,448,40.051]],["name/120-1",[]],["text/120-1",[]],["component/120-1",[]],["title/120",[49,18.719,98,28.2]],["name/120",[49,0.675]],["text/120",[7,2.72,10,1.503,11,1.638,12,1.577,13,1.207,17,1.579,19,1.492,20,1.853,24,1.189,25,2.101,34,1.233,39,1.233,40,1.345,41,1.132,44,1.853,49,2.128,52,2.338,56,2.836,57,2.417,58,1.902,59,1.902,60,1.067,62,3.499,64,1.127,66,3.268,67,3.93,68,3.764,70,1.96,75,2.75,78,1.261,81,1.579,87,1.991,89,1.398,90,1.827,98,3.543,103,2.418,138,1.297,142,1.93,181,1.687,185,2.109,186,1.313,187,1.566,189,1.976,193,1.96,196,3.253,203,1.469,208,1.337,212,1.804,230,1.96,243,2.27,261,1.29,280,3.056,281,1.93,288,2.029,289,1.492,293,4.243,301,1.448,305,1.593,309,1.448,319,1.902,351,1.742,356,1.171,357,1.96,363,2.145,372,1.354,373,1.428,414,2.245,415,1.827,417,1.448,457,1.991,469,1.902,482,1.783,488,1.991,503,2.192,524,1.67,535,2.304,558,1.527,567,1.762,569,2.932,583,1.448,585,1.076,589,1.96,602,2.192,606,2.172,611,2.101,616,1.705,622,2.145,745,1.503,821,3.223,822,3.65,831,1.762,844,1.654,865,3.174,899,1.354,920,1.827,948,1.991,978,1.654,980,1.418,998,2.304,1051,2.304,1107,1.654,1109,2.025,1170,1.991,1384,2.245,1430,1.804,1439,1.96,1440,1.305,1811,1.827,1882,1.623,1985,2.245,2015,2.304,2053,2.101,2115,2.192,2121,2.245,2138,2.547,2258,3.902,2372,2.372,2388,2.452,2396,2.666,2470,2.666,2500,3.069,2501,3.069,2502,3.069,2503,3.069,2504,2.826,2505,3.069,2506,2.826,2507,2.666,2508,2.666,2509,2.826,2510,3.069,2511,3.069,2512,3.069,2513,3.069,2514,2.826,2515,2.826,2516,3.069,2517,3.069,2518,3.069,2519,3.069,2520,3.069,2521,3.069,2522,3.069,2523,3.069]],["component/120",[98,0.801]],["title/121",[56,24.083,70,34.863,98,23.495]],["name/121",[2,1.51]],["text/121",[1,2.383,19,3.895,21,2.786,25,5.487,34,3.22,49,2.289,56,4.52,64,3.762,65,3.089,66,3.579,191,3.925,319,4.966,429,3.513,525,4.406,555,5.724,556,4.549,585,2.811,758,3.988,884,5.862,899,3.535,2090,5.6,2380,6.195,2524,8.014,2525,6.963,2526,6.651]],["component/121",[98,0.801]],["title/122",[440,33.476]],["name/122",[440,0.966]],["text/122",[17,3.841,43,3.601,56,3.292,64,2.74,65,2.877,66,2.606,70,4.766,89,3.401,98,4.212,147,3.947,150,4.285,191,3.656,204,3.875,243,3.356,270,3.212,354,3.547,440,3.998,476,3.066,583,3.522,585,2.618,670,7.16,701,7.16,706,5.605,759,3.522,766,5.605,860,5.014,864,4.766,908,3.601,1428,4.388,1440,3.174,2166,5.216,2527,7.464,2528,7.464]],["component/122",[98,0.801]],["title/123-1",[652,38.526,2529,54.392]],["name/123-1",[]],["text/123-1",[]],["component/123-1",[]],["title/123-2",[243,36.85]],["name/123-2",[]],["text/123-2",[]],["component/123-2",[]],["title/123-3",[2529,68.014]],["name/123-3",[]],["text/123-3",[]],["component/123-3",[]],["title/123-4",[593,50.786]],["name/123-4",[]],["text/123-4",[]],["component/123-4",[]],["title/123-5",[569,38.065,963,41.846]],["name/123-5",[]],["text/123-5",[]],["component/123-5",[]],["title/123-6",[1964,49.413]],["name/123-6",[]],["text/123-6",[]],["component/123-6",[]],["title/123-7",[375,34.027,908,31.613]],["name/123-7",[]],["text/123-7",[]],["component/123-7",[]],["title/123",[]],["name/123",[2529,1.962]],["text/123",[10,1.907,14,1.924,18,1.75,21,2.124,38,2.43,39,1.564,41,1.436,44,1.429,48,1.665,49,2.155,56,1.717,65,1.5,66,2.984,70,3.902,78,1.599,89,1.774,90,3.638,103,1.464,117,2.118,129,2.162,183,2.288,185,1.626,186,1.665,188,2.058,243,2.748,263,3.685,270,2.63,280,1.85,287,1.436,288,1.564,289,1.892,295,1.798,309,1.837,311,1.762,329,1.706,351,2.209,354,2.904,356,1.485,381,2.448,400,2.209,427,2.78,429,1.706,431,2.317,440,1.59,475,3.843,476,1.599,554,1.478,562,2.485,569,3.55,579,2.039,585,2.143,586,4.47,587,3.735,606,2.63,617,3.11,630,1.739,646,2.847,652,2.288,657,2.347,759,1.837,784,2.526,821,2.485,822,2.209,877,2.235,947,2.847,963,3.902,1040,2.039,1062,2.847,1064,2.526,1204,2.448,1378,2.235,1440,1.655,1716,2.847,1774,2.526,1775,2.14,1791,3.685,1870,2.235,1968,2.78,1976,5.519,2016,2.412,2095,2.78,2096,2.78,2097,2.847,2161,2.379,2188,2.78,2362,3.23,2380,4.724,2452,3.23,2453,3.585,2454,3.585,2455,5.628,2456,3.585,2509,3.585,2529,5.072,2530,3.892,2531,3.892,2532,3.892,2533,3.585,2534,3.585,2535,6.111,2536,3.585,2537,3.892,2538,3.892,2539,9.857,2540,3.892,2541,3.892,2542,7.545,2543,3.892,2544,3.892]],["component/123",[98,0.801]],["title/124-1",[272,43.247,911,49.21]],["name/124-1",[]],["text/124-1",[]],["component/124-1",[]],["title/124-2",[218,25.009,656,37.624]],["name/124-2",[]],["text/124-2",[]],["component/124-2",[]],["title/124-3",[639,27.396,899,24.083,2545,42.208]],["name/124-3",[]],["text/124-3",[]],["component/124-3",[]],["title/124-4",[69,18.057,287,15.1,375,21.256,639,20.541,899,18.057]],["name/124-4",[]],["text/124-4",[]],["component/124-4",[]],["title/124-5",[69,16.049,322,14.701,375,18.892,585,12.761,639,18.257,899,16.049]],["name/124-5",[]],["text/124-5",[]],["component/124-5",[]],["title/124-6",[375,21.256,413,15.941,639,20.541,899,18.057,2545,31.647]],["name/124-6",[]],["text/124-6",[]],["component/124-6",[]],["title/124-7",[1,8.461,49,10.393,68,12.818,375,18.892,996,17.964,1440,15.471]],["name/124-7",[]],["text/124-7",[]],["component/124-7",[]],["title/124-8",[899,24.083,2545,42.208,2546,50.283]],["name/124-8",[]],["text/124-8",[]],["component/124-8",[]],["title/124-9",[52,23.834,2547,65.536]],["name/124-9",[]],["text/124-9",[]],["component/124-9",[]],["title/124-10",[2372,63.349]],["name/124-10",[]],["text/124-10",[]],["component/124-10",[]],["title/124-11",[980,21.615,1545,32.698,2548,43.093,2549,43.093]],["name/124-11",[]],["text/124-11",[]],["component/124-11",[]],["title/124-12",[639,32.883,899,28.906]],["name/124-12",[]],["text/124-12",[]],["component/124-12",[]],["title/124-13",[631,48.175]],["name/124-13",[]],["text/124-13",[]],["component/124-13",[]],["title/124-14",[49,13.365,420,21.615,440,19.115,556,26.562]],["name/124-14",[]],["text/124-14",[]],["component/124-14",[]],["title/124-15",[125,40.785]],["name/124-15",[]],["text/124-15",[]],["component/124-15",[]],["title/124-16",[2550,60.354,2551,60.354]],["name/124-16",[]],["text/124-16",[]],["component/124-16",[]],["title/124-17",[1440,19.895,1545,32.698,2228,38.835,2552,43.093]],["name/124-17",[]],["text/124-17",[]],["component/124-17",[]],["title/124-18",[2372,63.349]],["name/124-18",[]],["text/124-18",[]],["component/124-18",[]],["title/124-19",[639,32.883,899,28.906]],["name/124-19",[]],["text/124-19",[]],["component/124-19",[]],["title/124-20",[631,48.175]],["name/124-20",[]],["text/124-20",[]],["component/124-20",[]],["title/124-21",[631,48.175]],["name/124-21",[]],["text/124-21",[]],["component/124-21",[]],["title/124",[2545,63.349]],["name/124",[2545,1.828]],["text/124",[1,0.355,7,4.031,10,0.395,11,1.159,14,0.254,15,0.363,16,0.725,17,0.415,18,0.686,23,0.605,27,0.351,28,1.51,31,0.597,33,0.415,34,1.32,39,0.613,41,0.297,44,1.012,49,0.938,52,0.555,56,2.628,57,1.319,63,1.118,64,2.187,65,0.837,66,1.743,67,1.684,68,0.971,69,2.201,71,0.59,74,0.443,75,1.612,76,0.439,78,1.35,80,0.395,82,0.6,85,0.335,98,0.657,103,1.417,125,0.759,134,0.486,146,0.59,148,0.842,161,0.453,166,1.845,177,0.605,185,1.151,209,0.383,212,0.474,218,0.308,240,0.766,242,0.36,243,0.977,261,1.158,266,1.974,270,0.657,276,0.422,277,0.507,280,1.791,283,0.792,288,0.324,291,0.468,311,0.365,312,1.788,314,1.531,319,0.5,321,0.439,326,0.453,329,1.208,351,0.866,363,0.563,367,0.532,371,0.532,372,0.673,382,1.733,400,0.458,402,0.335,410,0.523,411,0.434,420,0.705,433,0.563,440,3.593,458,0.408,497,0.715,503,0.576,505,0.448,554,1.895,556,4.921,557,0.415,558,1.875,579,0.799,581,0.422,585,1.872,595,0.644,596,0.7,604,0.443,616,1.531,626,0.386,630,1.881,631,0.474,632,0.605,638,1.118,639,2.989,646,0.59,652,0.474,655,1.262,657,1.662,744,2.011,745,1.35,758,1.372,773,2.648,783,0.563,813,1.282,831,0.463,836,1.589,839,1.433,854,0.48,858,0.563,864,0.515,865,0.507,875,2.784,892,0.59,899,4.08,912,0.448,936,0.59,937,1.926,939,0.532,952,1.35,980,3.501,987,0.448,1034,0.532,1043,0.974,1066,0.92,1204,0.96,1236,0.974,1263,1.956,1378,0.876,1426,0.507,1439,0.974,1440,1.963,1452,0.552,1505,1.788,1545,2.296,1727,0.92,1737,1.09,1756,0.507,1768,0.59,1790,0.576,1796,1.631,1797,0.576,1808,0.523,1811,2.243,1812,2.016,1821,1.277,1830,0.605,1837,1.684,1838,2.202,1846,1.887,1975,1.819,1980,3.08,2006,3.904,2017,0.974,2027,0.576,2033,1.851,2046,1.116,2069,1.146,2088,0.576,2119,0.605,2136,0.669,2142,2.016,2188,1.09,2228,3.831,2238,1.219,2245,0.605,2249,2.287,2250,2.287,2251,2.287,2252,2.287,2253,2.287,2254,2.287,2267,0.7,2336,2.538,2337,2.538,2338,2.538,2362,0.669,2372,4.126,2386,3.47,2389,1.405,2390,1.405,2391,4.252,2404,0.742,2405,0.7,2490,1.405,2495,0.742,2545,7.817,2546,0.742,2548,1.405,2549,2.538,2550,7.597,2551,2.538,2552,2.538,2553,0.806,2554,0.806,2555,0.806,2556,0.806,2557,0.806,2558,0.806,2559,0.806,2560,0.806,2561,0.806,2562,1.526,2563,0.806,2564,0.806,2565,0.806,2566,0.806,2567,1.526,2568,0.806,2569,0.806,2570,0.806,2571,0.806,2572,0.742,2573,0.806,2574,0.806,2575,1.526,2576,0.806,2577,0.806,2578,0.806,2579,0.806,2580,1.526,2581,0.806,2582,1.526,2583,0.806,2584,2.172,2585,0.806,2586,2.756,2587,2.172,2588,2.172,2589,0.806,2590,0.806,2591,1.405,2592,0.7,2593,0.742,2594,0.806,2595,2.172,2596,0.806,2597,1.526,2598,5.957,2599,5.957,2600,0.7,2601,3.286,2602,2.756,2603,1.526,2604,2.756,2605,1.526,2606,1.526,2607,1.405,2608,1.526,2609,1.526,2610,1.526,2611,0.806,2612,1.526,2613,0.806,2614,2.172,2615,0.806,2616,2.756,2617,0.806,2618,2.172,2619,0.806,2620,0.806,2621,0.806,2622,0.806,2623,0.806,2624,0.806,2625,0.806,2626,0.806,2627,2.172,2628,0.806,2629,1.526,2630,1.526,2631,0.806,2632,0.806,2633,0.806,2634,0.806,2635,0.806,2636,0.806,2637,0.806,2638,0.806,2639,0.806,2640,0.806,2641,1.405,2642,0.806,2643,1.526,2644,0.806,2645,0.806,2646,0.806,2647,0.806,2648,0.742]],["component/124",[98,0.801]],["title/125-1",[45,25.725,164,26.272,287,17.259,2649,40.656]],["name/125-1",[]],["text/125-1",[]],["component/125-1",[]],["title/125-2",[46,29.878,47,23.478,49,13.365,322,18.906]],["name/125-2",[]],["text/125-2",[]],["component/125-2",[]],["title/125-3",[49,10.393,413,14.168,420,16.808,822,20.654,826,25.99,1813,26.617]],["name/125-3",[]],["text/125-3",[]],["component/125-3",[]],["title/125-4",[75,20.014,826,33.423,1084,35.136,1436,35.136]],["name/125-4",[]],["text/125-4",[]],["component/125-4",[]],["title/125-5",[822,26.562,1440,19.895,1882,24.741,2650,46.793]],["name/125-5",[]],["text/125-5",[]],["component/125-5",[]],["title/125-6",[64,20.044,1440,23.215,2651,54.601]],["name/125-6",[]],["text/125-6",[]],["component/125-6",[]],["title/125-7",[616,36.405,2652,65.536]],["name/125-7",[]],["text/125-7",[]],["component/125-7",[]],["title/125",[45,36.029,243,29.47]],["name/125",[45,1.3]],["text/125",[7,2.045,13,0.904,24,1.533,27,2.697,30,1.468,39,0.924,41,1.922,43,1.909,44,2.273,45,5.147,46,3.327,47,3.502,49,1.488,52,0.836,64,0.844,66,0.803,68,0.81,75,4.132,78,2.141,83,1.204,85,1.644,88,1.085,98,0.989,103,1.488,108,1.055,123,1.109,128,1.135,139,1.726,140,1.757,143,1.492,148,2.019,150,2.272,164,1.291,169,1.153,185,0.96,189,1.549,196,1.163,204,1.194,208,2.27,230,1.468,251,1.194,264,3.978,266,1.204,270,2.242,271,1.642,274,1.335,279,1.517,282,1.351,283,1.194,289,1.117,298,1.642,301,1.085,309,1.867,311,1.041,315,1.216,319,1.425,320,1.335,322,0.929,329,1.008,354,1.881,356,0.877,364,1.077,372,1.014,373,1.069,375,1.194,378,2.612,410,2.568,417,1.867,420,1.062,448,1.405,474,1.305,482,1.335,486,1.425,491,2.755,497,1.077,505,1.277,514,1.062,524,1.251,546,1.048,553,1.425,554,0.873,561,1.204,580,1.32,599,1.726,613,1.837,626,1.101,630,1.027,632,1.726,638,2.037,684,1.726,745,1.126,758,1.144,822,5.314,824,1.517,826,6.442,860,1.544,865,1.446,869,1.163,875,1.386,895,1.368,899,1.014,906,1.682,908,1.109,918,1.468,921,1.726,930,1.386,955,2.766,978,1.239,980,1.828,1004,1.386,1040,2.073,1092,2.73,1120,1.726,1361,1.726,1426,1.446,1435,2.453,1440,2.967,1453,1.544,1476,1.405,1711,2.972,1727,1.386,1733,1.726,1740,2.972,1756,1.446,1769,1.726,1793,1.726,1811,1.368,1813,1.682,1815,1.726,1821,2.327,1882,1.216,1982,1.642,2045,1.468,2175,1.642,2178,1.726,2265,3.439,2339,1.997,2340,1.837,2385,1.997,2388,1.837,2447,2.117,2448,4.799,2507,1.997,2508,1.997,2515,2.117,2649,1.997,2653,2.117,2654,2.299,2655,2.299,2656,2.299,2657,2.299,2658,2.299,2659,2.299,2660,1.908,2661,2.299,2662,2.299,2663,2.299,2664,2.299,2665,2.299,2666,2.299,2667,2.299,2668,2.299,2669,2.299,2670,2.299,2671,2.299,2672,2.299,2673,2.299,2674,2.299,2675,1.997,2676,2.117,2677,2.117,2678,3.958,2679,2.299,2680,2.299,2681,2.299,2682,2.299,2683,2.117,2684,3.958,2685,6.191,2686,2.299,2687,2.299,2688,2.299,2689,2.299,2690,2.299,2691,2.117,2692,2.299,2693,2.299,2694,2.117,2695,2.299,2696,2.299,2697,2.299,2698,2.299]],["component/125",[98,0.801]],["title/126-1",[49,15.596,637,26.142,651,39.941]],["name/126-1",[]],["text/126-1",[]],["component/126-1",[]],["title/126-2",[48,23.354,636,26.54,943,39.001]],["name/126-2",[]],["text/126-2",[]],["component/126-2",[]],["title/126-3",[637,31.377,822,37.201]],["name/126-3",[]],["text/126-3",[]],["component/126-3",[]],["title/126-4",[48,20.014,636,22.744,637,22.403,2699,43.093]],["name/126-4",[]],["text/126-4",[]],["component/126-4",[]],["title/126",[48,28.031,636,31.855]],["name/126",[636,1.149]],["text/126",[2,1.585,7,2.626,10,1.216,11,1.325,21,0.863,24,0.962,27,1.081,34,1.699,41,0.916,44,2.683,48,4.252,49,2.913,57,1.189,60,1.919,64,0.911,66,2.551,68,2.801,78,1.736,82,0.977,98,2.375,113,1.7,123,1.197,128,1.226,148,0.962,162,1.325,185,1.766,189,1.654,202,2.235,247,1.983,251,2.195,270,2.375,281,2.658,283,1.289,287,1.559,297,1.139,301,1.171,314,2.348,315,1.313,322,1.003,351,2.399,354,2.009,356,0.947,360,3.328,413,0.967,417,1.171,445,2.485,458,1.256,475,5.619,482,1.442,515,1.216,516,1.325,533,3.174,538,1.459,556,1.409,575,1.478,606,1.819,623,1.517,636,4.833,637,4.621,651,4.037,657,3.328,745,1.216,759,1.171,808,1.289,822,2.399,831,1.425,842,3.066,850,1.478,851,3.174,869,1.256,885,1.735,896,1.365,902,1.773,906,1.816,943,1.773,963,2.699,977,1.497,978,1.338,991,1.478,1033,1.497,1092,3.414,1426,1.561,1440,1.797,1472,1.864,1500,1.864,1545,5.106,1567,1.638,1789,1.864,1797,3.019,1843,1.864,1931,1.773,1967,3.174,1975,2.789,1990,1.983,1998,1.864,2016,1.538,2017,2.699,2018,1.611,2044,1.864,2095,1.773,2096,3.019,2127,1.864,2157,1.983,2168,3.174,2186,1.864,2232,4.795,2414,1.773,2526,2.06,2660,2.06,2699,5.083,2700,5.519,2701,2.482,2702,4.227,2703,2.482,2704,2.482,2705,2.482,2706,2.482,2707,2.482,2708,2.482,2709,2.482,2710,2.482,2711,2.482,2712,2.482,2713,2.482,2714,2.286,2715,2.286,2716,2.482,2717,2.482,2718,2.482,2719,2.482,2720,5.519,2721,5.519,2722,2.482,2723,7.307,2724,6.516,2725,2.482,2726,2.482,2727,4.227,2728,4.227,2729,2.482,2730,2.482]],["component/126",[98,0.801]],["title/127-1",[288,32.932]],["name/127-1",[]],["text/127-1",[]],["component/127-1",[]],["title/127",[476,33.662]],["name/127",[476,0.971]],["text/127",[1,0.933,10,3.452,11,4.106,12,1.955,13,3.027,14,1.66,15,1.05,18,1.05,20,2.587,22,2.083,25,1.599,30,1.491,32,1.017,34,2.832,35,2.452,39,2.515,41,1.945,44,0.858,49,1.788,56,3.833,57,2.996,58,1.448,59,1.448,60,0.812,61,0.891,63,1.202,64,2.297,65,0.9,66,3.171,68,2.71,69,1.03,70,2.562,85,0.97,90,1.39,95,1.428,98,3.908,122,1.921,123,1.935,128,1.153,140,1.037,162,2.142,175,1.709,182,1.448,185,0.976,189,1.57,191,1.144,196,1.182,212,4.143,270,1.005,271,1.669,275,2.419,278,1.144,280,2.507,288,0.939,293,1.541,295,1.079,309,1.102,319,1.448,320,2.33,321,2.184,327,1.569,356,1.531,372,1.03,373,1.087,378,1.541,388,1.192,400,2.278,408,1.298,423,2.065,429,1.024,440,1.639,448,1.428,476,0.96,497,1.094,509,1.311,514,1.079,522,1.754,524,2.87,525,1.284,549,1.326,554,0.887,555,1.669,556,1.326,557,1.202,567,2.303,569,2.33,580,2.303,583,1.893,585,1.85,587,1.428,589,1.491,596,2.871,622,2.804,634,1.599,636,1.95,648,1.709,758,1.997,822,1.326,831,1.341,835,1.754,839,1.541,844,1.259,858,1.632,864,2.562,876,1.516,885,1.632,892,1.709,894,1.709,902,1.669,937,3.686,949,1.669,978,1.259,1066,1.408,1364,1.491,1369,1.541,1428,2.359,1439,3.996,1440,0.993,1737,1.172,1771,1.754,1932,1.709,1992,1.866,2060,1.754,2090,1.632,2162,1.754,2166,1.632,2258,1.806,2280,1.939,2340,1.866,2375,2.151,2380,1.806,2405,3.486,2412,2.151,2413,1.939,2414,1.669,2415,1.939,2452,1.939,2461,2.151,2476,2.151,2504,2.151,2507,2.03,2525,2.03,2526,1.939,2536,2.151,2592,2.03,2600,2.03,2731,2.336,2732,2.336,2733,4.012,2734,2.336,2735,2.336,2736,2.336,2737,2.336,2738,2.151,2739,2.336,2740,2.336,2741,2.336,2742,2.336,2743,7.047,2744,2.336,2745,2.336,2746,2.336,2747,2.336,2748,2.336,2749,2.336,2750,2.151,2751,2.336,2752,2.336,2753,2.336,2754,2.336,2755,2.336,2756,2.336,2757,2.336,2758,2.336,2759,2.336,2760,2.336]],["component/127",[98,0.801]],["title/128-1",[264,28.906,2761,60.354]],["name/128-1",[]],["text/128-1",[]],["component/128-1",[]],["title/128",[29,46.812,48,28.031]],["name/128",[29,0.947,48,0.567]],["text/128",[7,2.055,10,1.95,24,1.542,27,1.734,29,6.181,33,2.049,34,1.6,48,4.256,49,2.97,54,5.052,65,1.535,66,1.39,68,1.403,69,2.744,75,1.703,78,2.555,88,1.879,98,1.713,103,1.497,128,1.966,140,1.767,189,1.558,214,1.865,264,4.586,283,2.067,311,1.802,329,1.745,356,1.519,357,2.542,363,2.782,457,2.583,529,2.105,554,1.512,556,2.26,596,1.827,626,1.906,630,2.779,636,4.206,637,4.764,822,4.912,868,2.37,896,2.189,952,1.95,1107,2.146,1426,3.912,1435,5.363,1440,2.645,1476,4.678,1756,2.504,1821,2.341,1854,4.259,1867,4.671,1968,2.844,2130,2.912,2487,3.667,2660,3.304,2677,3.667,2683,7.05,2691,7.05,2694,3.667,2761,7.969,2762,3.459,2763,3.667,2764,3.459,2765,3.981,2766,8.653,2767,3.981,2768,3.981,2769,7.655,2770,3.981,2771,3.981,2772,7.655,2773,6.22,2774,6.22,2775,3.981,2776,3.981,2777,3.981]],["component/128",[98,0.801]],["title/129-1",[593,50.786]],["name/129-1",[]],["text/129-1",[]],["component/129-1",[]],["title/129-2",[82,21.482,212,32.098,243,24.552]],["name/129-2",[]],["text/129-2",[]],["component/129-2",[]],["title/129-3",[45,45.053]],["name/129-3",[]],["text/129-3",[]],["component/129-3",[]],["title/129-4",[31,32.075]],["name/129-4",[]],["text/129-4",[]],["component/129-4",[]],["title/129-5",[45,45.053]],["name/129-5",[]],["text/129-5",[]],["component/129-5",[]],["title/129-6",[45,45.053]],["name/129-6",[]],["text/129-6",[]],["component/129-6",[]],["title/129-7",[593,50.786]],["name/129-7",[]],["text/129-7",[]],["component/129-7",[]],["title/129-8",[64,24.059,493,30.701]],["name/129-8",[]],["text/129-8",[]],["component/129-8",[]],["title/129-9",[48,28.031,636,31.855]],["name/129-9",[]],["text/129-9",[]],["component/129-9",[]],["title/129",[243,36.85]],["name/129",[243,1.063]],["text/129",[12,1.749,15,1.568,24,3.409,27,1.519,31,1.365,34,3.536,38,1.386,39,1.401,44,1.28,45,4.838,46,2.226,47,1.75,48,1.491,49,2.004,62,1.898,63,2.882,64,2.056,66,1.218,78,1.432,81,2.882,88,1.645,89,1.589,93,1.75,98,2.41,103,1.311,113,2.388,117,3.819,138,2.367,147,2.961,150,2.002,161,1.958,185,2.34,186,1.491,208,2.439,212,2.05,243,4.616,261,1.465,270,1.5,283,1.81,287,1.286,289,1.695,291,2.025,309,1.645,315,1.844,364,1.633,375,1.81,381,5.052,400,1.979,417,1.645,440,3.838,448,2.131,475,3.521,477,3.437,493,2.623,562,2.226,580,2.002,593,4.979,596,2.569,606,1.5,636,2.722,637,1.669,644,2.618,652,2.05,657,3.377,759,1.645,783,2.437,789,1.879,844,1.879,858,2.437,885,3.913,937,2.437,943,2.491,978,1.879,1082,2.343,1378,2.002,1716,2.551,1737,1.75,1976,5.133,2016,2.161,2042,2.437,2095,2.491,2096,2.491,2097,2.551,2115,2.491,2245,2.618,2394,3.211,2414,5.013,2427,7.645,2457,2.786,2533,3.211,2534,3.211,2600,3.03,2675,4.866,2676,3.211,2715,3.211,2764,3.03,2778,3.487,2779,3.487,2780,3.487,2781,3.487,2782,3.487,2783,3.487,2784,3.487,2785,3.487,2786,3.487,2787,3.03,2788,3.487,2789,3.487,2790,3.487,2791,3.487]],["component/129",[98,0.801]],["title/130",[2792,75.47]],["name/130",[2792,2.177]],["text/130",[22,3.237,31,2.44,35,3.81,41,2.3,49,1.781,56,2.75,64,2.289,66,2.177,68,3.053,77,3.054,98,2.683,103,2.344,107,5.534,142,3.92,147,3.296,189,3.392,212,3.665,270,2.683,280,4.119,283,3.237,288,2.505,293,4.114,319,3.864,509,3.5,516,3.328,549,3.539,562,3.981,569,5.034,581,3.266,583,2.942,585,2.186,587,3.81,599,4.681,622,6.056,864,6.361,1738,4.56,1838,4.981,2245,4.681,2258,4.819,2340,4.981,2388,4.981,2459,5.417,2463,5.741,2592,5.417,2793,6.234,2794,6.234,2795,6.234,2796,6.234,2797,6.234,2798,6.234,2799,6.234,2800,6.234]],["component/130",[98,0.801]],["title/131-1",[212,48.175]],["name/131-1",[]],["text/131-1",[]],["component/131-1",[]],["title/131-2",[48,35.051]],["name/131-2",[]],["text/131-2",[]],["component/131-2",[]],["title/131-3",[585,28.74]],["name/131-3",[]],["text/131-3",[]],["component/131-3",[]],["title/131-4",[66,19.064,98,23.495,2801,50.283]],["name/131-4",[]],["text/131-4",[]],["component/131-4",[]],["title/131",[66,22.883,98,28.2]],["name/131",[66,0.463,98,0.57]],["text/131",[1,0.68,7,1.603,12,0.509,13,1.151,14,0.921,18,1.316,21,1.017,24,0.632,25,1.117,27,1.734,32,0.711,34,2.499,35,0.997,39,0.655,41,1.079,43,0.787,44,1.074,48,3.92,49,2.842,52,1.064,54,1.076,56,2.141,57,2.676,64,2.283,65,1.534,66,3.53,68,1.969,70,2.541,75,2.076,78,2.778,81,1.506,88,0.77,90,0.971,93,1.468,98,4.039,103,0.613,108,0.748,120,0.659,128,2.396,130,1.076,141,1.661,150,0.936,164,0.916,175,1.193,189,1.145,191,0.799,208,0.711,212,4.717,239,0.947,242,1.307,243,1.316,261,2.841,264,4.23,270,1.259,275,0.984,280,1.891,283,1.519,288,0.655,289,1.422,293,1.076,300,0.879,301,2.29,311,0.738,314,2.211,319,2.466,320,0.947,327,1.966,351,1.661,356,1.117,360,0.984,364,1.371,372,0.719,374,0.971,385,0.971,400,0.926,408,0.906,414,1.193,423,1.506,429,0.715,433,1.14,436,1.076,447,1.547,482,0.947,488,1.899,493,2.619,497,0.764,503,1.165,509,0.916,514,0.753,515,0.799,524,0.888,525,1.609,555,2.09,556,2.755,558,0.812,567,0.936,579,0.855,580,3.882,583,1.878,585,2.538,596,2.227,606,1.259,610,0.959,616,0.906,626,1.401,630,0.729,636,2.359,709,0.984,744,0.871,758,0.812,765,1.643,772,1.058,773,1.026,806,0.984,822,2.755,831,0.936,842,0.906,844,0.879,864,2.541,878,0.971,895,0.971,896,1.609,948,1.058,949,2.09,952,2.377,978,1.577,980,3.706,987,0.906,1040,2.085,1094,1.965,1107,3.899,1170,1.058,1209,1.026,1234,1.931,1236,1.041,1241,1.193,1257,1.225,1261,1.076,1439,1.041,1440,1.692,1453,1.096,1731,2.197,1737,0.818,1756,1.026,1768,1.193,1788,1.117,1854,2.004,1856,1.261,1867,2.988,1968,1.165,1982,2.09,2018,1.058,2053,1.117,2090,1.14,2130,2.141,2166,1.14,2192,1.225,2280,1.354,2339,1.417,2380,1.261,2397,1.502,2413,1.354,2414,2.843,2423,2.695,2437,1.417,2457,1.303,2460,1.417,2499,1.502,2506,1.502,2508,1.417,2525,1.417,2526,1.354,2591,5.148,2607,1.502,2762,1.417,2763,1.502,2787,1.417,2801,3.665,2802,1.631,2803,3.98,2804,1.631,2805,1.631,2806,2.926,2807,1.631,2808,2.926,2809,1.631,2810,1.631,2811,1.631,2812,1.417,2813,1.631,2814,1.631,2815,1.631,2816,1.631,2817,1.631,2818,1.631,2819,1.631,2820,1.631,2821,1.631,2822,1.631,2823,1.631,2824,1.631]],["component/131",[98,0.801]],["title/132-1",[68,23.087,2379,54.392]],["name/132-1",[]],["text/132-1",[]],["component/132-1",[]],["title/132-2",[980,37.856]],["name/132-2",[]],["text/132-2",[]],["component/132-2",[]],["title/132",[66,28.614]],["name/132",[66,0.826]],["text/132",[24,1.788,27,4.073,34,2.8,35,2.82,39,2.8,41,1.702,44,1.694,48,2.98,49,1.318,52,1.678,57,2.209,66,3.505,68,2.454,78,1.896,81,2.375,93,2.315,98,4.715,108,2.117,212,4.096,214,2.162,230,2.947,264,2.035,278,2.26,289,2.243,301,2.177,329,2.023,440,2.846,525,2.537,548,4.598,553,2.86,556,2.62,558,2.297,580,5.368,581,2.418,585,3.279,587,2.82,596,3.851,606,1.986,610,2.713,619,2.994,758,3.467,771,2.86,773,2.902,869,2.335,884,3.376,899,3.073,908,3.361,957,3.465,980,3.877,1440,1.962,1870,2.649,1891,4.096,2053,3.16,2379,5.782,2380,3.567,2414,5.995,2427,6.053,2457,3.687,2474,4.009,2750,4.25,2825,4.615,2826,6.967,2827,6.967,2828,10.037,2829,4.615]],["component/132",[98,0.801]],["title/133-1",[48,23.354,583,25.762,606,23.495]],["name/133-1",[]],["text/133-1",[]],["component/133-1",[]],["title/133-2",[583,22.078,839,30.878,2092,28.215,2238,37.382]],["name/133-2",[]],["text/133-2",[]],["component/133-2",[]],["title/133-3",[56,24.083,66,19.064,839,36.031]],["name/133-3",[]],["text/133-3",[]],["component/133-3",[]],["title/133-4",[448,33.368,789,29.424,2764,47.44]],["name/133-4",[]],["text/133-4",[]],["component/133-4",[]],["title/133",[583,38.666]],["name/133",[583,1.116]],["text/133",[7,2.849,20,2.509,21,1.886,22,4.478,24,2.102,32,2.977,34,1.347,41,2.001,48,2.923,49,2.243,52,1.973,56,3.804,64,1.231,66,1.894,68,1.181,74,1.843,75,3.359,78,1.377,82,1.319,84,2.924,89,1.528,98,2.335,102,2.212,113,2.296,144,2.175,159,1.971,161,3.837,182,2.078,189,1.312,208,2.363,243,1.508,264,1.479,268,2.517,270,1.443,274,1.947,280,1.593,287,1.237,292,2.212,315,4.56,316,2.452,354,1.593,360,2.022,402,1.393,440,2.792,511,2.869,514,1.549,515,1.642,529,1.773,546,3.579,567,3.115,583,5.515,588,2.678,596,1.538,637,3.272,649,2.175,655,1.947,656,1.925,759,2.56,783,2.343,789,5.236,808,1.741,828,2.517,850,1.996,862,2.212,864,3.464,899,1.479,912,1.862,931,2.175,936,2.452,1060,2.175,1082,2.252,1095,2.452,1241,2.452,1457,5.131,1516,2.517,1837,3.316,2017,2.141,2134,2.517,2175,3.875,2238,2.678,2259,4.714,2353,2.783,2467,2.913,2474,2.913,2485,2.913,2762,2.913,2830,3.353,2831,3.353,2832,3.353,2833,3.353,2834,3.353,2835,3.353,2836,3.353,2837,3.353,2838,3.353,2839,5.425,2840,5.425,2841,3.353,2842,3.353,2843,3.353,2844,3.353,2845,3.353,2846,3.353,2847,3.353]],["component/133",[98,0.801]],["title/134-1",[880,27.853,2042,32.698,2848,46.793,2849,43.093]],["name/134-1",[]],["text/134-1",[]],["component/134-1",[]],["title/134-2",[103,13.681,303,23.609,708,27.321,773,22.881,2850,36.386,2851,36.386]],["name/134-2",[]],["text/134-2",[]],["component/134-2",[]],["title/134-3",[49,10.393,62,19.803,186,15.563,187,18.566,288,14.622,417,17.168]],["name/134-3",[]],["text/134-3",[]],["component/134-3",[]],["title/134-4",[293,36.031,2042,38.155,2852,54.601]],["name/134-4",[]],["text/134-4",[]],["component/134-4",[]],["title/134-5",[40,23.932,789,29.424,822,30.994]],["name/134-5",[]],["text/134-5",[]],["component/134-5",[]],["title/134-6",[303,26.562,822,23.238,2040,29.947,2045,26.14,2853,40.938]],["name/134-6",[]],["text/134-6",[]],["component/134-6",[]],["title/134",[2161,50.081]],["name/134",[2161,1.445]],["text/134",[7,1.776,10,1.624,12,1.679,14,1.043,20,1.217,21,1.152,24,1.284,28,1.189,31,1.297,39,2.16,40,1.453,44,1.973,45,1.822,49,2.228,62,3.69,64,1.973,65,1.277,66,2.994,67,3.285,68,2.389,75,3.336,87,2.15,88,1.564,89,1.51,90,3.2,93,1.663,98,2.918,103,1.246,113,2.269,138,1.401,150,1.903,185,2.246,186,1.418,187,3.46,189,2.654,209,1.575,210,2.424,214,1.553,243,1.49,245,2.648,257,1.752,262,2.116,264,1.462,281,2.084,282,1.948,288,2.16,289,1.611,305,1.721,311,1.5,314,1.841,315,2.842,320,1.925,354,1.575,356,2.051,359,1.973,363,2.316,373,1.542,376,1.663,411,2.897,422,1.575,445,1.948,448,2.025,458,1.677,474,1.881,482,1.925,516,1.769,524,1.804,549,1.881,554,1.258,557,1.706,579,1.736,580,1.903,585,1.162,593,2.054,596,1.521,604,1.822,606,3.357,626,1.587,656,1.903,773,2.084,789,2.897,808,1.721,822,4.428,836,2.424,869,2.72,875,1.998,877,3.893,991,1.973,1095,2.424,1165,4.738,1171,2.489,1238,2.187,1259,2.489,1439,3.432,1741,2.15,1778,2.489,1811,1.973,1882,2.842,1985,2.424,2040,2.424,2150,2.751,2353,2.751,2414,3.839,2426,4.95,2428,3.052,2436,3.052,2467,2.88,2488,4.67,2514,3.052,2572,3.052,2593,4.95,2641,3.052,2648,3.052,2649,2.88,2675,2.88,2714,3.052,2854,5.375,2855,3.314,2856,3.314,2857,3.314,2858,3.314,2859,3.314,2860,3.314,2861,3.314,2862,3.314,2863,3.314,2864,3.314,2865,3.314,2866,3.314,2867,3.314,2868,3.314,2869,3.314]],["component/134",[98,0.801]],["title/135-1",[25,44.874,2870,65.536]],["name/135-1",[]],["text/135-1",[]],["component/135-1",[]],["title/135-2",[34,21.942,39,21.942,1439,34.863]],["name/135-2",[]],["text/135-2",[]],["component/135-2",[]],["title/135-3",[580,37.624,1439,41.846]],["name/135-3",[]],["text/135-3",[]],["component/135-3",[]],["title/135",[212,48.175]],["name/135",[212,1.39]],["text/135",[7,1.838,12,1.738,13,2.189,24,2.156,30,2.209,34,3.214,35,2.114,39,3.522,41,2.052,49,0.988,56,2.454,57,3.342,58,2.144,59,2.144,61,1.32,62,1.883,64,2.562,65,1.333,66,3.436,68,1.96,70,2.209,75,2.38,80,1.694,84,1.864,87,2.244,89,2.536,93,1.736,98,2.394,103,1.301,107,2.209,108,1.587,109,2.369,120,1.398,128,1.708,143,2.244,147,1.829,169,1.736,182,2.144,186,1.48,187,1.765,193,3.553,197,1.138,211,2.597,212,2.034,264,2.454,278,2.726,280,3.801,281,2.175,282,2.034,283,1.796,320,2.009,327,2.324,350,2.283,356,1.32,364,1.621,372,1.526,400,1.964,402,1.437,419,3.124,423,1.78,440,1.413,482,2.009,514,2.57,524,3.028,556,1.964,580,1.986,585,1.951,586,2.53,587,3.4,589,2.209,596,3.669,616,3.091,622,3.888,638,1.78,759,1.632,822,3.962,833,2.597,854,2.059,864,2.209,867,2.597,877,1.986,883,2.244,918,2.209,920,2.059,935,2.597,955,2.417,980,1.598,1119,2.53,1216,2.283,1439,3.553,1440,2.366,1479,2.471,1737,2.792,1775,1.902,1870,1.986,1982,4.986,2009,2.597,2166,2.417,2188,2.471,2385,3.006,2388,4.445,2414,2.471,2415,2.871,2485,3.006,2660,2.871,2738,3.186,2787,3.006,2812,4.834,2871,3.459,2872,3.459,2873,3.459,2874,3.459,2875,3.459,2876,3.459,2877,3.459,2878,3.459,2879,3.459,2880,3.459,2881,3.459,2882,3.459]],["component/135",[98,0.801]],["title/136",[839,54.078]],["name/136",[839,1.56]],["text/136",[10,3.307,13,3.22,24,1.715,28,1.588,38,1.76,39,2.713,56,1.953,64,2.478,66,2.357,70,2.827,87,2.872,90,2.635,94,2.203,98,1.905,117,3.674,140,1.965,143,2.872,146,3.238,150,2.541,193,2.827,208,1.928,214,2.074,230,2.827,243,3.036,270,1.905,280,2.104,291,2.571,298,3.162,320,2.571,327,2.974,357,2.827,378,2.921,381,2.784,415,2.635,440,1.808,524,3.674,561,2.319,581,2.319,593,2.743,596,2.031,599,5.069,610,2.602,632,3.324,639,2.221,758,2.203,772,2.872,822,2.513,838,5.069,839,7.53,844,2.386,847,4.938,864,2.827,865,2.784,869,2.24,902,4.822,918,4.311,955,3.094,980,2.045,1055,2.921,1094,3.333,1209,2.784,1479,3.162,1741,2.872,1784,3.324,1969,5.393,2042,3.094,2045,2.827,2123,3.324,2273,3.846,2340,5.393,2376,4.077,2413,7.597,2450,4.077,2475,4.077,2488,3.846,2653,4.077,2812,3.846,2849,4.077,2883,4.427,2884,4.427,2885,4.427,2886,4.427,2887,4.427,2888,4.427,2889,4.427,2890,4.427,2891,4.427,2892,4.427,2893,4.427]],["component/136",[98,0.801]]],"invertedIndex":[["",{"_index":7,"title":{"6-1":{},"25-1":{},"43-1":{},"61-1":{},"79-1":{},"101-1":{},"115-2":{}},"name":{},"text":{"1":{},"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"40":{},"41":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"68":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"89":{},"91":{},"92":{},"93":{},"95":{},"96":{},"98":{},"99":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"115":{},"118":{},"119":{},"120":{},"124":{},"125":{},"126":{},"128":{},"131":{},"133":{},"134":{},"135":{}},"component":{}}],["0",{"_index":1092,"title":{},"name":{},"text":{"9":{},"11":{},"13":{},"17":{},"19":{},"28":{},"30":{},"32":{},"36":{},"37":{},"46":{},"48":{},"50":{},"54":{},"56":{},"64":{},"66":{},"68":{},"73":{},"74":{},"82":{},"84":{},"86":{},"91":{},"92":{},"104":{},"106":{},"108":{},"112":{},"113":{},"125":{},"126":{}},"component":{}}],["0.0.0",{"_index":2183,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["00",{"_index":1486,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["00000000:0a:00.0",{"_index":2707,"title":{},"name":{},"text":{"126":{}},"component":{}}],["00000001",{"_index":1462,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["00000010",{"_index":1464,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["00000100",{"_index":1466,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["00001",{"_index":1743,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0000:01:00.0",{"_index":2185,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["00101",{"_index":1744,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["00110",{"_index":1748,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["00111",{"_index":1750,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["01",{"_index":1487,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["01000",{"_index":1752,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["01001",{"_index":1754,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["01100111",{"_index":1729,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0137636861727373",{"_index":1460,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["017charss",{"_index":1459,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["02",{"_index":1656,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["03",{"_index":1495,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["04",{"_index":1496,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["05",{"_index":1511,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["06",{"_index":1590,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["07",{"_index":1685,"title":{},"name":{},"text":{"13":{},"17":{},"32":{},"36":{},"50":{},"54":{},"68":{},"86":{},"108":{},"112":{}},"component":{}}],["08",{"_index":1644,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["09:08",{"_index":2099,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["09:47",{"_index":2724,"title":{},"name":{},"text":{"126":{}},"component":{}}],["0:/home/retro/edid.txt",{"_index":2687,"title":{},"name":{},"text":{"125":{}},"component":{}}],["0:01:31.983118812",{"_index":2199,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["0:01:31.983243805",{"_index":2204,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["0a",{"_index":1489,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0b",{"_index":1531,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0c",{"_index":1574,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0e",{"_index":1535,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0f75f4d1",{"_index":2233,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["0x0",{"_index":1386,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x00",{"_index":1366,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0000",{"_index":1485,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x00000001",{"_index":1483,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x00000003",{"_index":1131,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x00000004",{"_index":1133,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x00000005",{"_index":1125,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x00000007",{"_index":1123,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x00000008",{"_index":1127,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x00000009",{"_index":1129,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0000000a",{"_index":1135,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0000000c",{"_index":1141,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0000000d",{"_index":1151,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x00000017",{"_index":1153,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x000001",{"_index":1482,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x00000100",{"_index":2181,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["0x0001",{"_index":992,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"45":{},"48":{},"63":{},"66":{},"81":{},"84":{},"103":{},"106":{}},"component":{}}],["0x0002",{"_index":1394,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0004",{"_index":1396,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0008",{"_index":1398,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0010",{"_index":1399,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["0x0020",{"_index":1400,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["0x0030",{"_index":1512,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0040",{"_index":1403,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["0x0050",{"_index":1422,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["0x0060",{"_index":1551,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0070",{"_index":1561,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0080",{"_index":1405,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["0x0090",{"_index":1583,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x00a0",{"_index":1591,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x00b0",{"_index":1598,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x00c0",{"_index":1607,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x00d0",{"_index":1613,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x00e0",{"_index":1617,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x00f0",{"_index":1621,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x01",{"_index":1045,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"45":{},"48":{},"63":{},"66":{},"81":{},"84":{},"103":{},"106":{}},"component":{}}],["0x0100",{"_index":1018,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"27":{},"30":{},"32":{},"45":{},"48":{},"50":{},"63":{},"66":{},"68":{},"81":{},"84":{},"86":{},"103":{},"106":{},"108":{}},"component":{}}],["0x010000",{"_index":1414,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x010b",{"_index":1026,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x010e",{"_index":1024,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x0110",{"_index":1634,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0120",{"_index":1639,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0130",{"_index":1646,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0140",{"_index":1651,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0150",{"_index":1659,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0160",{"_index":1662,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0170",{"_index":1667,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0180",{"_index":1674,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0190",{"_index":1681,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x01a0",{"_index":1682,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x01b0",{"_index":1687,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x01c0",{"_index":1690,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x01d0",{"_index":1694,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x01e0",{"_index":1698,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x01f0",{"_index":1702,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x02",{"_index":1047,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"45":{},"48":{},"63":{},"66":{},"81":{},"84":{},"103":{},"106":{}},"component":{}}],["0x0200",{"_index":1020,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"27":{},"30":{},"32":{},"45":{},"48":{},"50":{},"63":{},"66":{},"68":{},"81":{},"84":{},"86":{},"103":{},"106":{},"108":{}},"component":{}}],["0x020000",{"_index":1415,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0201",{"_index":1012,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x0204",{"_index":1014,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x0206",{"_index":1016,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x0210",{"_index":1709,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0220",{"_index":1714,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0230",{"_index":1715,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0240",{"_index":1717,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0250",{"_index":1719,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x0260",{"_index":1721,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["0x03",{"_index":1169,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0301",{"_index":1010,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x0302",{"_index":1022,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x0305",{"_index":1006,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x0307",{"_index":1008,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x04",{"_index":1168,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0400",{"_index":1401,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x040000",{"_index":1416,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x08",{"_index":1164,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x080000",{"_index":1417,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x09",{"_index":1163,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0c",{"_index":1173,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x0d",{"_index":1175,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x1",{"_index":1387,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x10",{"_index":1177,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x1000",{"_index":1408,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x100000",{"_index":1418,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x11",{"_index":1179,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x12",{"_index":1181,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x13",{"_index":1183,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x14",{"_index":1185,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x15",{"_index":1187,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x16",{"_index":1189,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x17",{"_index":1191,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x19",{"_index":1193,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x1b",{"_index":1195,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x20",{"_index":1197,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x2000",{"_index":1409,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x200000",{"_index":1420,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x21",{"_index":1198,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x22",{"_index":1200,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x23",{"_index":1202,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x24",{"_index":1203,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x25",{"_index":1205,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x26",{"_index":1206,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x27",{"_index":1207,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x28",{"_index":1208,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x29",{"_index":1210,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x2a",{"_index":1211,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x2c",{"_index":1212,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x2d",{"_index":1214,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x2e",{"_index":1215,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x2f",{"_index":1217,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x30",{"_index":1218,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x31",{"_index":1219,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x32",{"_index":1220,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x33",{"_index":1221,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x34",{"_index":1222,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x35",{"_index":1223,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x36",{"_index":1224,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x37",{"_index":1225,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x38",{"_index":1226,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x39",{"_index":1228,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x40",{"_index":1374,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x4000",{"_index":1410,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x41",{"_index":1230,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x42",{"_index":1231,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x43",{"_index":1232,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x44",{"_index":1233,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x45",{"_index":1235,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x46",{"_index":1237,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x47",{"_index":1239,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x48",{"_index":1240,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x49",{"_index":1242,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x4a",{"_index":1243,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x4b",{"_index":1245,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x4c",{"_index":1247,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x4d",{"_index":1249,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x4e",{"_index":1251,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x4f",{"_index":1253,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x50",{"_index":1255,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x51",{"_index":1256,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x52",{"_index":1258,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x53",{"_index":1260,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x54",{"_index":1262,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x55",{"_index":1264,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x5500",{"_index":1028,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x55000001",{"_index":1137,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x55000002",{"_index":1138,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x55000003",{"_index":1139,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x55000004",{"_index":1143,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x55000005",{"_index":1145,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x55000006",{"_index":1147,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x55000007",{"_index":1149,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x5501",{"_index":1030,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x5502",{"_index":1032,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["0x56",{"_index":1266,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x57",{"_index":1268,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x58",{"_index":1270,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x59",{"_index":1271,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x5a",{"_index":1272,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x5b",{"_index":1274,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x5c",{"_index":1276,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x5f",{"_index":1278,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x60",{"_index":1280,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x61",{"_index":1282,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x62",{"_index":1283,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x63",{"_index":1284,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x64",{"_index":1285,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x65",{"_index":1286,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x66",{"_index":1287,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x67",{"_index":1288,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["0x68",{"_index":1289,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x69",{"_index":1290,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x6a",{"_index":1291,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x6c",{"_index":1295,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x6d",{"_index":1297,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x6e",{"_index":1299,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x6f",{"_index":1301,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x70",{"_index":1303,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x71",{"_index":1305,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x72",{"_index":1307,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x73",{"_index":1309,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x74",{"_index":1311,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x75",{"_index":1313,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x76",{"_index":1315,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x77",{"_index":1317,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x78",{"_index":1319,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x79",{"_index":1321,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x7a",{"_index":1323,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x7b",{"_index":1325,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x7f1d50000b70",{"_index":2200,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["0x80",{"_index":1375,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x8000",{"_index":1411,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x90",{"_index":1327,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0x91",{"_index":1329,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xa0",{"_index":1331,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xa1",{"_index":1332,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xa2",{"_index":1334,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xa3",{"_index":1335,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xa4",{"_index":1337,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xa5",{"_index":1338,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xba",{"_index":1340,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xbb",{"_index":1342,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xbc",{"_index":1344,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xbd",{"_index":1345,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xbe",{"_index":1346,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xbf",{"_index":1347,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xc0",{"_index":1348,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xdb",{"_index":1350,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xdc",{"_index":1352,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xdd",{"_index":1354,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xde",{"_index":1356,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["0xe2",{"_index":1358,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["1",{"_index":287,"title":{"9-2":{},"28-2":{},"46-2":{},"64-2":{},"82-2":{},"104-2":{},"124-4":{},"125-1":{}},"name":{},"text":{"3":{},"4":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"22":{},"23":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"37":{},"40":{},"41":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"56":{},"59":{},"60":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"73":{},"77":{},"78":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"91":{},"98":{},"99":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"113":{},"123":{},"126":{},"129":{},"133":{}},"component":{}}],["1.0",{"_index":763,"title":{},"name":{},"text":{"6":{},"16":{},"25":{},"35":{},"43":{},"53":{},"61":{},"71":{},"79":{},"89":{},"101":{},"111":{}},"component":{}}],["1.16.0",{"_index":1988,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["1.18",{"_index":2530,"title":{},"name":{},"text":{"123":{}},"component":{}}],["1.22.7",{"_index":2226,"title":{},"name":{},"text":{"25":{},"61":{},"79":{}},"component":{}}],["1.24.6",{"_index":703,"title":{},"name":{},"text":{"6":{},"43":{},"101":{}},"component":{}}],["1/1",{"_index":331,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["10",{"_index":1378,"title":{},"name":{},"text":{"11":{},"13":{},"17":{},"30":{},"32":{},"36":{},"48":{},"50":{},"54":{},"66":{},"68":{},"70":{},"73":{},"84":{},"86":{},"88":{},"91":{},"106":{},"108":{},"112":{},"123":{},"124":{},"129":{}},"component":{}}],["100",{"_index":2722,"title":{},"name":{},"text":{"126":{}},"component":{}}],["1000",{"_index":2856,"title":{},"name":{},"text":{"134":{}},"component":{}}],["1000:1000",{"_index":2858,"title":{},"name":{},"text":{"134":{}},"component":{}}],["1024",{"_index":1455,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["102nd",{"_index":1359,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["1060",{"_index":2170,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["10:33",{"_index":2726,"title":{},"name":{},"text":{"126":{}},"component":{}}],["10de:1c03",{"_index":2165,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["11",{"_index":398,"title":{},"name":{},"text":{"3":{},"11":{},"13":{},"22":{},"30":{},"32":{},"40":{},"48":{},"50":{},"59":{},"66":{},"68":{},"77":{},"84":{},"86":{},"98":{},"106":{},"108":{}},"component":{}}],["11.3",{"_index":2706,"title":{},"name":{},"text":{"126":{}},"component":{}}],["11:46",{"_index":2534,"title":{},"name":{},"text":{"123":{},"129":{}},"component":{}}],["12",{"_index":645,"title":{},"name":{},"text":{"6":{},"11":{},"12":{},"13":{},"25":{},"30":{},"31":{},"32":{},"43":{},"48":{},"49":{},"50":{},"61":{},"66":{},"67":{},"68":{},"79":{},"84":{},"85":{},"86":{},"101":{},"106":{},"107":{},"108":{}},"component":{}}],["12.561107",{"_index":2180,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["128",{"_index":977,"title":{},"name":{},"text":{"8":{},"10":{},"12":{},"27":{},"29":{},"31":{},"45":{},"47":{},"49":{},"63":{},"65":{},"67":{},"81":{},"83":{},"85":{},"103":{},"105":{},"107":{},"126":{}},"component":{}}],["13",{"_index":1505,"title":{},"name":{},"text":{"13":{},"17":{},"32":{},"36":{},"50":{},"54":{},"68":{},"73":{},"86":{},"91":{},"95":{},"108":{},"112":{},"124":{}},"component":{}}],["14",{"_index":1764,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["14.138312",{"_index":2182,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["15",{"_index":1716,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"123":{},"129":{}},"component":{}}],["15t13:41+00:00",{"_index":1994,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["16",{"_index":1001,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"27":{},"30":{},"32":{},"45":{},"48":{},"50":{},"63":{},"66":{},"68":{},"81":{},"84":{},"86":{},"103":{},"106":{},"108":{}},"component":{}}],["17",{"_index":1567,"title":{},"name":{},"text":{"13":{},"17":{},"32":{},"36":{},"50":{},"54":{},"68":{},"73":{},"86":{},"91":{},"108":{},"112":{},"126":{}},"component":{}}],["18",{"_index":1666,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["19",{"_index":1703,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["1920x1080",{"_index":2674,"title":{},"name":{},"text":{"125":{}},"component":{}}],["195",{"_index":2066,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["1:/var/log/xorg.0.log",{"_index":2864,"title":{},"name":{},"text":{"134":{}},"component":{}}],["1:1.3/0003:054c:0ce6.0007/input/input20/js0",{"_index":332,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["1a",{"_index":1699,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["1c",{"_index":1625,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["1d",{"_index":1622,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["1e",{"_index":1712,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["2",{"_index":322,"title":{"9-3":{},"28-3":{},"46-3":{},"64-3":{},"82-3":{},"104-3":{},"124-5":{},"125-2":{}},"name":{},"text":{"3":{},"4":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"22":{},"23":{},"26":{},"27":{},"28":{},"30":{},"31":{},"32":{},"33":{},"34":{},"40":{},"41":{},"44":{},"45":{},"46":{},"48":{},"49":{},"50":{},"51":{},"52":{},"59":{},"60":{},"62":{},"63":{},"64":{},"66":{},"67":{},"68":{},"69":{},"70":{},"77":{},"78":{},"80":{},"81":{},"82":{},"84":{},"85":{},"86":{},"87":{},"88":{},"98":{},"99":{},"102":{},"103":{},"104":{},"106":{},"107":{},"108":{},"109":{},"110":{},"125":{},"126":{}},"component":{}}],["20",{"_index":1545,"title":{"124-11":{},"124-17":{}},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"124":{},"126":{}},"component":{}}],["200",{"_index":1779,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["2003",{"_index":2640,"title":{},"name":{},"text":{"124":{}},"component":{}}],["20160202",{"_index":2184,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["2023",{"_index":2745,"title":{},"name":{},"text":{"127":{}},"component":{}}],["2024",{"_index":1993,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["2048",{"_index":1474,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["21",{"_index":1506,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["22",{"_index":1549,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["223",{"_index":2097,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"123":{},"129":{}},"component":{}}],["2248",{"_index":1475,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["226",{"_index":2728,"title":{},"name":{},"text":{"126":{}},"component":{}}],["23",{"_index":1677,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["24",{"_index":1711,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"125":{}},"component":{}}],["244",{"_index":2588,"title":{},"name":{},"text":{"124":{}},"component":{}}],["25",{"_index":1648,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["255",{"_index":2067,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["256",{"_index":2671,"title":{},"name":{},"text":{"125":{}},"component":{}}],["26",{"_index":1494,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["264",{"_index":1724,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["27",{"_index":1538,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["27/udev",{"_index":399,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["28",{"_index":1601,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["29",{"_index":1614,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["2>/dev/nul",{"_index":2609,"title":{},"name":{},"text":{"124":{}},"component":{}}],["2a",{"_index":1559,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["2c",{"_index":1670,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["2d",{"_index":1665,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["2e",{"_index":1533,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["2f",{"_index":1663,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["3",{"_index":413,"title":{"9-4":{},"28-4":{},"46-4":{},"64-4":{},"82-4":{},"104-4":{},"124-6":{},"125-3":{}},"name":{},"text":{"3":{},"4":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"22":{},"23":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"37":{},"40":{},"41":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"56":{},"59":{},"60":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"77":{},"78":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"98":{},"99":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"113":{},"126":{}},"component":{}}],["3.1",{"_index":1436,"title":{"125-4":{}},"name":{},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"component":{}}],["3.2",{"_index":2650,"title":{"125-5":{}},"name":{},"text":{},"component":{}}],["3.3",{"_index":2651,"title":{"125-6":{}},"name":{},"text":{},"component":{}}],["3.4",{"_index":2652,"title":{"125-7":{}},"name":{},"text":{},"component":{}}],["3.8",{"_index":2272,"title":{},"name":{},"text":{"73":{},"91":{}},"component":{}}],["30",{"_index":1507,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["31",{"_index":1661,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["3100",{"_index":2725,"title":{},"name":{},"text":{"126":{}},"component":{}}],["32",{"_index":1457,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"133":{}},"component":{}}],["34",{"_index":1650,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["35",{"_index":1547,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["3588.199301",{"_index":328,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["36",{"_index":1564,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["37",{"_index":1542,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["38",{"_index":1524,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["39",{"_index":1668,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["3931.403835",{"_index":449,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["3a",{"_index":1585,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["3b",{"_index":1669,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["3c",{"_index":1497,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["3d",{"_index":1720,"title":{},"name":{},"text":{"13":{},"17":{},"32":{},"36":{},"50":{},"54":{},"68":{},"73":{},"86":{},"91":{},"108":{},"112":{}},"component":{}}],["3e",{"_index":1595,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["3f",{"_index":1584,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["4",{"_index":996,"title":{"9-5":{},"28-5":{},"46-5":{},"64-5":{},"82-5":{},"104-5":{},"124-7":{}},"name":{},"text":{"8":{},"11":{},"12":{},"13":{},"14":{},"27":{},"30":{},"31":{},"32":{},"33":{},"45":{},"48":{},"49":{},"50":{},"51":{},"63":{},"66":{},"67":{},"68":{},"69":{},"70":{},"81":{},"84":{},"85":{},"86":{},"87":{},"88":{},"103":{},"106":{},"107":{},"108":{},"109":{}},"component":{}}],["40",{"_index":1696,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["410a",{"_index":2235,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["42",{"_index":1558,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["43",{"_index":1503,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["44",{"_index":1493,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["45",{"_index":1573,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["46",{"_index":1609,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["47",{"_index":100,"title":{},"name":{},"text":{"1":{},"13":{},"20":{},"32":{},"38":{},"50":{},"57":{},"68":{},"75":{},"86":{},"93":{},"108":{}},"component":{}}],["47984",{"_index":815,"title":{},"name":{},"text":{"6":{},"10":{},"25":{},"29":{},"43":{},"47":{},"61":{},"65":{},"79":{},"83":{},"101":{},"105":{}},"component":{}}],["47984/tcp",{"_index":2080,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["47989",{"_index":814,"title":{},"name":{},"text":{"6":{},"10":{},"25":{},"29":{},"43":{},"47":{},"61":{},"65":{},"79":{},"83":{},"101":{},"105":{}},"component":{}}],["47989/pin",{"_index":2456,"title":{},"name":{},"text":{"117":{},"123":{}},"component":{}}],["47989/tcp",{"_index":2081,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["47998",{"_index":1103,"title":{},"name":{},"text":{"10":{},"29":{},"47":{},"65":{},"83":{},"105":{}},"component":{}}],["47999",{"_index":1102,"title":{},"name":{},"text":{"10":{},"29":{},"47":{},"65":{},"83":{},"105":{}},"component":{}}],["47999/udp",{"_index":2082,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["48",{"_index":1498,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["48000",{"_index":1104,"title":{},"name":{},"text":{"10":{},"29":{},"47":{},"65":{},"83":{},"105":{}},"component":{}}],["48010",{"_index":1101,"title":{},"name":{},"text":{"10":{},"29":{},"47":{},"65":{},"83":{},"105":{}},"component":{}}],["48010/tcp",{"_index":2083,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["48100",{"_index":2084,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["48100/udp",{"_index":2193,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["48110/udp",{"_index":2085,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["48200",{"_index":2086,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["48200/udp",{"_index":2194,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["48210/udp",{"_index":2087,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["49",{"_index":1623,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["4a",{"_index":1642,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["4b",{"_index":1673,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["4c",{"_index":1593,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["4d",{"_index":1553,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["4e",{"_index":1513,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["4f",{"_index":1695,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["4kb",{"_index":1470,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["5",{"_index":1049,"title":{"9-6":{},"28-6":{},"46-6":{},"64-6":{},"82-6":{},"104-6":{}},"name":{},"text":{"8":{},"11":{},"13":{},"14":{},"27":{},"30":{},"32":{},"33":{},"45":{},"48":{},"50":{},"51":{},"63":{},"66":{},"68":{},"69":{},"70":{},"81":{},"84":{},"86":{},"87":{},"88":{},"103":{},"106":{},"108":{},"109":{}},"component":{}}],["5.0.0",{"_index":1038,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"45":{},"48":{},"63":{},"66":{},"81":{},"84":{},"103":{},"106":{}},"component":{}}],["50",{"_index":1471,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["500mb",{"_index":2837,"title":{},"name":{},"text":{"133":{}},"component":{}}],["51",{"_index":1628,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["52",{"_index":1647,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["53",{"_index":1580,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["530.30.02",{"_index":1989,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["54",{"_index":1571,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["55",{"_index":1529,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["560738950.m3u8",{"_index":1937,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["57",{"_index":1618,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["58",{"_index":1649,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["59",{"_index":1537,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["5a",{"_index":1624,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["5b",{"_index":1710,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["5c",{"_index":1691,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["5d",{"_index":1700,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["5e",{"_index":1543,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["6",{"_index":1098,"title":{},"name":{},"text":{"10":{},"11":{},"13":{},"19":{},"29":{},"30":{},"32":{},"37":{},"47":{},"48":{},"50":{},"56":{},"65":{},"66":{},"68":{},"70":{},"74":{},"83":{},"84":{},"86":{},"88":{},"92":{},"105":{},"106":{},"108":{},"113":{}},"component":{}}],["6.11.0",{"_index":2790,"title":{},"name":{},"text":{"129":{}},"component":{}}],["60",{"_index":1530,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["61",{"_index":1517,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["62",{"_index":1582,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["63",{"_index":1541,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["64",{"_index":102,"title":{},"name":{},"text":{"1":{},"13":{},"20":{},"32":{},"38":{},"50":{},"57":{},"68":{},"75":{},"86":{},"93":{},"108":{},"133":{}},"component":{}}],["65",{"_index":1508,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["666",{"_index":2064,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["67",{"_index":1488,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["6716",{"_index":1434,"title":{},"name":{},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"component":{}}],["68",{"_index":1501,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["69",{"_index":1615,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["6a",{"_index":1526,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["6b",{"_index":1608,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["6c",{"_index":1627,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["6d",{"_index":1589,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["6f",{"_index":101,"title":{},"name":{},"text":{"1":{},"13":{},"20":{},"32":{},"38":{},"50":{},"57":{},"68":{},"75":{},"86":{},"93":{},"108":{}},"component":{}}],["6gb",{"_index":2171,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["7",{"_index":691,"title":{},"name":{},"text":{"6":{},"11":{},"13":{},"19":{},"25":{},"30":{},"32":{},"37":{},"43":{},"48":{},"50":{},"56":{},"61":{},"66":{},"68":{},"70":{},"74":{},"79":{},"84":{},"86":{},"88":{},"92":{},"101":{},"106":{},"108":{},"113":{}},"component":{}}],["7.5",{"_index":2709,"title":{},"name":{},"text":{"126":{}},"component":{}}],["70",{"_index":1675,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["71",{"_index":1527,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["72",{"_index":1491,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["73",{"_index":1562,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["74",{"_index":1575,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["75",{"_index":1570,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["76",{"_index":1532,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["77",{"_index":1602,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["777",{"_index":2432,"title":{},"name":{},"text":{"116":{}},"component":{}}],["78",{"_index":1676,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["79",{"_index":1635,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["7a",{"_index":1604,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["7b",{"_index":1706,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["7c",{"_index":1626,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["7e",{"_index":1557,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["7f",{"_index":1514,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["8",{"_index":1227,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["80",{"_index":1500,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"126":{}},"component":{}}],["81",{"_index":1510,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["82",{"_index":1544,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["83",{"_index":1599,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["84",{"_index":1492,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["85",{"_index":1606,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["86",{"_index":1555,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["87",{"_index":1515,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["88",{"_index":1509,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["89",{"_index":1657,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["8a",{"_index":1643,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["8b",{"_index":1519,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["8c",{"_index":1611,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["8d",{"_index":1638,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["8e",{"_index":1630,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["8f",{"_index":1504,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["9",{"_index":1229,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["90",{"_index":1692,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["91",{"_index":1550,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["93",{"_index":1707,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["94",{"_index":1605,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["95",{"_index":1520,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["96",{"_index":1499,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["97",{"_index":1671,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["98",{"_index":1645,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["98e5080",{"_index":2480,"title":{},"name":{},"text":{"119":{}},"component":{}}],["99",{"_index":1629,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["9a",{"_index":1653,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["9b",{"_index":1660,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["9c",{"_index":1718,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["9d",{"_index":1577,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["9e",{"_index":1552,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["9f",{"_index":1566,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["_transform",{"_index":536,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["a1",{"_index":1597,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["a2",{"_index":1619,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["a3",{"_index":1640,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["a4",{"_index":1522,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["a5",{"_index":1518,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["a6",{"_index":1636,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["a8",{"_index":1588,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["a9",{"_index":1540,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["a=fmtp:97",{"_index":1765,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["aa",{"_index":1679,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["ab",{"_index":1697,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["abov",{"_index":1727,"title":{},"name":{},"text":{"13":{},"15":{},"17":{},"32":{},"36":{},"50":{},"52":{},"54":{},"68":{},"70":{},"73":{},"86":{},"88":{},"91":{},"108":{},"110":{},"112":{},"124":{},"125":{}},"component":{}}],["absolut",{"_index":1109,"title":{"11-2":{},"30-2":{},"48-2":{},"66-2":{},"84-2":{},"106-2":{}},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"120":{}},"component":{}}],["abstract",{"_index":192,"title":{},"name":{},"text":{"2":{},"5":{},"13":{},"21":{},"24":{},"32":{},"39":{},"42":{},"50":{},"58":{},"68":{},"76":{},"86":{},"97":{},"100":{},"108":{}},"component":{}}],["ac",{"_index":1490,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["acc",{"_index":2103,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["acceler",{"_index":587,"title":{},"name":{},"text":{"5":{},"8":{},"24":{},"27":{},"42":{},"45":{},"63":{},"70":{},"81":{},"88":{},"100":{},"103":{},"115":{},"123":{},"127":{},"130":{},"132":{},"135":{}},"component":{}}],["acceleromet",{"_index":1373,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["accept",{"_index":2512,"title":{},"name":{},"text":{"120":{}},"component":{}}],["access",{"_index":305,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"13":{},"17":{},"22":{},"24":{},"26":{},"32":{},"36":{},"40":{},"42":{},"44":{},"50":{},"54":{},"59":{},"62":{},"68":{},"70":{},"73":{},"77":{},"80":{},"86":{},"88":{},"91":{},"95":{},"98":{},"100":{},"102":{},"108":{},"112":{},"120":{},"134":{}},"component":{}}],["accompani",{"_index":933,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["achiev",{"_index":277,"title":{},"name":{},"text":{"3":{},"5":{},"15":{},"22":{},"24":{},"34":{},"40":{},"42":{},"52":{},"59":{},"77":{},"98":{},"100":{},"110":{},"115":{},"124":{}},"component":{}}],["acknowledg",{"_index":0,"title":{"1-1":{},"20-1":{},"38-1":{},"57-1":{},"75-1":{},"93-1":{}},"name":{},"text":{},"component":{}}],["acquir",{"_index":2853,"title":{"134-6":{}},"name":{},"text":{},"component":{}}],["action",{"_index":1162,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"119":{}},"component":{}}],["action=add",{"_index":333,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["action=add\\\\0devname=input/bomb\\\\0devpath=/devices/bomb\\\\0seqnum=1234\\\\0subsystem=input\\\\0",{"_index":443,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["activ",{"_index":1116,"title":{"11-12":{},"18-5":{},"30-12":{},"48-12":{},"55-5":{},"66-12":{},"84-12":{},"96-5":{},"106-12":{}},"name":{},"text":{"11":{},"13":{},"18":{},"30":{},"32":{},"48":{},"50":{},"55":{},"66":{},"68":{},"84":{},"86":{},"96":{},"106":{},"108":{}},"component":{}}],["actual",{"_index":164,"title":{"125-1":{}},"name":{},"text":{"2":{},"12":{},"13":{},"21":{},"31":{},"32":{},"39":{},"49":{},"50":{},"58":{},"67":{},"68":{},"72":{},"76":{},"85":{},"86":{},"90":{},"95":{},"97":{},"107":{},"108":{},"116":{},"125":{},"131":{}},"component":{}}],["ad",{"_index":309,"title":{"114":{}},"name":{"114":{}},"text":{"3":{},"5":{},"6":{},"11":{},"13":{},"14":{},"18":{},"22":{},"24":{},"25":{},"30":{},"32":{},"33":{},"40":{},"42":{},"43":{},"48":{},"50":{},"51":{},"55":{},"59":{},"61":{},"66":{},"68":{},"69":{},"77":{},"79":{},"84":{},"86":{},"87":{},"96":{},"98":{},"100":{},"101":{},"106":{},"108":{},"109":{},"114":{},"120":{},"123":{},"125":{},"127":{},"129":{}},"component":{}}],["adapt",{"_index":938,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["add",{"_index":329,"title":{"114-6":{}},"name":{},"text":{"3":{},"4":{},"5":{},"6":{},"7":{},"12":{},"17":{},"18":{},"19":{},"22":{},"23":{},"24":{},"25":{},"26":{},"31":{},"34":{},"36":{},"37":{},"40":{},"41":{},"42":{},"43":{},"44":{},"49":{},"54":{},"55":{},"56":{},"59":{},"60":{},"61":{},"62":{},"67":{},"73":{},"77":{},"78":{},"79":{},"80":{},"85":{},"91":{},"95":{},"96":{},"98":{},"99":{},"100":{},"101":{},"102":{},"107":{},"112":{},"113":{},"114":{},"123":{},"124":{},"125":{},"128":{},"132":{}},"component":{}}],["addit",{"_index":242,"title":{"95-11":{}},"name":{},"text":{"2":{},"3":{},"4":{},"7":{},"12":{},"14":{},"15":{},"17":{},"21":{},"22":{},"23":{},"26":{},"31":{},"33":{},"34":{},"36":{},"39":{},"40":{},"41":{},"44":{},"49":{},"51":{},"52":{},"54":{},"58":{},"59":{},"60":{},"62":{},"67":{},"69":{},"70":{},"73":{},"76":{},"77":{},"78":{},"80":{},"85":{},"87":{},"88":{},"91":{},"94":{},"95":{},"97":{},"98":{},"99":{},"102":{},"107":{},"109":{},"110":{},"112":{},"124":{},"131":{}},"component":{}}],["address",{"_index":1775,"title":{"19-3":{},"37-3":{},"56-3":{},"74-3":{},"92-3":{},"113-3":{}},"name":{},"text":{"14":{},"17":{},"19":{},"33":{},"36":{},"37":{},"51":{},"54":{},"56":{},"69":{},"73":{},"74":{},"87":{},"91":{},"92":{},"109":{},"112":{},"113":{},"117":{},"123":{},"135":{}},"component":{}}],["adjust",{"_index":646,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"123":{},"124":{}},"component":{}}],["admin",{"_index":2455,"title":{},"name":{},"text":{"117":{},"123":{}},"component":{}}],["advantag",{"_index":2264,"title":{},"name":{},"text":{"72":{},"90":{}},"component":{}}],["advertis",{"_index":324,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["ae",{"_index":975,"title":{"12-5":{},"31-5":{},"49-5":{},"67-5":{},"85-5":{},"107-5":{}},"name":{},"text":{"8":{},"9":{},"10":{},"12":{},"13":{},"27":{},"28":{},"29":{},"31":{},"32":{},"45":{},"46":{},"47":{},"49":{},"50":{},"63":{},"64":{},"65":{},"67":{},"68":{},"81":{},"82":{},"83":{},"85":{},"86":{},"103":{},"104":{},"105":{},"107":{},"108":{}},"component":{}}],["af",{"_index":1641,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["afaiu",{"_index":430,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["affect",{"_index":2815,"title":{},"name":{},"text":{"131":{}},"component":{}}],["agnost",{"_index":213,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["agre",{"_index":891,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["aim",{"_index":2754,"title":{},"name":{},"text":{"127":{}},"component":{}}],["aliv",{"_index":111,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["alloc",{"_index":2878,"title":{},"name":{},"text":{"135":{}},"component":{}}],["allow",{"_index":15,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"9":{},"16":{},"17":{},"20":{},"22":{},"23":{},"24":{},"26":{},"28":{},"35":{},"36":{},"38":{},"40":{},"41":{},"42":{},"44":{},"46":{},"53":{},"54":{},"57":{},"59":{},"60":{},"62":{},"64":{},"71":{},"72":{},"73":{},"75":{},"77":{},"78":{},"80":{},"82":{},"89":{},"90":{},"91":{},"93":{},"98":{},"99":{},"100":{},"102":{},"104":{},"111":{},"112":{},"116":{},"124":{},"127":{},"129":{}},"component":{}}],["allowemptyinitialconfigur",{"_index":2683,"title":{},"name":{},"text":{"125":{},"128":{}},"component":{}}],["along",{"_index":924,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["alpha",{"_index":2412,"title":{},"name":{},"text":{"115":{},"127":{}},"component":{}}],["alreadi",{"_index":1737,"title":{"19-3":{},"37-3":{},"56-3":{},"74-3":{},"92-3":{},"113-3":{}},"name":{},"text":{"13":{},"17":{},"18":{},"19":{},"32":{},"36":{},"37":{},"50":{},"54":{},"55":{},"56":{},"68":{},"70":{},"73":{},"74":{},"86":{},"88":{},"91":{},"92":{},"96":{},"108":{},"112":{},"113":{},"114":{},"115":{},"116":{},"124":{},"127":{},"129":{},"131":{},"135":{}},"component":{}}],["altern",{"_index":2676,"title":{},"name":{},"text":{"125":{},"129":{}},"component":{}}],["although",{"_index":902,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"126":{},"127":{},"136":{}},"component":{}}],["alway",{"_index":610,"title":{},"name":{},"text":{"5":{},"13":{},"14":{},"24":{},"32":{},"33":{},"42":{},"50":{},"51":{},"68":{},"69":{},"72":{},"86":{},"87":{},"90":{},"100":{},"108":{},"109":{},"131":{},"132":{},"136":{}},"component":{}}],["amd",{"_index":1867,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{},"128":{},"131":{}},"component":{}}],["amd/intel",{"_index":2077,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["amdgpu",{"_index":2773,"title":{},"name":{},"text":{"128":{}},"component":{}}],["amount",{"_index":1360,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["analog",{"_index":1371,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["analys",{"_index":1872,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["analyz",{"_index":2871,"title":{},"name":{},"text":{"135":{}},"component":{}}],["andrewmackrodt/firefox",{"_index":2513,"title":{},"name":{},"text":{"120":{}},"component":{}}],["angelnu",{"_index":2540,"title":{},"name":{},"text":{"123":{}},"component":{}}],["angelnu/gam",{"_index":2543,"title":{},"name":{},"text":{"123":{}},"component":{}}],["announc",{"_index":1771,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{},"127":{}},"component":{}}],["anoth",{"_index":359,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"22":{},"23":{},"26":{},"40":{},"41":{},"44":{},"59":{},"60":{},"62":{},"77":{},"78":{},"80":{},"98":{},"99":{},"102":{},"118":{},"134":{}},"component":{}}],["answer",{"_index":2884,"title":{},"name":{},"text":{"136":{}},"component":{}}],["anybodi",{"_index":2798,"title":{},"name":{},"text":{"130":{}},"component":{}}],["anyon",{"_index":116,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{},"116":{}},"component":{}}],["anyth",{"_index":427,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"116":{},"117":{},"123":{}},"component":{}}],["apart",{"_index":428,"title":{},"name":{},"text":{"3":{},"10":{},"22":{},"29":{},"40":{},"47":{},"59":{},"65":{},"77":{},"83":{},"98":{},"105":{}},"component":{}}],["api",{"_index":575,"title":{},"name":{},"text":{"5":{},"7":{},"9":{},"24":{},"26":{},"28":{},"42":{},"44":{},"46":{},"62":{},"64":{},"70":{},"80":{},"82":{},"88":{},"100":{},"102":{},"104":{},"115":{},"126":{}},"component":{}}],["apostroph",{"_index":1357,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["app",{"_index":585,"title":{"94":{},"114":{},"15-2":{},"15-6":{},"15-8":{},"15-13":{},"19-2":{},"34-2":{},"34-6":{},"34-8":{},"34-14":{},"37-2":{},"52-2":{},"52-6":{},"52-8":{},"52-13":{},"56-2":{},"70-3":{},"70-4":{},"70-10":{},"74-2":{},"88-3":{},"88-4":{},"88-10":{},"92-2":{},"110-2":{},"110-6":{},"110-8":{},"110-13":{},"113-2":{},"119-4":{},"124-5":{},"131-3":{}},"name":{"114":{}},"text":{"5":{},"7":{},"10":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"24":{},"26":{},"29":{},"33":{},"34":{},"35":{},"36":{},"37":{},"42":{},"44":{},"47":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"62":{},"65":{},"69":{},"70":{},"71":{},"73":{},"74":{},"80":{},"83":{},"87":{},"88":{},"89":{},"91":{},"92":{},"94":{},"95":{},"96":{},"100":{},"102":{},"105":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"117":{},"119":{},"120":{},"121":{},"122":{},"123":{},"124":{},"127":{},"130":{},"131":{},"132":{},"134":{},"135":{}},"component":{}}],["app_state_fold",{"_index":1835,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"110":{}},"component":{}}],["app_titl",{"_index":1836,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"110":{}},"component":{}}],["appear",{"_index":2157,"title":{},"name":{},"text":{"18":{},"55":{},"96":{},"119":{},"126":{}},"component":{}}],["appimag",{"_index":2601,"title":{},"name":{},"text":{"124":{}},"component":{}}],["appimage.yaml",{"_index":2551,"title":{"124-16":{}},"name":{},"text":{"124":{}},"component":{}}],["appimage_extract_and_run",{"_index":2616,"title":{},"name":{},"text":{"124":{}},"component":{}}],["appimage_extract_and_run=1\",\"run_sway=1\",\"gow_required_devices=/dev/input/ev",{"_index":2615,"title":{},"name":{},"text":{"124":{}},"component":{}}],["appimagelauncher_dis",{"_index":2635,"title":{},"name":{},"text":{"124":{}},"component":{}}],["appimg",{"_index":2627,"title":{},"name":{},"text":{"124":{}},"component":{}}],["appli",{"_index":1362,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["applic",{"_index":280,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"17":{},"18":{},"22":{},"23":{},"24":{},"26":{},"36":{},"40":{},"41":{},"42":{},"44":{},"54":{},"55":{},"59":{},"60":{},"62":{},"70":{},"73":{},"77":{},"78":{},"80":{},"88":{},"91":{},"96":{},"98":{},"99":{},"100":{},"102":{},"112":{},"114":{},"115":{},"120":{},"123":{},"124":{},"127":{},"130":{},"131":{},"133":{},"135":{},"136":{}},"component":{}}],["applications/gam",{"_index":566,"title":{"5-5":{},"24-5":{},"42-5":{},"100-5":{}},"name":{},"text":{},"component":{}}],["appnam",{"_index":2828,"title":{},"name":{},"text":{"132":{}},"component":{}}],["approach",{"_index":350,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"77":{},"80":{},"98":{},"102":{},"135":{}},"component":{}}],["appropr",{"_index":2613,"title":{},"name":{},"text":{"124":{}},"component":{}}],["appropri",{"_index":433,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"114":{},"119":{},"124":{},"131":{}},"component":{}}],["apps.audio",{"_index":1906,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"70":{},"71":{},"88":{},"89":{},"111":{}},"component":{}}],["apps.runn",{"_index":1846,"title":{},"name":{},"text":{"15":{},"18":{},"34":{},"52":{},"55":{},"70":{},"88":{},"95":{},"96":{},"110":{},"124":{}},"component":{}}],["apps.video",{"_index":1860,"title":{},"name":{},"text":{"15":{},"16":{},"35":{},"52":{},"53":{},"70":{},"71":{},"88":{},"89":{},"110":{},"111":{}},"component":{}}],["apps/gam",{"_index":473,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"70":{},"77":{},"88":{},"98":{}},"component":{}}],["apt",{"_index":658,"title":{"114-6":{}},"name":{},"text":{"6":{},"19":{},"25":{},"37":{},"43":{},"56":{},"61":{},"79":{},"101":{},"113":{},"114":{}},"component":{}}],["aptli",{"_index":2825,"title":{},"name":{},"text":{"132":{}},"component":{}}],["arbitrari",{"_index":2590,"title":{},"name":{},"text":{"124":{}},"component":{}}],["arch",{"_index":2623,"title":{},"name":{},"text":{"124":{}},"component":{}}],["architectur",{"_index":2708,"title":{},"name":{},"text":{"126":{}},"component":{}}],["archwiki",{"_index":2030,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["aren’t",{"_index":2384,"title":{},"name":{},"text":{"114":{},"119":{}},"component":{}}],["arg",{"_index":2006,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"119":{},"124":{}},"component":{}}],["argument",{"_index":2591,"title":{},"name":{},"text":{"124":{},"131":{}},"component":{}}],["around",{"_index":245,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"97":{},"134":{}},"component":{}}],["arriv",{"_index":325,"title":{"11-10":{},"30-10":{},"48-10":{},"66-10":{},"84-10":{},"106-10":{}},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["arrow",{"_index":2859,"title":{},"name":{},"text":{"134":{}},"component":{}}],["articl",{"_index":614,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["arug",{"_index":2824,"title":{},"name":{},"text":{"131":{}},"component":{}}],["ask",{"_index":1060,"title":{},"name":{},"text":{"9":{},"13":{},"28":{},"32":{},"46":{},"50":{},"64":{},"68":{},"82":{},"86":{},"104":{},"108":{},"118":{},"133":{}},"component":{}}],["asset",{"_index":2572,"title":{},"name":{},"text":{"124":{},"134":{}},"component":{}}],["assign",{"_index":299,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"112":{}},"component":{}}],["associ",{"_index":2261,"title":{},"name":{},"text":{"70":{},"88":{},"119":{}},"component":{}}],["asterisk",{"_index":1292,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["atom",{"_index":879,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["attach",{"_index":2649,"title":{"125-1":{}},"name":{},"text":{"125":{},"134":{}},"component":{}}],["attempt",{"_index":2526,"title":{},"name":{},"text":{"121":{},"126":{},"127":{},"131":{}},"component":{}}],["attrs{id/vendor}==\"ab00",{"_index":2112,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["attrs{name}==\"wolf",{"_index":2114,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["audio",{"_index":61,"title":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{},"5-2":{},"16-4":{},"24-2":{},"35-4":{},"42-2":{},"53-4":{},"71-4":{},"89-4":{},"100-2":{},"111-4":{}},"name":{},"text":{"1":{},"2":{},"4":{},"5":{},"10":{},"12":{},"14":{},"16":{},"17":{},"19":{},"20":{},"21":{},"23":{},"24":{},"29":{},"31":{},"33":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"42":{},"47":{},"49":{},"51":{},"53":{},"54":{},"56":{},"57":{},"58":{},"60":{},"65":{},"67":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"83":{},"85":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{},"97":{},"99":{},"100":{},"105":{},"107":{},"109":{},"111":{},"112":{},"113":{},"115":{},"127":{},"135":{}},"component":{}}],["audio.hpp",{"_index":198,"title":{},"name":{},"text":{"2":{},"4":{},"21":{},"23":{},"39":{},"41":{},"58":{},"60":{},"76":{},"78":{},"97":{},"99":{}},"component":{}}],["audio/mpeg",{"_index":1908,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["audio/video",{"_index":485,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"70":{},"78":{},"88":{},"99":{}},"component":{}}],["audioconvert",{"_index":1903,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["audiotestsrc",{"_index":2242,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["augment",{"_index":404,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["authent",{"_index":1052,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["autologin",{"_index":2789,"title":{},"name":{},"text":{"129":{}},"component":{}}],["automat",{"_index":360,"title":{},"name":{},"text":{"3":{},"5":{},"22":{},"24":{},"40":{},"42":{},"59":{},"70":{},"72":{},"77":{},"88":{},"90":{},"98":{},"100":{},"117":{},"119":{},"126":{},"131":{},"133":{}},"component":{}}],["autovideosink",{"_index":1876,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["av1",{"_index":519,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["avail",{"_index":300,"title":{},"name":{},"text":{"3":{},"5":{},"10":{},"15":{},"19":{},"22":{},"24":{},"29":{},"34":{},"37":{},"40":{},"42":{},"47":{},"52":{},"56":{},"59":{},"65":{},"70":{},"74":{},"77":{},"83":{},"88":{},"92":{},"98":{},"100":{},"105":{},"110":{},"113":{},"131":{}},"component":{}}],["avfvideosrc",{"_index":1880,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["avoid",{"_index":600,"title":{},"name":{},"text":{"5":{},"15":{},"24":{},"34":{},"42":{},"52":{},"70":{},"88":{},"100":{},"110":{}},"component":{}}],["awar",{"_index":2716,"title":{},"name":{},"text":{"126":{}},"component":{}}],["away",{"_index":592,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["awk",{"_index":2073,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["b",{"_index":702,"title":{},"name":{},"text":{"6":{},"11":{},"13":{},"25":{},"30":{},"32":{},"43":{},"48":{},"50":{},"61":{},"66":{},"68":{},"79":{},"84":{},"86":{},"101":{},"106":{},"108":{}},"component":{}}],["b0",{"_index":1672,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["b1",{"_index":1572,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["b2",{"_index":1655,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["b3",{"_index":1576,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["b318",{"_index":2236,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["b5",{"_index":1534,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["b6",{"_index":1600,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["b7",{"_index":1525,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["b8",{"_index":1539,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["b9",{"_index":1528,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["ba",{"_index":1563,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["back",{"_index":376,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"11":{},"13":{},"22":{},"23":{},"26":{},"28":{},"30":{},"32":{},"40":{},"41":{},"44":{},"46":{},"48":{},"50":{},"59":{},"60":{},"62":{},"64":{},"66":{},"68":{},"77":{},"78":{},"80":{},"82":{},"84":{},"86":{},"98":{},"99":{},"102":{},"104":{},"106":{},"108":{},"134":{}},"component":{}}],["backend",{"_index":1063,"title":{},"name":{},"text":{"9":{},"10":{},"14":{},"28":{},"29":{},"33":{},"46":{},"47":{},"51":{},"64":{},"65":{},"69":{},"82":{},"83":{},"87":{},"104":{},"105":{},"109":{}},"component":{}}],["background",{"_index":2192,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{},"131":{}},"component":{}}],["backslash",{"_index":1353,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["backspac",{"_index":1171,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"134":{}},"component":{}}],["backtrac",{"_index":1832,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["backup",{"_index":2880,"title":{},"name":{},"text":{"135":{}},"component":{}}],["bad:aom=en",{"_index":738,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["bad:nvcodec=en",{"_index":739,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["bad:qsv=en",{"_index":737,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["bad:x265=en",{"_index":736,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["ball",{"_index":1859,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["bandwith",{"_index":1044,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["base",{"_index":69,"title":{"119-3":{},"124-4":{},"124-5":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"15":{},"16":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"34":{},"35":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"52":{},"53":{},"57":{},"58":{},"59":{},"60":{},"61":{},"70":{},"71":{},"75":{},"76":{},"77":{},"78":{},"79":{},"88":{},"89":{},"93":{},"97":{},"98":{},"99":{},"100":{},"101":{},"110":{},"111":{},"114":{},"116":{},"119":{},"124":{},"127":{},"128":{}},"component":{}}],["base64",{"_index":444,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["base_app_imag",{"_index":2602,"title":{},"name":{},"text":{"124":{}},"component":{}}],["base_app_image=gow/bas",{"_index":2583,"title":{},"name":{},"text":{"124":{}},"component":{}}],["base_app_image=gow/lutri",{"_index":2612,"title":{},"name":{},"text":{"124":{}},"component":{}}],["base_create_json",{"_index":2249,"title":{},"name":{},"text":{"70":{},"88":{},"95":{},"124":{}},"component":{}}],["base_image=gow/bas",{"_index":2581,"title":{},"name":{},"text":{"124":{}},"component":{}}],["base_image=mi",{"_index":2491,"title":{},"name":{},"text":{"119":{}},"component":{}}],["bash",{"_index":555,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{},"121":{},"127":{},"131":{}},"component":{}}],["bash_rc",{"_index":746,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["basi",{"_index":2154,"title":{},"name":{},"text":{"18":{},"55":{},"96":{}},"component":{}}],["basic",{"_index":503,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{},"120":{},"124":{},"131":{}},"component":{}}],["batteri",{"_index":1118,"title":{"11-16":{},"30-16":{},"48-16":{},"66-16":{},"84-16":{},"106-16":{}},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["bb",{"_index":1722,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["bbuild",{"_index":801,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["bc",{"_index":1578,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["bd",{"_index":1705,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["be",{"_index":409,"title":{},"name":{},"text":{"3":{},"7":{},"11":{},"12":{},"22":{},"26":{},"30":{},"31":{},"40":{},"44":{},"48":{},"49":{},"59":{},"62":{},"66":{},"67":{},"77":{},"80":{},"84":{},"85":{},"98":{},"102":{},"106":{},"107":{},"119":{}},"component":{}}],["beast",{"_index":2732,"title":{},"name":{},"text":{"127":{}},"component":{}}],["befor",{"_index":364,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"9":{},"12":{},"13":{},"14":{},"22":{},"23":{},"24":{},"28":{},"31":{},"32":{},"33":{},"40":{},"41":{},"42":{},"46":{},"49":{},"50":{},"51":{},"59":{},"60":{},"64":{},"67":{},"68":{},"69":{},"77":{},"78":{},"82":{},"85":{},"86":{},"87":{},"98":{},"99":{},"100":{},"104":{},"107":{},"108":{},"109":{},"115":{},"116":{},"125":{},"129":{},"131":{},"135":{}},"component":{}}],["begin",{"_index":2607,"title":{},"name":{},"text":{"124":{},"131":{}},"component":{}}],["behav",{"_index":2661,"title":{},"name":{},"text":{"125":{}},"component":{}}],["behaviour",{"_index":472,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["behind",{"_index":206,"title":{},"name":{},"text":{"2":{},"7":{},"12":{},"13":{},"21":{},"26":{},"31":{},"32":{},"39":{},"44":{},"49":{},"50":{},"58":{},"62":{},"67":{},"68":{},"76":{},"80":{},"85":{},"86":{},"97":{},"102":{},"107":{},"108":{},"115":{}},"component":{}}],["believ",{"_index":2653,"title":{},"name":{},"text":{"125":{},"136":{}},"component":{}}],["below",{"_index":1453,"title":{},"name":{},"text":{"13":{},"18":{},"32":{},"50":{},"55":{},"68":{},"86":{},"95":{},"96":{},"108":{},"125":{},"131":{}},"component":{}}],["benefit",{"_index":143,"title":{},"name":{},"text":{"2":{},"5":{},"21":{},"24":{},"39":{},"42":{},"58":{},"76":{},"97":{},"100":{},"115":{},"125":{},"135":{},"136":{}},"component":{}}],["bespok",{"_index":2560,"title":{},"name":{},"text":{"124":{}},"component":{}}],["best",{"_index":955,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"115":{},"125":{},"135":{},"136":{}},"component":{}}],["bet",{"_index":2890,"title":{},"name":{},"text":{"136":{}},"component":{}}],["beta",{"_index":2819,"title":{},"name":{},"text":{"131":{}},"component":{}}],["better",{"_index":4,"title":{},"name":{},"text":{"1":{},"10":{},"20":{},"29":{},"38":{},"47":{},"57":{},"65":{},"70":{},"75":{},"83":{},"88":{},"93":{},"105":{}},"component":{}}],["between",{"_index":285,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"9":{},"14":{},"16":{},"22":{},"23":{},"24":{},"26":{},"28":{},"33":{},"35":{},"40":{},"41":{},"42":{},"44":{},"46":{},"51":{},"53":{},"59":{},"60":{},"62":{},"64":{},"69":{},"71":{},"72":{},"77":{},"78":{},"80":{},"82":{},"87":{},"89":{},"90":{},"98":{},"99":{},"100":{},"102":{},"104":{},"109":{},"111":{},"115":{},"116":{}},"component":{}}],["bey",{"_index":105,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["beyond",{"_index":2669,"title":{},"name":{},"text":{"125":{}},"component":{}}],["bf",{"_index":1587,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["big",{"_index":1119,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"115":{},"135":{}},"component":{}}],["bigbuckbunni",{"_index":1914,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["bin",{"_index":684,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"125":{}},"component":{}}],["bin/bash",{"_index":2046,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"114":{},"124":{}},"component":{}}],["binari",{"_index":505,"title":{"13-6":{},"32-6":{},"50-6":{},"68-6":{},"86-6":{},"108-6":{}},"name":{},"text":{"4":{},"11":{},"13":{},"23":{},"30":{},"32":{},"41":{},"48":{},"50":{},"60":{},"66":{},"68":{},"78":{},"84":{},"86":{},"99":{},"106":{},"108":{},"124":{},"125":{}},"component":{}}],["bind",{"_index":2190,"title":{"95-6":{}},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"95":{},"113":{}},"component":{}}],["bison",{"_index":666,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["bit",{"_index":546,"title":{},"name":{},"text":{"4":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"17":{},"23":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"36":{},"41":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"54":{},"60":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"73":{},"78":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"91":{},"99":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"112":{},"125":{},"133":{}},"component":{}}],["bitestream",{"_index":499,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["bitfield",{"_index":1370,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["black",{"_index":2092,"title":{"19-1":{},"37-1":{},"56-1":{},"74-1":{},"92-1":{},"113-1":{},"133-2":{}},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["blank",{"_index":2438,"title":{},"name":{},"text":{"116":{}},"component":{}}],["bleed",{"_index":2817,"title":{},"name":{},"text":{"131":{}},"component":{}}],["block",{"_index":1446,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{}},"component":{}}],["blog",{"_index":2517,"title":{},"name":{},"text":{"120":{}},"component":{}}],["board",{"_index":2464,"title":{},"name":{},"text":{"118":{}},"component":{}}],["boilerpl",{"_index":534,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["book",{"_index":960,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["boost",{"_index":178,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["boost::wrapexcept",{"_index":2189,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["both",{"_index":529,"title":{},"name":{},"text":{"4":{},"5":{},"7":{},"11":{},"15":{},"23":{},"24":{},"26":{},"30":{},"41":{},"42":{},"44":{},"48":{},"52":{},"60":{},"62":{},"66":{},"70":{},"78":{},"80":{},"84":{},"88":{},"99":{},"100":{},"102":{},"106":{},"110":{},"115":{},"116":{},"128":{},"133":{}},"component":{}}],["box",{"_index":2115,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"118":{},"120":{},"129":{}},"component":{}}],["brand",{"_index":2127,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"126":{}},"component":{}}],["break",{"_index":598,"title":{},"name":{},"text":{"5":{},"11":{},"15":{},"24":{},"30":{},"42":{},"48":{},"52":{},"66":{},"84":{},"100":{},"106":{},"110":{}},"component":{}}],["breviti",{"_index":1849,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["brief",{"_index":2177,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["bring",{"_index":2739,"title":{},"name":{},"text":{"127":{}},"component":{}}],["broadcast",{"_index":361,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["broken",{"_index":928,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["brows",{"_index":2357,"title":{},"name":{},"text":{"95":{}},"component":{}}],["browser",{"_index":2759,"title":{},"name":{},"text":{"127":{}},"component":{}}],["btn",{"_index":1388,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["bu",{"_index":247,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"97":{},"126":{}},"component":{}}],["bucket/sample/bigbuckbunny.mp4",{"_index":1875,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["buffer",{"_index":510,"title":{},"name":{},"text":{"4":{},"5":{},"7":{},"23":{},"24":{},"26":{},"41":{},"42":{},"44":{},"60":{},"62":{},"78":{},"80":{},"99":{},"100":{},"102":{}},"component":{}}],["buil",{"_index":743,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["build",{"_index":639,"title":{"119":{},"6-3":{},"6-4":{},"25-3":{},"25-4":{},"43-3":{},"43-4":{},"61-3":{},"61-4":{},"79-3":{},"79-4":{},"101-3":{},"101-4":{},"119-2":{},"124-3":{},"124-4":{},"124-5":{},"124-6":{},"124-12":{},"124-19":{}},"name":{"119":{}},"text":{"6":{},"17":{},"25":{},"36":{},"43":{},"54":{},"61":{},"73":{},"79":{},"91":{},"101":{},"112":{},"114":{},"119":{},"124":{},"136":{}},"component":{}}],["build/src/wolf/wolf",{"_index":807,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["build_base_app_image=mi",{"_index":2494,"title":{},"name":{},"text":{"119":{}},"component":{}}],["build_base_image=mi",{"_index":2493,"title":{},"name":{},"text":{"119":{}},"component":{}}],["buildtype=releas",{"_index":713,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["built",{"_index":230,"title":{},"name":{},"text":{"2":{},"5":{},"21":{},"24":{},"39":{},"42":{},"58":{},"76":{},"97":{},"100":{},"119":{},"120":{},"125":{},"132":{},"136":{}},"component":{}}],["bunch",{"_index":959,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["bundl",{"_index":2377,"title":{},"name":{},"text":{"114":{}},"component":{}}],["bus/pci/drivers/nvidia",{"_index":1842,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["bus/virtio/drivers/virtio_gpu",{"_index":1840,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["button",{"_index":1110,"title":{"11-3":{},"11-13":{},"30-3":{},"30-13":{},"48-3":{},"48-13":{},"66-3":{},"66-13":{},"84-3":{},"84-13":{},"106-3":{},"106-13":{}},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["button_flag",{"_index":1389,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["button_flags2",{"_index":1390,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["byte",{"_index":491,"title":{},"name":{},"text":{"4":{},"8":{},"11":{},"12":{},"13":{},"23":{},"27":{},"30":{},"31":{},"32":{},"41":{},"45":{},"48":{},"49":{},"50":{},"60":{},"63":{},"66":{},"67":{},"68":{},"78":{},"81":{},"84":{},"85":{},"86":{},"99":{},"103":{},"106":{},"107":{},"108":{},"125":{}},"component":{}}],["c",{"_index":166,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"6":{},"8":{},"11":{},"12":{},"17":{},"21":{},"22":{},"23":{},"24":{},"25":{},"27":{},"30":{},"31":{},"36":{},"39":{},"40":{},"41":{},"42":{},"43":{},"45":{},"48":{},"49":{},"54":{},"58":{},"59":{},"60":{},"61":{},"63":{},"66":{},"67":{},"70":{},"73":{},"76":{},"77":{},"78":{},"79":{},"81":{},"84":{},"85":{},"88":{},"91":{},"95":{},"97":{},"98":{},"99":{},"100":{},"101":{},"103":{},"106":{},"107":{},"112":{},"124":{}},"component":{}}],["c0",{"_index":1704,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["c0579f18f8d1",{"_index":2237,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["c1",{"_index":1689,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["c2",{"_index":1658,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["c3",{"_index":1581,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["c4",{"_index":1592,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["c5",{"_index":1612,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["c6",{"_index":1678,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["c7",{"_index":1594,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["c8",{"_index":1637,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["ca",{"_index":668,"title":{},"name":{},"text":{"6":{},"13":{},"25":{},"32":{},"43":{},"50":{},"61":{},"68":{},"79":{},"86":{},"101":{},"108":{}},"component":{}}],["call",{"_index":311,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"12":{},"13":{},"19":{},"22":{},"23":{},"26":{},"28":{},"31":{},"32":{},"37":{},"40":{},"41":{},"44":{},"46":{},"49":{},"50":{},"56":{},"59":{},"60":{},"62":{},"64":{},"67":{},"68":{},"74":{},"77":{},"78":{},"80":{},"82":{},"85":{},"86":{},"92":{},"98":{},"99":{},"102":{},"104":{},"107":{},"108":{},"113":{},"114":{},"117":{},"119":{},"123":{},"124":{},"125":{},"128":{},"131":{},"134":{}},"component":{}}],["callback",{"_index":897,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["can’t",{"_index":296,"title":{"119-2":{}},"name":{},"text":{"3":{},"7":{},"17":{},"22":{},"26":{},"36":{},"40":{},"44":{},"54":{},"59":{},"62":{},"73":{},"77":{},"80":{},"91":{},"98":{},"102":{},"112":{},"119":{}},"component":{}}],["cap",{"_index":470,"title":{},"name":{},"text":{"3":{},"19":{},"22":{},"37":{},"40":{},"56":{},"59":{},"77":{},"98":{},"113":{}},"component":{}}],["cap1",{"_index":2036,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["cap2",{"_index":2037,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["capabl",{"_index":469,"title":{},"name":{},"text":{"3":{},"11":{},"17":{},"22":{},"30":{},"36":{},"40":{},"48":{},"54":{},"59":{},"66":{},"77":{},"84":{},"98":{},"106":{},"112":{},"120":{}},"component":{}}],["capadd",{"_index":2252,"title":{},"name":{},"text":{"70":{},"88":{},"95":{},"124":{}},"component":{}}],["caps/nvidia",{"_index":2035,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["capslock",{"_index":1186,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["captur",{"_index":1881,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["card",{"_index":963,"title":{"123-5":{}},"name":{},"text":{"7":{},"15":{},"26":{},"44":{},"52":{},"62":{},"70":{},"80":{},"88":{},"102":{},"110":{},"115":{},"123":{},"126":{}},"component":{}}],["card0",{"_index":2729,"title":{},"name":{},"text":{"126":{}},"component":{}}],["care",{"_index":109,"title":{},"name":{},"text":{"1":{},"5":{},"20":{},"24":{},"38":{},"42":{},"57":{},"75":{},"93":{},"100":{},"135":{}},"component":{}}],["cargo",{"_index":767,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["carri",{"_index":923,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["case",{"_index":865,"title":{},"name":{},"text":{"7":{},"15":{},"26":{},"34":{},"44":{},"52":{},"62":{},"70":{},"80":{},"88":{},"102":{},"110":{},"120":{},"124":{},"125":{},"136":{}},"component":{}}],["cat",{"_index":2020,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["catastroph",{"_index":2527,"title":{},"name":{},"text":{"122":{}},"component":{}}],["catch2",{"_index":252,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["caus",{"_index":2123,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"136":{}},"component":{}}],["cb",{"_index":1701,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["cbc",{"_index":1105,"title":{},"name":{},"text":{"10":{},"12":{},"29":{},"31":{},"47":{},"49":{},"65":{},"67":{},"83":{},"85":{},"105":{},"107":{}},"component":{}}],["cc",{"_index":1713,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["ccach",{"_index":665,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["cd",{"_index":706,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"122":{}},"component":{}}],["ce",{"_index":1556,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["cemu",{"_index":2348,"title":{},"name":{},"text":{"95":{}},"component":{}}],["central",{"_index":2502,"title":{},"name":{},"text":{"120":{}},"component":{}}],["cert.pem",{"_index":1803,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["certain",{"_index":914,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["certainli",{"_index":2885,"title":{},"name":{},"text":{"136":{}},"component":{}}],["certif",{"_index":669,"title":{},"name":{},"text":{"6":{},"9":{},"25":{},"28":{},"43":{},"46":{},"61":{},"64":{},"79":{},"82":{},"101":{},"104":{}},"component":{}}],["certificate_signatur",{"_index":1080,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["cf",{"_index":1684,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["cflags=\"$cflag",{"_index":754,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["cgroup",{"_index":310,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"112":{}},"component":{}}],["challeng",{"_index":823,"title":{},"name":{},"text":{"7":{},"9":{},"26":{},"28":{},"44":{},"46":{},"62":{},"64":{},"80":{},"82":{},"102":{},"104":{}},"component":{}}],["challengerespons",{"_index":1075,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["chanc",{"_index":946,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["chang",{"_index":630,"title":{"15-4":{},"34-4":{},"52-4":{},"110-4":{}},"name":{},"text":{"5":{},"7":{},"11":{},"13":{},"15":{},"17":{},"18":{},"19":{},"24":{},"26":{},"30":{},"32":{},"34":{},"36":{},"37":{},"42":{},"44":{},"48":{},"50":{},"52":{},"54":{},"55":{},"56":{},"62":{},"66":{},"68":{},"73":{},"74":{},"80":{},"84":{},"86":{},"91":{},"92":{},"95":{},"96":{},"100":{},"102":{},"106":{},"108":{},"110":{},"112":{},"113":{},"114":{},"116":{},"123":{},"124":{},"125":{},"128":{},"131":{}},"component":{}}],["channel",{"_index":114,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{},"95":{},"115":{}},"component":{}}],["channels=(int)2",{"_index":1913,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["char",{"_index":1002,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["charact",{"_index":1769,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{},"125":{}},"component":{}}],["characterist",{"_index":916,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["charg",{"_index":2407,"title":{},"name":{},"text":{"115":{}},"component":{}}],["chart",{"_index":2542,"title":{},"name":{},"text":{"123":{}},"component":{}}],["chat",{"_index":2715,"title":{},"name":{},"text":{"126":{},"129":{}},"component":{}}],["cheat",{"_index":1878,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["check",{"_index":759,"title":{},"name":{},"text":{"6":{},"9":{},"12":{},"13":{},"17":{},"19":{},"25":{},"28":{},"31":{},"32":{},"36":{},"37":{},"43":{},"46":{},"49":{},"50":{},"54":{},"56":{},"61":{},"64":{},"67":{},"68":{},"73":{},"74":{},"79":{},"82":{},"85":{},"86":{},"91":{},"92":{},"101":{},"104":{},"107":{},"108":{},"112":{},"113":{},"116":{},"117":{},"119":{},"122":{},"123":{},"126":{},"129":{},"133":{},"135":{}},"component":{}}],["checklist",{"_index":2176,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["checkout",{"_index":263,"title":{},"name":{},"text":{"2":{},"12":{},"19":{},"21":{},"31":{},"37":{},"39":{},"49":{},"56":{},"58":{},"67":{},"74":{},"76":{},"85":{},"92":{},"97":{},"107":{},"113":{},"123":{}},"component":{}}],["checksum",{"_index":2478,"title":{},"name":{},"text":{"119":{}},"component":{}}],["chmod",{"_index":2431,"title":{},"name":{},"text":{"116":{}},"component":{}}],["chmod=777",{"_index":2603,"title":{},"name":{},"text":{"124":{}},"component":{}}],["chmodx",{"_index":2631,"title":{},"name":{},"text":{"124":{}},"component":{}}],["choic",{"_index":648,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"116":{},"127":{}},"component":{}}],["choos",{"_index":2415,"title":{},"name":{},"text":{"115":{},"119":{},"127":{},"135":{}},"component":{}}],["chosen",{"_index":2257,"title":{},"name":{},"text":{"70":{},"88":{},"119":{}},"component":{}}],["chown",{"_index":2857,"title":{},"name":{},"text":{"134":{}},"component":{}}],["chroma",{"_index":1960,"title":{},"name":{},"text":{"16":{},"19":{},"35":{},"37":{},"53":{},"56":{},"71":{},"89":{},"111":{},"113":{}},"component":{}}],["chrome",{"_index":2519,"title":{},"name":{},"text":{"120":{}},"component":{}}],["chunk",{"_index":512,"title":{},"name":{},"text":{"4":{},"13":{},"23":{},"32":{},"41":{},"50":{},"60":{},"68":{},"78":{},"86":{},"99":{},"108":{}},"component":{}}],["cinstal",{"_index":769,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["circumst",{"_index":2713,"title":{},"name":{},"text":{"126":{}},"component":{}}],["clang",{"_index":786,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["class",{"_index":533,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{},"126":{}},"component":{}}],["clean",{"_index":774,"title":{},"name":{},"text":{"6":{},"19":{},"25":{},"37":{},"43":{},"56":{},"61":{},"72":{},"74":{},"79":{},"90":{},"92":{},"101":{},"113":{}},"component":{}}],["clear",{"_index":1174,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["cli",{"_index":202,"title":{"16-1":{},"35-1":{},"53-1":{},"71-1":{},"89-1":{},"111-1":{}},"name":{},"text":{"2":{},"3":{},"15":{},"17":{},"21":{},"22":{},"34":{},"36":{},"39":{},"40":{},"52":{},"54":{},"58":{},"59":{},"70":{},"73":{},"76":{},"77":{},"88":{},"91":{},"97":{},"98":{},"110":{},"112":{},"126":{}},"component":{}}],["click",{"_index":2458,"title":{},"name":{},"text":{"117":{}},"component":{}}],["client",{"_index":20,"title":{"7-2":{},"15-3":{},"26-2":{},"34-3":{},"44-2":{},"52-3":{},"62-2":{},"80-2":{},"102-2":{},"110-3":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"20":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"34":{},"38":{},"40":{},"41":{},"42":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"52":{},"57":{},"59":{},"60":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"70":{},"72":{},"75":{},"77":{},"78":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"88":{},"90":{},"93":{},"94":{},"98":{},"99":{},"100":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"110":{},"115":{},"117":{},"120":{},"127":{},"133":{},"134":{}},"component":{}}],["client_cert",{"_index":1085,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["client_hash",{"_index":1083,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["client_pairing_secret",{"_index":1087,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["client_public_cert_signatur",{"_index":1089,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["client_secret",{"_index":1090,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["clientvers",{"_index":1763,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["client’",{"_index":2833,"title":{},"name":{},"text":{"133":{}},"component":{}}],["clone",{"_index":701,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"116":{},"122":{}},"component":{}}],["close",{"_index":1815,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{},"125":{}},"component":{}}],["cluster",{"_index":2531,"title":{},"name":{},"text":{"123":{}},"component":{}}],["cmake",{"_index":664,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["code",{"_index":124,"title":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"4-3":{},"23-3":{},"41-3":{},"60-3":{},"78-3":{},"99-3":{}},"name":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"text":{"2":{},"4":{},"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"21":{},"23":{},"24":{},"30":{},"31":{},"32":{},"33":{},"34":{},"39":{},"41":{},"42":{},"48":{},"49":{},"50":{},"51":{},"52":{},"58":{},"60":{},"66":{},"67":{},"68":{},"69":{},"70":{},"72":{},"76":{},"78":{},"84":{},"85":{},"86":{},"87":{},"88":{},"90":{},"97":{},"99":{},"100":{},"106":{},"107":{},"108":{},"109":{},"110":{},"118":{}},"component":{}}],["codec_data=(buffer)1210",{"_index":1929,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["collect",{"_index":2524,"title":{},"name":{},"text":{"121":{}},"component":{}}],["color",{"_index":1048,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["colorimetry=(string)bt601",{"_index":2214,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["colorimetry={color_spac",{"_index":1962,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["combin",{"_index":1384,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"119":{},"120":{}},"component":{}}],["come",{"_index":885,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"115":{},"126":{},"127":{},"129":{}},"component":{}}],["comma",{"_index":1296,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["command",{"_index":314,"title":{},"name":{},"text":{"3":{},"14":{},"18":{},"19":{},"22":{},"33":{},"37":{},"40":{},"51":{},"55":{},"56":{},"59":{},"69":{},"70":{},"77":{},"87":{},"88":{},"96":{},"98":{},"109":{},"113":{},"114":{},"124":{},"126":{},"131":{},"134":{}},"component":{}}],["commandlin",{"_index":2597,"title":{},"name":{},"text":{"124":{}},"component":{}}],["comment",{"_index":2437,"title":{},"name":{},"text":{"116":{},"119":{},"131":{}},"component":{}}],["commit",{"_index":893,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"119":{}},"component":{}}],["common",{"_index":1741,"title":{},"name":{},"text":{"13":{},"15":{},"32":{},"34":{},"50":{},"52":{},"68":{},"70":{},"86":{},"88":{},"108":{},"110":{},"134":{},"136":{}},"component":{}}],["commun",{"_index":377,"title":{},"name":{},"text":{"3":{},"7":{},"12":{},"13":{},"19":{},"22":{},"26":{},"31":{},"32":{},"37":{},"40":{},"44":{},"49":{},"50":{},"56":{},"59":{},"62":{},"67":{},"68":{},"74":{},"77":{},"80":{},"85":{},"86":{},"92":{},"95":{},"98":{},"102":{},"107":{},"108":{},"113":{},"115":{}},"component":{}}],["comp",{"_index":1963,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["compact",{"_index":2735,"title":{},"name":{},"text":{"127":{}},"component":{}}],["compat",{"_index":2060,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"127":{}},"component":{}}],["compil",{"_index":641,"title":{"6-6":{},"25-6":{},"43-6":{},"61-6":{},"79-6":{},"101-6":{}},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["complain",{"_index":944,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["complet",{"_index":525,"title":{},"name":{},"text":{"4":{},"6":{},"13":{},"23":{},"25":{},"32":{},"41":{},"43":{},"50":{},"60":{},"61":{},"68":{},"70":{},"72":{},"78":{},"79":{},"86":{},"88":{},"90":{},"99":{},"101":{},"108":{},"117":{},"121":{},"127":{},"131":{},"132":{}},"component":{}}],["complex",{"_index":486,"title":{},"name":{},"text":{"4":{},"5":{},"17":{},"23":{},"24":{},"36":{},"41":{},"42":{},"54":{},"60":{},"73":{},"78":{},"91":{},"99":{},"100":{},"112":{},"125":{}},"component":{}}],["complic",{"_index":2417,"title":{},"name":{},"text":{"115":{}},"component":{}}],["compon",{"_index":423,"title":{"115":{}},"name":{"115":{}},"text":{"3":{},"4":{},"5":{},"7":{},"13":{},"22":{},"23":{},"24":{},"26":{},"32":{},"40":{},"41":{},"42":{},"44":{},"50":{},"59":{},"60":{},"62":{},"68":{},"77":{},"78":{},"80":{},"86":{},"98":{},"99":{},"100":{},"102":{},"108":{},"115":{},"127":{},"131":{},"135":{}},"component":{}}],["compos",{"_index":493,"title":{"114-8":{},"129-8":{}},"name":{},"text":{"4":{},"5":{},"7":{},"12":{},"13":{},"14":{},"17":{},"23":{},"24":{},"26":{},"31":{},"32":{},"33":{},"36":{},"41":{},"42":{},"44":{},"49":{},"50":{},"51":{},"54":{},"60":{},"62":{},"67":{},"68":{},"69":{},"73":{},"78":{},"80":{},"85":{},"86":{},"87":{},"91":{},"99":{},"100":{},"102":{},"107":{},"108":{},"109":{},"112":{},"115":{},"119":{},"129":{},"131":{}},"component":{}}],["compose/app",{"_index":2397,"title":{},"name":{},"text":{"114":{},"131":{}},"component":{}}],["compose/headless.yml",{"_index":2692,"title":{},"name":{},"text":{"125":{}},"component":{}}],["composit",{"_index":841,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"115":{}},"component":{}}],["compositor",{"_index":571,"title":{"7-1":{},"7-3":{},"26-1":{},"26-3":{},"44-1":{},"44-3":{},"62-1":{},"62-3":{},"80-1":{},"80-3":{},"102-1":{},"102-3":{}},"name":{},"text":{"5":{},"7":{},"16":{},"24":{},"26":{},"35":{},"42":{},"44":{},"53":{},"62":{},"70":{},"71":{},"80":{},"88":{},"89":{},"100":{},"102":{},"111":{}},"component":{}}],["comput",{"_index":2166,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{},"122":{},"127":{},"131":{},"135":{}},"component":{}}],["con",{"_index":2873,"title":{},"name":{},"text":{"135":{}},"component":{}}],["concept",{"_index":2402,"title":{},"name":{},"text":{"115":{}},"component":{}}],["concurr",{"_index":156,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["condit",{"_index":153,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["confidenti",{"_index":982,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["config",{"_index":74,"title":{},"name":{},"text":{"1":{},"6":{},"12":{},"15":{},"20":{},"25":{},"31":{},"34":{},"38":{},"43":{},"49":{},"52":{},"57":{},"61":{},"67":{},"70":{},"75":{},"79":{},"85":{},"88":{},"93":{},"101":{},"107":{},"110":{},"114":{},"124":{},"133":{}},"component":{}}],["config.toml",{"_index":631,"title":{"124-13":{},"124-20":{},"124-21":{}},"name":{},"text":{"5":{},"6":{},"15":{},"24":{},"25":{},"34":{},"42":{},"43":{},"52":{},"61":{},"70":{},"79":{},"88":{},"95":{},"100":{},"101":{},"110":{},"124":{}},"component":{}}],["config/platforms/headless.yml",{"_index":2775,"title":{},"name":{},"text":{"128":{}},"component":{}}],["config_vers",{"_index":2231,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["configur",{"_index":1440,"title":{"15":{},"34":{},"52":{},"70":{},"88":{},"95":{},"110":{},"116":{},"18-5":{},"55-5":{},"95-5":{},"95-7":{},"96-5":{},"114-2":{},"124-7":{},"124-17":{},"125-5":{},"125-6":{}},"name":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{},"116":{}},"text":{"12":{},"15":{},"18":{},"19":{},"31":{},"34":{},"37":{},"49":{},"52":{},"55":{},"56":{},"67":{},"70":{},"74":{},"85":{},"88":{},"92":{},"94":{},"95":{},"96":{},"107":{},"110":{},"113":{},"114":{},"116":{},"120":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"131":{},"132":{},"135":{}},"component":{}}],["conflict",{"_index":2879,"title":{},"name":{},"text":{"135":{}},"component":{}}],["confus",{"_index":2498,"title":{},"name":{},"text":{"119":{}},"component":{}}],["connect",{"_index":289,"title":{"117":{}},"name":{"117":{}},"text":{"3":{},"9":{},"12":{},"13":{},"15":{},"22":{},"28":{},"31":{},"32":{},"34":{},"40":{},"46":{},"49":{},"50":{},"52":{},"59":{},"64":{},"67":{},"68":{},"70":{},"77":{},"82":{},"85":{},"86":{},"88":{},"94":{},"98":{},"104":{},"107":{},"108":{},"110":{},"117":{},"120":{},"123":{},"125":{},"129":{},"131":{},"132":{},"134":{}},"component":{}}],["connectedmonitor",{"_index":2688,"title":{},"name":{},"text":{"125":{}},"component":{}}],["connector",{"_index":1363,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["consid",{"_index":2362,"title":{},"name":{},"text":{"95":{},"114":{},"123":{},"124":{}},"component":{}}],["consist",{"_index":892,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"124":{},"127":{}},"component":{}}],["constant",{"_index":97,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["construct",{"_index":479,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["consult",{"_index":2781,"title":{},"name":{},"text":{"129":{}},"component":{}}],["contain",{"_index":68,"title":{"114-1":{},"124-7":{},"132-1":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"9":{},"11":{},"12":{},"13":{},"15":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"28":{},"30":{},"31":{},"32":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"46":{},"48":{},"49":{},"50":{},"52":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"64":{},"66":{},"67":{},"68":{},"70":{},"72":{},"73":{},"75":{},"76":{},"77":{},"78":{},"82":{},"84":{},"85":{},"86":{},"88":{},"90":{},"91":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"104":{},"106":{},"107":{},"108":{},"110":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{},"120":{},"124":{},"125":{},"126":{},"127":{},"128":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{}},"component":{}}],["container",{"_index":2812,"title":{},"name":{},"text":{"131":{},"135":{},"136":{}},"component":{}}],["containeris",{"_index":615,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["content",{"_index":33,"title":{},"name":{},"text":{"1":{},"3":{},"7":{},"12":{},"13":{},"20":{},"22":{},"26":{},"31":{},"32":{},"38":{},"40":{},"44":{},"49":{},"50":{},"57":{},"59":{},"62":{},"67":{},"68":{},"75":{},"77":{},"80":{},"85":{},"86":{},"93":{},"95":{},"98":{},"102":{},"107":{},"108":{},"114":{},"124":{},"128":{}},"component":{}}],["context",{"_index":2400,"title":{},"name":{},"text":{"114":{}},"component":{}}],["continu",{"_index":894,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"115":{},"127":{}},"component":{}}],["contribut",{"_index":2459,"title":{},"name":{"118":{}},"text":{"118":{},"130":{}},"component":{}}],["control",{"_index":197,"title":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{},"11-9":{},"11-10":{},"11-11":{},"11-14":{},"11-15":{},"11-16":{},"30-9":{},"30-10":{},"30-11":{},"30-14":{},"30-15":{},"30-16":{},"48-9":{},"48-10":{},"48-11":{},"48-14":{},"48-15":{},"48-16":{},"66-9":{},"66-10":{},"66-11":{},"66-14":{},"66-15":{},"66-16":{},"84-9":{},"84-10":{},"84-11":{},"84-14":{},"84-15":{},"84-16":{},"106-9":{},"106-10":{},"106-11":{},"106-14":{},"106-15":{},"106-16":{}},"name":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"text":{"2":{},"3":{},"8":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"21":{},"22":{},"27":{},"29":{},"30":{},"31":{},"32":{},"33":{},"36":{},"37":{},"39":{},"40":{},"45":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"56":{},"58":{},"59":{},"63":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"73":{},"74":{},"76":{},"77":{},"81":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"91":{},"92":{},"97":{},"98":{},"103":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"113":{},"135":{}},"component":{}}],["control.hpp",{"_index":219,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["controller_arriv",{"_index":1142,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["controller_batteri",{"_index":1148,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["controller_mot",{"_index":1146,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["controller_multi",{"_index":1140,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["controller_touch",{"_index":1144,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["conveni",{"_index":2440,"title":{},"name":{},"text":{"116":{}},"component":{}}],["convert",{"_index":1726,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["coordin",{"_index":1154,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["copi",{"_index":875,"title":{"114-7":{}},"name":{},"text":{"7":{},"18":{},"19":{},"26":{},"34":{},"37":{},"44":{},"55":{},"56":{},"62":{},"80":{},"96":{},"102":{},"113":{},"114":{},"124":{},"125":{},"134":{}},"component":{}}],["core",{"_index":210,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"115":{},"134":{}},"component":{}}],["correct",{"_index":1426,"title":{"12-6":{},"13-5":{},"31-6":{},"32-5":{},"49-6":{},"50-5":{},"67-6":{},"68-5":{},"85-6":{},"86-5":{},"107-6":{},"108-5":{}},"name":{},"text":{"124":{},"125":{},"126":{},"128":{}},"component":{}}],["correctli",{"_index":458,"title":{},"name":{},"text":{"3":{},"4":{},"6":{},"10":{},"17":{},"22":{},"23":{},"25":{},"29":{},"36":{},"40":{},"41":{},"43":{},"47":{},"54":{},"59":{},"60":{},"61":{},"65":{},"70":{},"73":{},"77":{},"78":{},"79":{},"83":{},"88":{},"91":{},"98":{},"99":{},"101":{},"105":{},"112":{},"116":{},"124":{},"126":{},"134":{}},"component":{}}],["correspond",{"_index":391,"title":{},"name":{},"text":{"3":{},"11":{},"15":{},"17":{},"19":{},"22":{},"30":{},"36":{},"37":{},"40":{},"48":{},"52":{},"54":{},"56":{},"59":{},"66":{},"70":{},"73":{},"74":{},"77":{},"84":{},"88":{},"91":{},"92":{},"98":{},"106":{},"110":{},"112":{},"113":{}},"component":{}}],["count",{"_index":1442,"title":{},"name":{},"text":{"12":{},"17":{},"31":{},"36":{},"49":{},"54":{},"67":{},"73":{},"85":{},"91":{},"107":{},"112":{}},"component":{}}],["coupl",{"_index":632,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{},"124":{},"125":{},"136":{}},"component":{}}],["cours",{"_index":889,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"119":{}},"component":{}}],["cp",{"_index":2863,"title":{},"name":{},"text":{"134":{}},"component":{}}],["cpu",{"_index":867,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"135":{}},"component":{}}],["creat",{"_index":103,"title":{"134-2":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"12":{},"13":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"31":{},"32":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"49":{},"50":{},"52":{},"54":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"67":{},"68":{},"70":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"85":{},"86":{},"88":{},"91":{},"92":{},"93":{},"95":{},"97":{},"98":{},"99":{},"100":{},"101":{},"102":{},"107":{},"108":{},"110":{},"112":{},"113":{},"114":{},"116":{},"120":{},"123":{},"124":{},"125":{},"128":{},"129":{},"130":{},"131":{},"134":{},"135":{}},"component":{}}],["creation",{"_index":37,"title":{},"name":{},"text":{"1":{},"3":{},"20":{},"22":{},"38":{},"40":{},"57":{},"59":{},"75":{},"77":{},"93":{},"98":{}},"component":{}}],["cross",{"_index":2755,"title":{},"name":{},"text":{"127":{}},"component":{}}],["crucial",{"_index":407,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"77":{},"80":{},"98":{},"102":{}},"component":{}}],["crw",{"_index":2096,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"123":{},"126":{},"129":{}},"component":{}}],["cryptographi",{"_index":1057,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["cseq",{"_index":1761,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["ctrl",{"_index":1385,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["ctrl+alt+shift+",{"_index":2855,"title":{},"name":{},"text":{"134":{}},"component":{}}],["cuda",{"_index":623,"title":{"6-1":{},"25-1":{},"43-1":{},"61-1":{},"79-1":{},"101-1":{}},"name":{},"text":{"5":{},"6":{},"24":{},"25":{},"42":{},"43":{},"61":{},"79":{},"100":{},"101":{},"115":{},"126":{}},"component":{}}],["curat",{"_index":2797,"title":{},"name":{},"text":{"130":{}},"component":{}}],["curiou",{"_index":2268,"title":{},"name":{},"text":{"72":{},"90":{}},"component":{}}],["curl",{"_index":784,"title":{},"name":{},"text":{"6":{},"17":{},"25":{},"36":{},"43":{},"54":{},"61":{},"73":{},"79":{},"91":{},"101":{},"112":{},"117":{},"123":{}},"component":{}}],["curlhttpsrc",{"_index":1918,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["current",{"_index":214,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"10":{},"11":{},"13":{},"18":{},"21":{},"22":{},"26":{},"29":{},"30":{},"32":{},"39":{},"40":{},"44":{},"47":{},"48":{},"50":{},"55":{},"58":{},"59":{},"62":{},"65":{},"66":{},"68":{},"70":{},"76":{},"77":{},"80":{},"83":{},"84":{},"86":{},"88":{},"96":{},"97":{},"98":{},"102":{},"105":{},"106":{},"108":{},"115":{},"128":{},"132":{},"134":{},"136":{}},"component":{}}],["cursor",{"_index":2093,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["cursor=tru",{"_index":1883,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["custom",{"_index":420,"title":{"95-9":{},"124-14":{},"125-3":{}},"name":{},"text":{"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"17":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"36":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"54":{},"59":{},"60":{},"61":{},"62":{},"63":{},"70":{},"73":{},"77":{},"78":{},"79":{},"80":{},"81":{},"88":{},"91":{},"95":{},"98":{},"99":{},"100":{},"101":{},"102":{},"103":{},"112":{},"124":{},"125":{}},"component":{}}],["customedid",{"_index":2686,"title":{},"name":{},"text":{"125":{}},"component":{}}],["customis",{"_index":2618,"title":{},"name":{},"text":{"124":{}},"component":{}}],["cut",{"_index":1856,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{},"131":{}},"component":{}}],["d",{"_index":1234,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"48":{},"54":{},"66":{},"73":{},"84":{},"91":{},"106":{},"112":{},"131":{}},"component":{}}],["d0",{"_index":1631,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["d1",{"_index":1654,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["d6",{"_index":1610,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["d7",{"_index":1680,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["d8",{"_index":1569,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["d9",{"_index":1620,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["d=`grep",{"_index":2071,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["da",{"_index":1568,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["data",{"_index":148,"title":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"8-5":{},"15-2":{},"27-5":{},"34-2":{},"45-5":{},"52-2":{},"63-5":{},"81-5":{},"103-5":{},"110-2":{}},"name":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"text":{"2":{},"4":{},"7":{},"8":{},"10":{},"11":{},"13":{},"14":{},"15":{},"21":{},"23":{},"26":{},"27":{},"29":{},"30":{},"32":{},"33":{},"34":{},"39":{},"41":{},"44":{},"45":{},"47":{},"48":{},"50":{},"51":{},"52":{},"58":{},"60":{},"62":{},"63":{},"65":{},"66":{},"68":{},"69":{},"76":{},"78":{},"80":{},"81":{},"83":{},"84":{},"86":{},"87":{},"97":{},"99":{},"102":{},"103":{},"105":{},"106":{},"108":{},"109":{},"110":{},"116":{},"124":{},"125":{},"126":{}},"component":{}}],["databas",{"_index":2435,"title":{},"name":{},"text":{"116":{}},"component":{}}],["date",{"_index":1992,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{},"127":{}},"component":{}}],["day",{"_index":2794,"title":{},"name":{},"text":{"130":{}},"component":{}}],["db",{"_index":352,"title":{},"name":{},"text":{"3":{},"13":{},"22":{},"32":{},"40":{},"50":{},"59":{},"68":{},"77":{},"86":{},"98":{},"108":{}},"component":{}}],["dbad=en",{"_index":732,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dbase=en",{"_index":719,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dc",{"_index":1693,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["dcmake_build_type=releas",{"_index":803,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dcmake_c_flags=$cflag",{"_index":802,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dcmake_cxx_extensions=off",{"_index":805,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dcmake_cxx_standard=17",{"_index":804,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dd",{"_index":1683,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["ddoc=dis",{"_index":728,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["de",{"_index":1596,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["deal",{"_index":151,"title":{},"name":{},"text":{"2":{},"7":{},"21":{},"26":{},"39":{},"44":{},"58":{},"62":{},"76":{},"80":{},"97":{},"102":{}},"component":{}}],["debian",{"_index":644,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"129":{}},"component":{}}],["debug",{"_index":765,"title":{},"name":{},"text":{"6":{},"12":{},"15":{},"19":{},"25":{},"31":{},"34":{},"37":{},"43":{},"49":{},"52":{},"56":{},"61":{},"67":{},"70":{},"74":{},"79":{},"85":{},"88":{},"92":{},"101":{},"107":{},"110":{},"113":{},"131":{}},"component":{}}],["decid",{"_index":527,"title":{},"name":{},"text":{"4":{},"7":{},"23":{},"26":{},"41":{},"44":{},"60":{},"62":{},"78":{},"80":{},"99":{},"102":{}},"component":{}}],["decim",{"_index":1461,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["decis",{"_index":2870,"title":{"135-1":{}},"name":{},"text":{},"component":{}}],["deck",{"_index":2753,"title":{},"name":{},"text":{"127":{}},"component":{}}],["declar",{"_index":1733,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"125":{}},"component":{}}],["decod",{"_index":506,"title":{},"name":{},"text":{"4":{},"11":{},"23":{},"30":{},"41":{},"48":{},"60":{},"66":{},"78":{},"84":{},"99":{},"106":{}},"component":{}}],["decodebin",{"_index":1902,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["decoupl",{"_index":160,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"115":{}},"component":{}}],["decrypt",{"_index":964,"title":{"8-3":{},"27-3":{},"45-3":{},"63-3":{},"81-3":{},"103-3":{}},"name":{},"text":{"8":{},"9":{},"27":{},"28":{},"45":{},"46":{},"63":{},"64":{},"81":{},"82":{},"103":{},"104":{}},"component":{}}],["dedic",{"_index":2763,"title":{},"name":{},"text":{"128":{},"131":{}},"component":{}}],["deep",{"_index":2826,"title":{},"name":{},"text":{"132":{}},"component":{}}],["default",{"_index":261,"title":{"15-7":{},"34-7":{},"52-7":{},"110-7":{}},"name":{},"text":{"2":{},"3":{},"6":{},"8":{},"10":{},"13":{},"15":{},"17":{},"18":{},"21":{},"22":{},"25":{},"27":{},"29":{},"32":{},"34":{},"36":{},"39":{},"40":{},"43":{},"45":{},"47":{},"50":{},"52":{},"54":{},"55":{},"58":{},"59":{},"61":{},"63":{},"65":{},"68":{},"70":{},"73":{},"76":{},"77":{},"79":{},"81":{},"83":{},"86":{},"88":{},"91":{},"95":{},"96":{},"97":{},"98":{},"101":{},"103":{},"105":{},"108":{},"110":{},"112":{},"114":{},"115":{},"117":{},"120":{},"124":{},"129":{},"131":{}},"component":{}}],["defaultdepth",{"_index":2682,"title":{},"name":{},"text":{"125":{}},"component":{}}],["defeat",{"_index":355,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["defin",{"_index":209,"title":{"15-6":{},"34-6":{},"52-6":{},"70-3":{},"88-3":{},"110-6":{}},"name":{},"text":{"2":{},"3":{},"11":{},"12":{},"13":{},"15":{},"21":{},"22":{},"30":{},"31":{},"32":{},"34":{},"39":{},"40":{},"48":{},"49":{},"50":{},"52":{},"58":{},"59":{},"66":{},"67":{},"68":{},"70":{},"76":{},"77":{},"84":{},"85":{},"86":{},"88":{},"97":{},"98":{},"106":{},"107":{},"108":{},"110":{},"124":{},"134":{}},"component":{}}],["definit",{"_index":239,"title":{},"name":{},"text":{"2":{},"4":{},"14":{},"21":{},"23":{},"33":{},"39":{},"41":{},"51":{},"58":{},"60":{},"69":{},"70":{},"76":{},"78":{},"87":{},"88":{},"97":{},"99":{},"109":{},"114":{},"131":{}},"component":{}}],["degre",{"_index":2419,"title":{},"name":{},"text":{"115":{}},"component":{}}],["delet",{"_index":1216,"title":{},"name":{},"text":{"11":{},"15":{},"30":{},"48":{},"52":{},"66":{},"70":{},"84":{},"88":{},"106":{},"110":{},"114":{},"135":{}},"component":{}}],["delimit",{"_index":1753,"title":{},"name":{},"text":{"13":{},"14":{},"32":{},"33":{},"50":{},"51":{},"68":{},"69":{},"86":{},"87":{},"108":{},"109":{}},"component":{}}],["deliveri",{"_index":526,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["delta",{"_index":1156,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["demand",{"_index":36,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"17":{},"20":{},"22":{},"24":{},"36":{},"38":{},"40":{},"42":{},"54":{},"57":{},"59":{},"72":{},"73":{},"75":{},"77":{},"90":{},"91":{},"93":{},"98":{},"100":{},"112":{}},"component":{}}],["demonstr",{"_index":2355,"title":{},"name":{},"text":{"95":{}},"component":{}}],["demux.audio_0",{"_index":1922,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["demux.audio_0_0100",{"_index":1940,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["demux.video_0",{"_index":1923,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["demux.video_0_0101",{"_index":1941,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["deni",{"_index":2851,"title":{"134-2":{}},"name":{},"text":{},"component":{}}],["dep",{"_index":640,"title":{"6-5":{},"25-5":{},"43-5":{},"61-5":{},"79-5":{},"101-5":{}},"name":{},"text":{},"component":{}}],["depend",{"_index":638,"title":{"6-2":{},"25-2":{},"43-2":{},"61-2":{},"79-2":{},"101-2":{}},"name":{},"text":{"6":{},"7":{},"8":{},"11":{},"25":{},"26":{},"27":{},"30":{},"43":{},"44":{},"45":{},"48":{},"61":{},"62":{},"63":{},"66":{},"79":{},"80":{},"81":{},"84":{},"101":{},"102":{},"103":{},"106":{},"115":{},"124":{},"125":{},"135":{}},"component":{}}],["deploy",{"_index":1999,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["deprec",{"_index":2820,"title":{},"name":{},"text":{"131":{}},"component":{}}],["depth",{"_index":613,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{},"125":{}},"component":{}}],["depth=1",{"_index":704,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["deriv",{"_index":1065,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["describ",{"_index":627,"title":{},"name":{},"text":{"5":{},"7":{},"14":{},"24":{},"26":{},"33":{},"42":{},"44":{},"51":{},"62":{},"69":{},"80":{},"87":{},"100":{},"102":{},"109":{},"119":{}},"component":{}}],["descript",{"_index":987,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"15":{},"27":{},"30":{},"32":{},"34":{},"45":{},"48":{},"50":{},"52":{},"63":{},"66":{},"68":{},"70":{},"81":{},"84":{},"86":{},"88":{},"103":{},"106":{},"108":{},"110":{},"124":{},"131":{}},"component":{}}],["design",{"_index":876,"title":{},"name":{},"text":{"7":{},"10":{},"26":{},"29":{},"44":{},"47":{},"62":{},"65":{},"80":{},"83":{},"95":{},"102":{},"105":{},"127":{}},"component":{}}],["desir",{"_index":2617,"title":{},"name":{},"text":{"124":{}},"component":{}}],["desktop",{"_index":39,"title":{"5-1":{},"16-3":{},"24-1":{},"35-3":{},"42-1":{},"53-3":{},"71-3":{},"89-3":{},"100-1":{},"111-3":{},"135-2":{}},"name":{},"text":{"1":{},"2":{},"5":{},"7":{},"11":{},"15":{},"16":{},"17":{},"20":{},"21":{},"24":{},"26":{},"30":{},"34":{},"35":{},"36":{},"38":{},"39":{},"42":{},"44":{},"48":{},"52":{},"53":{},"54":{},"57":{},"58":{},"62":{},"66":{},"70":{},"71":{},"73":{},"75":{},"76":{},"80":{},"84":{},"88":{},"89":{},"91":{},"93":{},"97":{},"100":{},"102":{},"106":{},"110":{},"111":{},"112":{},"115":{},"116":{},"117":{},"120":{},"123":{},"124":{},"125":{},"127":{},"129":{},"131":{},"132":{},"134":{},"135":{},"136":{}},"component":{}}],["desktop.env",{"_index":2444,"title":{},"name":{},"text":{"116":{}},"component":{}}],["despit",{"_index":2505,"title":{},"name":{},"text":{"120":{}},"component":{}}],["detail",{"_index":81,"title":{},"name":{},"text":{"1":{},"5":{},"13":{},"17":{},"19":{},"20":{},"24":{},"32":{},"36":{},"37":{},"38":{},"42":{},"50":{},"54":{},"56":{},"57":{},"68":{},"73":{},"75":{},"86":{},"91":{},"93":{},"94":{},"95":{},"100":{},"108":{},"112":{},"113":{},"118":{},"119":{},"120":{},"129":{},"131":{},"132":{}},"component":{}}],["detect",{"_index":292,"title":{},"name":{},"text":{"3":{},"11":{},"22":{},"30":{},"40":{},"48":{},"59":{},"66":{},"77":{},"84":{},"98":{},"106":{},"133":{}},"component":{}}],["determin",{"_index":1361,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"125":{}},"component":{}}],["dev",{"_index":642,"title":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dev/:/dev/:rw",{"_index":1978,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["dev/dri",{"_index":1975,"title":{},"name":{},"text":{"17":{},"18":{},"34":{},"36":{},"54":{},"55":{},"73":{},"91":{},"95":{},"96":{},"112":{},"124":{},"126":{}},"component":{}}],["dev/dri/cardx",{"_index":2421,"title":{},"name":{},"text":{"115":{}},"component":{}}],["dev/dri/renderd128",{"_index":1825,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["dev/dri/renderd129",{"_index":1850,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["dev/input",{"_index":318,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["dev/input:/dev/input:rw",{"_index":2271,"title":{},"name":{},"text":{"73":{},"91":{}},"component":{}}],["dev/nvidia",{"_index":2033,"title":{},"name":{},"text":{"17":{},"18":{},"34":{},"36":{},"54":{},"55":{},"73":{},"91":{},"95":{},"96":{},"112":{},"124":{}},"component":{}}],["dev/nvidia$i",{"_index":2065,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["dev/nvidia0",{"_index":2039,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["dev/nvidiactl",{"_index":2038,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["dev/shm",{"_index":2836,"title":{},"name":{},"text":{"133":{}},"component":{}}],["dev/shm:/dev/shm:rw",{"_index":2270,"title":{},"name":{},"text":{"73":{},"91":{}},"component":{}}],["dev/uhid",{"_index":1977,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["dev/uinput",{"_index":1976,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"123":{},"129":{}},"component":{}}],["develop",{"_index":95,"title":{},"name":{},"text":{"1":{},"7":{},"15":{},"20":{},"26":{},"38":{},"44":{},"52":{},"57":{},"62":{},"72":{},"75":{},"80":{},"90":{},"93":{},"102":{},"110":{},"127":{}},"component":{}}],["developerpaul123/eventbu",{"_index":248,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"97":{}},"component":{}}],["devic",{"_index":185,"title":{"3-1":{},"5-3":{},"17-3":{},"22-1":{},"24-3":{},"36-3":{},"40-1":{},"42-3":{},"54-3":{},"59-1":{},"73-3":{},"77-1":{},"91-3":{},"98-1":{},"100-3":{},"112-3":{}},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"17":{},"19":{},"21":{},"22":{},"24":{},"26":{},"36":{},"37":{},"39":{},"40":{},"42":{},"44":{},"54":{},"56":{},"58":{},"59":{},"62":{},"70":{},"72":{},"73":{},"74":{},"76":{},"77":{},"80":{},"88":{},"90":{},"91":{},"92":{},"95":{},"97":{},"98":{},"100":{},"102":{},"112":{},"113":{},"115":{},"120":{},"123":{},"124":{},"125":{},"126":{},"127":{},"129":{},"134":{}},"component":{}}],["device0",{"_index":2680,"title":{},"name":{},"text":{"125":{}},"component":{}}],["device_cgroup_rul",{"_index":1984,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["devicecgrouprul",{"_index":2338,"title":{},"name":{},"text":{"95":{},"124":{}},"component":{}}],["devices/bomb",{"_index":450,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1",{"_index":330,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["devname=/dev/input/js0",{"_index":335,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["dexamples=dis",{"_index":727,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["df",{"_index":1516,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"133":{}},"component":{}}],["dgood=en",{"_index":720,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dgpl=enabl",{"_index":718,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dgst",{"_index":715,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dgstreamer",{"_index":741,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dhliwayo",{"_index":9,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["differ",{"_index":32,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"6":{},"7":{},"14":{},"15":{},"17":{},"20":{},"22":{},"23":{},"24":{},"25":{},"26":{},"33":{},"34":{},"36":{},"38":{},"40":{},"41":{},"42":{},"43":{},"44":{},"51":{},"52":{},"54":{},"57":{},"59":{},"60":{},"61":{},"62":{},"69":{},"70":{},"73":{},"75":{},"77":{},"78":{},"79":{},"80":{},"87":{},"88":{},"91":{},"93":{},"94":{},"95":{},"98":{},"99":{},"100":{},"101":{},"102":{},"109":{},"110":{},"112":{},"127":{},"131":{},"133":{}},"component":{}}],["difficulti",{"_index":2783,"title":{},"name":{},"text":{"129":{}},"component":{}}],["digest",{"_index":2477,"title":{},"name":{},"text":{"119":{}},"component":{}}],["digest:sha256:6b8555260ed07c7ed466e0b821922a3cedf4ee27b9d6b8fea9d6aa2995b75f61",{"_index":2483,"title":{},"name":{},"text":{"119":{}},"component":{}}],["direct",{"_index":530,"title":{},"name":{},"text":{"4":{},"7":{},"23":{},"26":{},"41":{},"44":{},"60":{},"62":{},"78":{},"80":{},"99":{},"102":{}},"component":{}}],["directli",{"_index":579,"title":{"15-15":{},"18-1":{},"34-15":{},"52-15":{},"55-1":{},"96-1":{},"110-15":{}},"name":{},"text":{"5":{},"7":{},"17":{},"18":{},"24":{},"26":{},"34":{},"36":{},"42":{},"44":{},"54":{},"55":{},"62":{},"73":{},"80":{},"91":{},"96":{},"100":{},"102":{},"112":{},"117":{},"123":{},"124":{},"131":{},"134":{}},"component":{}}],["directori",{"_index":773,"title":{"95-3":{},"95-4":{},"134-2":{}},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"95":{},"101":{},"114":{},"116":{},"124":{},"131":{},"132":{},"134":{}},"component":{}}],["dirs.sh",{"_index":2567,"title":{},"name":{},"text":{"124":{}},"component":{}}],["disabl",{"_index":262,"title":{},"name":{},"text":{"2":{},"8":{},"21":{},"27":{},"39":{},"45":{},"58":{},"63":{},"70":{},"76":{},"81":{},"88":{},"97":{},"103":{},"134":{}},"component":{}}],["disappear",{"_index":2158,"title":{},"name":{},"text":{"18":{},"55":{},"96":{}},"component":{}}],["discord",{"_index":113,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{},"118":{},"126":{},"129":{},"133":{},"134":{}},"component":{}}],["discov",{"_index":2451,"title":{},"name":{},"text":{"117":{}},"component":{}}],["discover",{"_index":1873,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["discrimin",{"_index":1783,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["discuss",{"_index":817,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"118":{}},"component":{}}],["dismiss",{"_index":2418,"title":{},"name":{},"text":{"115":{}},"component":{}}],["display",{"_index":196,"title":{"6-4":{},"25-4":{},"43-4":{},"61-4":{},"79-4":{},"101-4":{}},"name":{},"text":{"2":{},"5":{},"6":{},"19":{},"21":{},"24":{},"25":{},"37":{},"39":{},"42":{},"43":{},"56":{},"58":{},"61":{},"70":{},"74":{},"76":{},"79":{},"88":{},"92":{},"97":{},"100":{},"101":{},"113":{},"115":{},"116":{},"119":{},"120":{},"125":{},"127":{}},"component":{}}],["display.hpp",{"_index":190,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["display/includ",{"_index":780,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["display/lib",{"_index":776,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["display/lib/pkgconfig",{"_index":782,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["displayport",{"_index":2657,"title":{},"name":{},"text":{"125":{}},"component":{}}],["distribut",{"_index":2600,"title":{},"name":{},"text":{"124":{},"127":{},"129":{}},"component":{}}],["distro",{"_index":647,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["distro’",{"_index":2782,"title":{},"name":{},"text":{"129":{}},"component":{}}],["dive",{"_index":548,"title":{},"name":{},"text":{"4":{},"7":{},"23":{},"26":{},"41":{},"44":{},"60":{},"62":{},"78":{},"80":{},"99":{},"102":{},"132":{}},"component":{}}],["dl",{"_index":1933,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["dlibav=dis",{"_index":725,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dma",{"_index":903,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["dmesg",{"_index":2179,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["do",{"_index":2475,"title":{},"name":{},"text":{"119":{},"136":{}},"component":{}}],["doc",{"_index":551,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"23":{},"25":{},"26":{},"41":{},"43":{},"44":{},"60":{},"61":{},"62":{},"72":{},"78":{},"79":{},"80":{},"90":{},"99":{},"101":{},"102":{}},"component":{}}],["docker",{"_index":64,"title":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"119":{},"15-10":{},"17-1":{},"34-10":{},"36-1":{},"52-10":{},"54-1":{},"70-6":{},"73-1":{},"88-6":{},"91-1":{},"110-10":{},"112-1":{},"125-6":{},"129-8":{}},"name":{"119":{}},"text":{"1":{},"2":{},"3":{},"5":{},"7":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"24":{},"26":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"42":{},"44":{},"52":{},"54":{},"56":{},"57":{},"58":{},"59":{},"62":{},"70":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"80":{},"88":{},"90":{},"91":{},"92":{},"93":{},"94":{},"95":{},"97":{},"98":{},"100":{},"102":{},"110":{},"112":{},"113":{},"114":{},"115":{},"119":{},"120":{},"121":{},"122":{},"124":{},"125":{},"126":{},"127":{},"129":{},"130":{},"131":{},"133":{},"134":{},"135":{},"136":{}},"component":{}}],["docker.hpp",{"_index":176,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["docker/podman",{"_index":79,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["docker_buildkit=1",{"_index":2489,"title":{},"name":{},"text":{"119":{}},"component":{}}],["dockerfil",{"_index":2372,"title":{"114-4":{},"124-10":{},"124-18":{}},"name":{},"text":{"114":{},"120":{},"124":{}},"component":{}}],["docs.docker.com/engine/api/v1.40",{"_index":2255,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["document",{"_index":2245,"title":{},"name":{},"text":{"70":{},"88":{},"95":{},"118":{},"124":{},"129":{},"130":{}},"component":{}}],["doesn't",{"_index":2167,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["doesn’t",{"_index":417,"title":{"134-3":{}},"name":{},"text":{"3":{},"5":{},"6":{},"7":{},"15":{},"17":{},"19":{},"22":{},"24":{},"25":{},"26":{},"34":{},"36":{},"37":{},"40":{},"42":{},"43":{},"44":{},"52":{},"54":{},"56":{},"59":{},"61":{},"62":{},"70":{},"73":{},"74":{},"77":{},"79":{},"80":{},"88":{},"91":{},"92":{},"98":{},"100":{},"101":{},"102":{},"110":{},"112":{},"113":{},"120":{},"125":{},"126":{},"129":{}},"component":{}}],["dolphin",{"_index":2350,"title":{},"name":{},"text":{"95":{}},"component":{}}],["done",{"_index":771,"title":{},"name":{},"text":{"6":{},"17":{},"25":{},"36":{},"43":{},"54":{},"61":{},"70":{},"73":{},"79":{},"88":{},"91":{},"95":{},"101":{},"112":{},"115":{},"132":{}},"component":{}}],["don’t",{"_index":282,"title":{"119-2":{}},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"70":{},"77":{},"80":{},"88":{},"98":{},"102":{},"115":{},"118":{},"119":{},"125":{},"134":{},"135":{}},"component":{}}],["dorc=dis",{"_index":717,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dot",{"_index":1300,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["doubl",{"_index":2719,"title":{},"name":{},"text":{"126":{}},"component":{}}],["down",{"_index":1209,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"48":{},"54":{},"66":{},"72":{},"73":{},"84":{},"90":{},"91":{},"106":{},"112":{},"131":{},"136":{}},"component":{}}],["download",{"_index":1891,"title":{},"name":{},"text":{"16":{},"17":{},"19":{},"35":{},"36":{},"37":{},"53":{},"54":{},"56":{},"71":{},"73":{},"74":{},"89":{},"91":{},"92":{},"95":{},"111":{},"112":{},"113":{},"119":{},"132":{}},"component":{}}],["downstream",{"_index":500,"title":{},"name":{},"text":{"4":{},"5":{},"23":{},"24":{},"41":{},"42":{},"60":{},"78":{},"99":{},"100":{}},"component":{}}],["dp",{"_index":2685,"title":{},"name":{},"text":{"125":{}},"component":{}}],["dpad_down",{"_index":1393,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["dpad_left",{"_index":1395,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["dpad_right",{"_index":1397,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["dpad_up",{"_index":1392,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["dpython=dis",{"_index":729,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dqt5=disabl",{"_index":731,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["drakulix",{"_index":91,"title":{},"name":{},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"44":{},"57":{},"62":{},"75":{},"80":{},"93":{},"102":{}},"component":{}}],["drakulix/sunris",{"_index":958,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["driver",{"_index":637,"title":{"6-1":{},"25-1":{},"43-1":{},"61-1":{},"79-1":{},"101-1":{},"126-1":{},"126-3":{},"126-4":{}},"name":{},"text":{"6":{},"7":{},"15":{},"17":{},"19":{},"25":{},"26":{},"34":{},"36":{},"37":{},"43":{},"44":{},"52":{},"54":{},"56":{},"61":{},"62":{},"70":{},"73":{},"74":{},"79":{},"80":{},"88":{},"91":{},"92":{},"101":{},"102":{},"110":{},"112":{},"113":{},"126":{},"128":{},"129":{},"133":{}},"component":{}}],["driver/dockerfil",{"_index":2003,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["driver:latest",{"_index":2005,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["driver=nouveau",{"_index":2718,"title":{},"name":{},"text":{"126":{}},"component":{}}],["driver=nvidia",{"_index":2701,"title":{},"name":{},"text":{"126":{}},"component":{}}],["drm",{"_index":868,"title":{},"name":{},"text":{"7":{},"17":{},"19":{},"26":{},"36":{},"37":{},"44":{},"54":{},"56":{},"62":{},"73":{},"74":{},"80":{},"91":{},"92":{},"102":{},"112":{},"113":{},"115":{},"128":{}},"component":{}}],["drm.modeset=1",{"_index":2024,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["drop",{"_index":941,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["drs=disabl",{"_index":722,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["drtsp_server=dis",{"_index":730,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["drwxr",{"_index":2720,"title":{},"name":{},"text":{"126":{}},"component":{}}],["dst",{"_index":2632,"title":{},"name":{},"text":{"124":{}},"component":{}}],["dtests=dis",{"_index":726,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dtls=disabl",{"_index":723,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dugly=en",{"_index":721,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dummi",{"_index":46,"title":{"125-2":{}},"name":{},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"44":{},"57":{},"62":{},"75":{},"80":{},"93":{},"102":{},"125":{},"129":{}},"component":{}}],["dunk",{"_index":2663,"title":{},"name":{},"text":{"125":{}},"component":{}}],["dure",{"_index":257,"title":{},"name":{},"text":{"2":{},"6":{},"8":{},"12":{},"13":{},"21":{},"25":{},"27":{},"31":{},"32":{},"39":{},"43":{},"45":{},"49":{},"50":{},"58":{},"61":{},"63":{},"67":{},"68":{},"76":{},"79":{},"81":{},"85":{},"86":{},"97":{},"101":{},"103":{},"107":{},"108":{},"134":{}},"component":{}}],["dvaapi=en",{"_index":740,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["dynam",{"_index":1108,"title":{},"name":{},"text":{"10":{},"29":{},"47":{},"65":{},"83":{},"105":{}},"component":{}}],["e",{"_index":1236,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"48":{},"54":{},"66":{},"73":{},"84":{},"91":{},"106":{},"112":{},"114":{},"124":{},"131":{}},"component":{}}],["e.g",{"_index":603,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["e1",{"_index":1560,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["e2",{"_index":1548,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["e28",{"_index":2234,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["e3",{"_index":1616,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["e4",{"_index":1536,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["e5",{"_index":1686,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["e6",{"_index":1565,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["e8",{"_index":1502,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["e9",{"_index":1523,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["ea",{"_index":1708,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["each",{"_index":514,"title":{},"name":{},"text":{"4":{},"7":{},"11":{},"12":{},"13":{},"15":{},"23":{},"26":{},"30":{},"31":{},"32":{},"34":{},"41":{},"44":{},"48":{},"49":{},"50":{},"52":{},"60":{},"62":{},"66":{},"67":{},"68":{},"70":{},"72":{},"78":{},"80":{},"84":{},"85":{},"86":{},"88":{},"90":{},"94":{},"95":{},"99":{},"102":{},"106":{},"107":{},"108":{},"110":{},"115":{},"116":{},"119":{},"125":{},"127":{},"131":{},"133":{},"135":{}},"component":{}}],["earli",{"_index":2744,"title":{},"name":{},"text":{"127":{}},"component":{}}],["earliest",{"_index":2500,"title":{},"name":{},"text":{"120":{}},"component":{}}],["easi",{"_index":182,"title":{},"name":{},"text":{"2":{},"5":{},"15":{},"21":{},"24":{},"39":{},"42":{},"52":{},"58":{},"76":{},"97":{},"100":{},"110":{},"114":{},"127":{},"133":{},"135":{}},"component":{}}],["easier",{"_index":2787,"title":{},"name":{},"text":{"129":{},"131":{},"135":{}},"component":{}}],["easiest",{"_index":1782,"title":{},"name":{},"text":{"14":{},"17":{},"33":{},"36":{},"51":{},"54":{},"69":{},"73":{},"87":{},"91":{},"109":{},"112":{},"114":{}},"component":{}}],["easili",{"_index":147,"title":{},"name":{},"text":{"2":{},"5":{},"13":{},"14":{},"21":{},"24":{},"32":{},"33":{},"39":{},"42":{},"50":{},"51":{},"58":{},"68":{},"69":{},"70":{},"76":{},"86":{},"87":{},"88":{},"97":{},"100":{},"108":{},"109":{},"114":{},"115":{},"119":{},"122":{},"129":{},"130":{},"135":{}},"component":{}}],["eb",{"_index":1579,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["echo",{"_index":441,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"70":{},"77":{},"88":{},"98":{}},"component":{}}],["ed",{"_index":1633,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["edg",{"_index":2818,"title":{},"name":{},"text":{"131":{}},"component":{}}],["edid",{"_index":826,"title":{"125-3":{},"125-4":{}},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"125":{}},"component":{}}],["edit",{"_index":73,"title":{},"name":{},"text":{"1":{},"4":{},"15":{},"20":{},"23":{},"38":{},"41":{},"52":{},"57":{},"60":{},"75":{},"78":{},"93":{},"95":{},"99":{},"110":{},"114":{},"119":{}},"component":{}}],["editor",{"_index":1723,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["ee",{"_index":1521,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["ef",{"_index":1664,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["effect",{"_index":130,"title":{},"name":{},"text":{"2":{},"17":{},"21":{},"36":{},"39":{},"54":{},"58":{},"73":{},"76":{},"91":{},"97":{},"112":{},"131":{}},"component":{}}],["effici",{"_index":900,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"70":{},"80":{},"88":{},"102":{}},"component":{}}],["effort",{"_index":2892,"title":{},"name":{},"text":{"136":{}},"component":{}}],["effortlessli",{"_index":157,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["eg",{"_index":2409,"title":{},"name":{},"text":{"115":{}},"component":{}}],["egl",{"_index":873,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["eh",{"_index":2472,"title":{},"name":{},"text":{"119":{}},"component":{}}],["elden",{"_index":2140,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"96":{}},"component":{}}],["element",{"_index":986,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"16":{},"27":{},"30":{},"32":{},"35":{},"45":{},"48":{},"50":{},"53":{},"63":{},"66":{},"68":{},"71":{},"81":{},"84":{},"86":{},"89":{},"103":{},"106":{},"108":{},"111":{}},"component":{}}],["eleph",{"_index":2874,"title":{},"name":{},"text":{"135":{}},"component":{}}],["elevate.mp3",{"_index":1905,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["elimin",{"_index":2286,"title":{},"name":{},"text":{"95":{}},"component":{}}],["emerg",{"_index":395,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["empti",{"_index":1768,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{},"124":{},"131":{}},"component":{}}],["emu.org/docs/guid",{"_index":2352,"title":{},"name":{},"text":{"95":{}},"component":{}}],["emul",{"_index":1364,"title":{"95-8":{}},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"48":{},"54":{},"66":{},"73":{},"84":{},"91":{},"95":{},"106":{},"112":{},"127":{}},"component":{}}],["emulationst",{"_index":2283,"title":{},"name":{},"text":{"95":{}},"component":{}}],["enabl",{"_index":161,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"18":{},"21":{},"22":{},"23":{},"39":{},"40":{},"41":{},"55":{},"58":{},"59":{},"60":{},"76":{},"77":{},"78":{},"96":{},"97":{},"98":{},"99":{},"115":{},"124":{},"129":{},"133":{}},"component":{}}],["enable_vkbasalt=1",{"_index":2248,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["encod",{"_index":53,"title":{"12-4":{},"15-14":{},"31-4":{},"34-13":{},"49-4":{},"52-14":{},"67-4":{},"70-9":{},"85-4":{},"88-9":{},"107-4":{},"110-14":{}},"name":{},"text":{"1":{},"4":{},"5":{},"7":{},"8":{},"10":{},"11":{},"12":{},"13":{},"15":{},"20":{},"23":{},"24":{},"26":{},"27":{},"29":{},"30":{},"31":{},"32":{},"38":{},"41":{},"42":{},"44":{},"45":{},"47":{},"48":{},"49":{},"50":{},"52":{},"57":{},"60":{},"62":{},"63":{},"65":{},"66":{},"67":{},"68":{},"70":{},"75":{},"78":{},"80":{},"81":{},"83":{},"84":{},"85":{},"86":{},"88":{},"93":{},"99":{},"100":{},"102":{},"103":{},"105":{},"106":{},"107":{},"108":{},"110":{},"115":{}},"component":{}}],["encoder_pipelin",{"_index":2260,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["encount",{"_index":2361,"title":{},"name":{},"text":{"95":{}},"component":{}}],["encourag",{"_index":601,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["encrypt",{"_index":513,"title":{"8-2":{},"12-5":{},"27-2":{},"31-5":{},"45-2":{},"49-5":{},"63-2":{},"67-5":{},"81-2":{},"85-5":{},"103-2":{},"107-5":{}},"name":{},"text":{"4":{},"8":{},"9":{},"10":{},"12":{},"23":{},"27":{},"28":{},"29":{},"31":{},"41":{},"45":{},"46":{},"47":{},"49":{},"60":{},"63":{},"64":{},"65":{},"67":{},"78":{},"81":{},"82":{},"83":{},"85":{},"99":{},"103":{},"104":{},"105":{},"107":{}},"component":{}}],["end",{"_index":497,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"11":{},"12":{},"13":{},"14":{},"23":{},"25":{},"26":{},"30":{},"31":{},"32":{},"33":{},"41":{},"43":{},"44":{},"48":{},"49":{},"50":{},"51":{},"60":{},"61":{},"62":{},"66":{},"67":{},"68":{},"69":{},"78":{},"79":{},"80":{},"84":{},"85":{},"86":{},"87":{},"99":{},"101":{},"102":{},"106":{},"107":{},"108":{},"109":{},"124":{},"125":{},"127":{},"131":{}},"component":{}}],["endian",{"_index":1003,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"45":{},"48":{},"63":{},"66":{},"81":{},"84":{},"103":{},"106":{}},"component":{}}],["endpoint",{"_index":1444,"title":{},"name":{},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"component":{}}],["endsect",{"_index":2691,"title":{},"name":{},"text":{"125":{},"128":{}},"component":{}}],["endsubsect",{"_index":2690,"title":{},"name":{},"text":{"125":{}},"component":{}}],["enet",{"_index":971,"title":{},"name":{},"text":{"8":{},"10":{},"27":{},"29":{},"45":{},"47":{},"63":{},"65":{},"81":{},"83":{},"103":{},"105":{}},"component":{}}],["engin",{"_index":2756,"title":{},"name":{},"text":{"127":{}},"component":{}}],["enhanc",{"_index":1746,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["enough",{"_index":457,"title":{},"name":{},"text":{"3":{},"4":{},"22":{},"23":{},"40":{},"41":{},"59":{},"60":{},"77":{},"78":{},"98":{},"99":{},"120":{},"128":{}},"component":{}}],["ensur",{"_index":617,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{},"123":{}},"component":{}}],["entangl",{"_index":380,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["enter",{"_index":1176,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"117":{}},"component":{}}],["entri",{"_index":382,"title":{},"name":{},"text":{"3":{},"15":{},"18":{},"22":{},"34":{},"40":{},"52":{},"55":{},"59":{},"70":{},"77":{},"88":{},"96":{},"98":{},"110":{},"124":{}},"component":{}}],["env",{"_index":744,"title":{"15-1":{},"34-1":{},"52-1":{},"70-1":{},"88-1":{},"110-1":{}},"name":{},"text":{"6":{},"15":{},"18":{},"19":{},"25":{},"34":{},"37":{},"43":{},"52":{},"55":{},"56":{},"61":{},"70":{},"74":{},"79":{},"88":{},"92":{},"95":{},"96":{},"101":{},"110":{},"113":{},"124":{},"131":{}},"component":{}}],["env/build.env",{"_index":2486,"title":{},"name":{},"text":{"119":{}},"component":{}}],["env/headless.env",{"_index":2447,"title":{},"name":{},"text":{"116":{},"125":{}},"component":{}}],["env/host",{"_index":2443,"title":{},"name":{},"text":{"116":{}},"component":{}}],["env/nvidia.env",{"_index":2704,"title":{},"name":{},"text":{"126":{}},"component":{}}],["environ",{"_index":616,"title":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"116-3":{},"116-4":{},"125-7":{}},"name":{},"text":{"5":{},"17":{},"24":{},"36":{},"42":{},"54":{},"73":{},"91":{},"100":{},"112":{},"115":{},"116":{},"119":{},"120":{},"124":{},"131":{},"135":{}},"component":{}}],["env{id_seat}=\"seat9",{"_index":2113,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["eof",{"_index":1463,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["eq",{"_index":2052,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["equal",{"_index":1343,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["equiv",{"_index":667,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["error",{"_index":1425,"title":{"12-6":{},"13-5":{},"19-2":{},"31-6":{},"32-5":{},"37-2":{},"49-6":{},"50-5":{},"56-2":{},"67-6":{},"68-5":{},"74-2":{},"85-6":{},"86-5":{},"92-2":{},"107-6":{},"108-5":{},"113-2":{}},"name":{},"text":{"12":{},"13":{},"15":{},"19":{},"31":{},"32":{},"34":{},"37":{},"49":{},"50":{},"52":{},"56":{},"67":{},"68":{},"70":{},"74":{},"85":{},"86":{},"88":{},"92":{},"107":{},"108":{},"110":{},"113":{}},"component":{}}],["esc",{"_index":1196,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["esoter",{"_index":825,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["essenti",{"_index":660,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["etc",{"_index":562,"title":{},"name":{},"text":{"4":{},"16":{},"23":{},"35":{},"41":{},"53":{},"60":{},"71":{},"78":{},"89":{},"99":{},"111":{},"123":{},"129":{},"130":{}},"component":{}}],["etc/default/grub",{"_index":2026,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"91":{},"112":{},"113":{}},"component":{}}],["etc/udev/rules.d/85",{"_index":2101,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["etc/wolf",{"_index":1823,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["etc/wolf/:/etc/wolf",{"_index":1983,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["etc/wolf/:/etc/wolf:rw",{"_index":2041,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["etc/wolf/cfg/cert.pem",{"_index":1802,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["etc/wolf/cfg/config.toml",{"_index":1796,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{},"124":{}},"component":{}}],["etc/wolf/cfg/key.pem",{"_index":1799,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["etc/wolf:/etc/wolf:rw",{"_index":1973,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["even",{"_index":524,"title":{},"name":{},"text":{"4":{},"7":{},"19":{},"23":{},"26":{},"37":{},"41":{},"44":{},"56":{},"60":{},"62":{},"70":{},"74":{},"78":{},"80":{},"88":{},"92":{},"99":{},"102":{},"113":{},"118":{},"120":{},"125":{},"127":{},"131":{},"134":{},"135":{},"136":{}},"component":{}}],["event",{"_index":203,"title":{"3-4":{},"8-4":{},"8-7":{},"22-4":{},"27-4":{},"27-7":{},"40-4":{},"45-4":{},"45-7":{},"59-4":{},"63-4":{},"63-7":{},"77-4":{},"81-4":{},"81-7":{},"98-4":{},"103-4":{},"103-7":{}},"name":{},"text":{"2":{},"3":{},"7":{},"8":{},"21":{},"22":{},"26":{},"27":{},"39":{},"40":{},"44":{},"45":{},"58":{},"59":{},"62":{},"63":{},"76":{},"77":{},"80":{},"81":{},"97":{},"98":{},"102":{},"103":{},"120":{}},"component":{}}],["event/fil",{"_index":453,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["everyon",{"_index":2665,"title":{},"name":{},"text":{"125":{}},"component":{}}],["everyth",{"_index":878,"title":{},"name":{},"text":{"7":{},"9":{},"18":{},"26":{},"28":{},"34":{},"44":{},"46":{},"55":{},"62":{},"64":{},"72":{},"80":{},"82":{},"90":{},"96":{},"102":{},"104":{},"118":{},"131":{}},"component":{}}],["everywher",{"_index":2740,"title":{},"name":{},"text":{"127":{}},"component":{}}],["ex",{"_index":2027,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"70":{},"73":{},"88":{},"91":{},"112":{},"124":{}},"component":{}}],["exact",{"_index":1740,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"125":{}},"component":{}}],["exactli",{"_index":367,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"77":{},"80":{},"98":{},"102":{},"124":{}},"component":{}}],["exampl",{"_index":52,"title":{"13-10":{},"16-2":{},"32-10":{},"35-2":{},"50-10":{},"53-2":{},"68-10":{},"71-2":{},"86-10":{},"89-2":{},"95-7":{},"108-10":{},"111-2":{},"119-1":{},"124-9":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"6":{},"8":{},"13":{},"14":{},"15":{},"16":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"27":{},"32":{},"33":{},"34":{},"35":{},"37":{},"38":{},"40":{},"41":{},"42":{},"43":{},"45":{},"50":{},"51":{},"52":{},"53":{},"55":{},"56":{},"57":{},"59":{},"60":{},"61":{},"63":{},"68":{},"69":{},"70":{},"71":{},"74":{},"75":{},"77":{},"78":{},"79":{},"81":{},"86":{},"87":{},"88":{},"89":{},"92":{},"93":{},"95":{},"96":{},"98":{},"99":{},"100":{},"101":{},"103":{},"108":{},"109":{},"110":{},"111":{},"113":{},"114":{},"119":{},"120":{},"124":{},"125":{},"131":{},"132":{},"133":{}},"component":{}}],["examples=dis",{"_index":724,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["excel",{"_index":2152,"title":{},"name":{},"text":{"18":{},"55":{},"96":{}},"component":{}}],["except",{"_index":1830,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{},"124":{}},"component":{}}],["exchang",{"_index":974,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"12":{},"13":{},"14":{},"27":{},"28":{},"29":{},"31":{},"32":{},"33":{},"45":{},"46":{},"47":{},"49":{},"50":{},"51":{},"63":{},"64":{},"65":{},"67":{},"68":{},"69":{},"81":{},"82":{},"83":{},"85":{},"86":{},"87":{},"103":{},"104":{},"105":{},"107":{},"108":{},"109":{}},"component":{}}],["exclus",{"_index":2563,"title":{},"name":{},"text":{"124":{}},"component":{}}],["exec",{"_index":316,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"114":{},"133":{}},"component":{}}],["execut",{"_index":241,"title":{},"name":{},"text":{"2":{},"14":{},"19":{},"21":{},"33":{},"37":{},"39":{},"51":{},"56":{},"58":{},"69":{},"76":{},"87":{},"97":{},"109":{},"113":{}},"component":{}}],["exist",{"_index":920,"title":{},"name":{},"text":{"7":{},"17":{},"18":{},"26":{},"34":{},"36":{},"44":{},"54":{},"55":{},"62":{},"73":{},"80":{},"91":{},"96":{},"102":{},"112":{},"114":{},"116":{},"120":{},"135":{}},"component":{}}],["exit",{"_index":2068,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["expand",{"_index":2463,"title":{},"name":{},"text":{"118":{},"130":{}},"component":{}}],["expect",{"_index":634,"title":{},"name":{},"text":{"5":{},"15":{},"24":{},"34":{},"42":{},"52":{},"70":{},"88":{},"100":{},"110":{},"127":{}},"component":{}}],["experienc",{"_index":2838,"title":{},"name":{},"text":{"133":{}},"component":{}}],["experiment",{"_index":950,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["explain",{"_index":957,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"132":{}},"component":{}}],["explan",{"_index":608,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["explicit",{"_index":929,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["explicitli",{"_index":2666,"title":{},"name":{},"text":{"125":{}},"component":{}}],["export",{"_index":747,"title":{},"name":{},"text":{"6":{},"7":{},"25":{},"26":{},"43":{},"44":{},"61":{},"62":{},"79":{},"80":{},"101":{},"102":{}},"component":{}}],["expos",{"_index":452,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"17":{},"22":{},"24":{},"26":{},"36":{},"40":{},"42":{},"44":{},"54":{},"59":{},"62":{},"73":{},"77":{},"80":{},"91":{},"98":{},"100":{},"102":{},"112":{}},"component":{}}],["express",{"_index":237,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"51":{},"58":{},"69":{},"76":{},"87":{},"97":{},"109":{}},"component":{}}],["extend",{"_index":2546,"title":{"124-8":{}},"name":{},"text":{"124":{}},"component":{}}],["extens",{"_index":1725,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"95":{},"108":{}},"component":{}}],["extern",{"_index":1820,"title":{},"name":{},"text":{"15":{},"17":{},"34":{},"36":{},"52":{},"54":{},"70":{},"73":{},"88":{},"91":{},"110":{},"112":{}},"component":{}}],["extra",{"_index":1094,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"114":{},"131":{},"136":{}},"component":{}}],["ey",{"_index":2094,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["f",{"_index":1238,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"48":{},"54":{},"66":{},"73":{},"84":{},"91":{},"106":{},"112":{},"134":{}},"component":{}}],["f0",{"_index":1632,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["f1",{"_index":1304,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["f10",{"_index":1322,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["f11",{"_index":1324,"title":{},"name":{},"text":{"11":{},"18":{},"30":{},"48":{},"55":{},"66":{},"84":{},"96":{},"106":{}},"component":{}}],["f12",{"_index":1326,"title":{},"name":{},"text":{"11":{},"18":{},"30":{},"48":{},"55":{},"66":{},"84":{},"96":{},"106":{}},"component":{}}],["f2",{"_index":1306,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["f3",{"_index":1308,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["f4",{"_index":1310,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["f5",{"_index":1312,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["f6",{"_index":1314,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["f7",{"_index":1316,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["f8",{"_index":1318,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["f9",{"_index":1320,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["fa",{"_index":1586,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["fact",{"_index":2504,"title":{},"name":{},"text":{"120":{},"127":{}},"component":{}}],["fail",{"_index":2045,"title":{"134-6":{}},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{},"125":{},"136":{}},"component":{}}],["fairli",{"_index":588,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{},"133":{}},"component":{}}],["fake",{"_index":273,"title":{"3-6":{},"5-4":{},"22-6":{},"24-4":{},"40-6":{},"42-4":{},"59-6":{},"77-6":{},"98-6":{},"100-4":{}},"name":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"text":{"3":{},"15":{},"22":{},"34":{},"40":{},"52":{},"59":{},"70":{},"77":{},"88":{},"98":{},"110":{}},"component":{}}],["fall",{"_index":268,"title":{"3-2":{},"22-2":{},"40-2":{},"59-2":{},"77-2":{},"98-2":{}},"name":{},"text":{"133":{}},"component":{}}],["fals",{"_index":1812,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"95":{},"110":{},"124":{}},"component":{}}],["famili",{"_index":2172,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["familiar",{"_index":547,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["famou",{"_index":2741,"title":{},"name":{},"text":{"127":{}},"component":{}}],["faq",{"_index":2365,"title":{},"name":{},"text":{"95":{}},"component":{}}],["far",{"_index":2516,"title":{},"name":{},"text":{"120":{}},"component":{}}],["fb",{"_index":1546,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["fc",{"_index":1603,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["fd",{"_index":1652,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["fe",{"_index":1688,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["featur",{"_index":1838,"title":{},"name":{},"text":{"15":{},"52":{},"110":{},"124":{},"130":{}},"component":{}}],["fec",{"_index":222,"title":{"12-6":{},"13-5":{},"31-6":{},"32-5":{},"49-6":{},"50-5":{},"67-6":{},"68-5":{},"85-6":{},"86-5":{},"107-6":{},"108-5":{}},"name":{},"text":{"2":{},"4":{},"5":{},"12":{},"13":{},"21":{},"23":{},"24":{},"31":{},"32":{},"39":{},"41":{},"42":{},"49":{},"50":{},"58":{},"60":{},"67":{},"68":{},"76":{},"78":{},"85":{},"86":{},"97":{},"99":{},"100":{},"107":{},"108":{}},"component":{}}],["fec.hpp",{"_index":224,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["fecpercentag",{"_index":1468,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["feed",{"_index":578,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["feel",{"_index":2353,"title":{},"name":{},"text":{"95":{},"118":{},"133":{},"134":{}},"component":{}}],["few",{"_index":567,"title":{},"name":{},"text":{"5":{},"9":{},"13":{},"24":{},"28":{},"32":{},"42":{},"46":{},"50":{},"64":{},"68":{},"72":{},"82":{},"86":{},"90":{},"100":{},"104":{},"108":{},"114":{},"120":{},"127":{},"131":{},"133":{}},"component":{}}],["ff",{"_index":1554,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["fi",{"_index":2069,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"124":{}},"component":{}}],["field",{"_index":1382,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["figur",{"_index":286,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"8":{},"10":{},"11":{},"12":{},"13":{},"22":{},"23":{},"26":{},"27":{},"29":{},"30":{},"31":{},"32":{},"40":{},"41":{},"44":{},"45":{},"47":{},"48":{},"49":{},"50":{},"59":{},"60":{},"62":{},"63":{},"65":{},"66":{},"67":{},"68":{},"77":{},"78":{},"80":{},"81":{},"83":{},"84":{},"85":{},"86":{},"98":{},"99":{},"102":{},"103":{},"105":{},"106":{},"107":{},"108":{}},"component":{}}],["file",{"_index":75,"title":{"15-5":{},"34-5":{},"52-5":{},"70-2":{},"88-2":{},"110-5":{},"114-8":{},"125-4":{}},"name":{},"text":{"1":{},"3":{},"5":{},"6":{},"13":{},"15":{},"17":{},"20":{},"22":{},"24":{},"25":{},"32":{},"34":{},"36":{},"38":{},"40":{},"42":{},"43":{},"50":{},"52":{},"54":{},"57":{},"59":{},"61":{},"68":{},"70":{},"73":{},"75":{},"77":{},"79":{},"86":{},"88":{},"91":{},"93":{},"95":{},"98":{},"100":{},"101":{},"108":{},"110":{},"112":{},"114":{},"116":{},"119":{},"120":{},"124":{},"125":{},"128":{},"131":{},"133":{},"134":{},"135":{}},"component":{}}],["filenam",{"_index":437,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["filesrc",{"_index":1895,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["filesystem",{"_index":454,"title":{},"name":{},"text":{"3":{},"6":{},"22":{},"25":{},"40":{},"43":{},"59":{},"61":{},"77":{},"79":{},"98":{},"101":{}},"component":{}}],["final",{"_index":240,"title":{},"name":{},"text":{"2":{},"3":{},"6":{},"7":{},"9":{},"17":{},"21":{},"22":{},"25":{},"26":{},"28":{},"36":{},"39":{},"40":{},"43":{},"44":{},"46":{},"54":{},"58":{},"59":{},"61":{},"62":{},"64":{},"73":{},"76":{},"77":{},"79":{},"80":{},"82":{},"91":{},"97":{},"98":{},"101":{},"102":{},"104":{},"112":{},"124":{}},"component":{}}],["find",{"_index":1756,"title":{},"name":{},"text":{"14":{},"17":{},"33":{},"36":{},"51":{},"54":{},"69":{},"73":{},"87":{},"91":{},"109":{},"112":{},"124":{},"125":{},"128":{},"131":{}},"component":{}}],["fine",{"_index":1091,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{},"115":{}},"component":{}}],["firefox",{"_index":2258,"title":{},"name":{},"text":{"70":{},"88":{},"94":{},"120":{},"127":{},"130":{}},"component":{}}],["firmwar",{"_index":2217,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["first",{"_index":65,"title":{},"name":{},"text":{"1":{},"3":{},"7":{},"8":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"20":{},"22":{},"26":{},"27":{},"30":{},"31":{},"32":{},"33":{},"36":{},"37":{},"38":{},"40":{},"44":{},"45":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"56":{},"57":{},"59":{},"62":{},"63":{},"66":{},"67":{},"68":{},"69":{},"70":{},"73":{},"74":{},"75":{},"77":{},"80":{},"81":{},"84":{},"85":{},"86":{},"87":{},"88":{},"91":{},"92":{},"93":{},"98":{},"102":{},"103":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"113":{},"114":{},"116":{},"117":{},"118":{},"119":{},"121":{},"122":{},"123":{},"124":{},"127":{},"128":{},"131":{},"134":{},"135":{}},"component":{}}],["fix",{"_index":991,"title":{},"name":{},"text":{"8":{},"12":{},"13":{},"27":{},"31":{},"32":{},"45":{},"49":{},"50":{},"63":{},"67":{},"68":{},"81":{},"85":{},"86":{},"103":{},"107":{},"108":{},"126":{},"134":{}},"component":{}}],["flag",{"_index":297,"title":{"11-13":{},"13-4":{},"30-13":{},"32-4":{},"48-13":{},"50-4":{},"66-13":{},"68-4":{},"84-13":{},"86-4":{},"106-13":{},"108-4":{}},"name":{},"text":{"3":{},"11":{},"12":{},"13":{},"17":{},"19":{},"22":{},"30":{},"31":{},"32":{},"36":{},"37":{},"40":{},"48":{},"49":{},"50":{},"54":{},"56":{},"59":{},"66":{},"67":{},"68":{},"73":{},"74":{},"77":{},"84":{},"85":{},"86":{},"91":{},"92":{},"98":{},"106":{},"107":{},"108":{},"112":{},"113":{},"126":{}},"component":{}}],["flat",{"_index":2845,"title":{},"name":{},"text":{"133":{}},"component":{}}],["flex",{"_index":672,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["flexibl",{"_index":2281,"title":{},"name":{},"text":{"95":{}},"component":{}}],["flightlessmango’",{"_index":2151,"title":{},"name":{},"text":{"18":{},"55":{},"96":{}},"component":{}}],["flip=tru",{"_index":1863,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["flow",{"_index":369,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"10":{},"22":{},"23":{},"24":{},"29":{},"40":{},"41":{},"42":{},"47":{},"59":{},"60":{},"65":{},"77":{},"78":{},"83":{},"98":{},"99":{},"100":{},"105":{}},"component":{}}],["flowchart",{"_index":1097,"title":{},"name":{},"text":{"10":{},"29":{},"47":{},"65":{},"83":{},"105":{}},"component":{}}],["focu",{"_index":535,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{},"120":{}},"component":{}}],["focus",{"_index":2738,"title":{},"name":{},"text":{"127":{},"135":{}},"component":{}}],["folder",{"_index":656,"title":{"15-3":{},"34-3":{},"52-3":{},"110-3":{},"124-2":{}},"name":{},"text":{"6":{},"15":{},"25":{},"34":{},"43":{},"52":{},"61":{},"70":{},"72":{},"79":{},"88":{},"90":{},"95":{},"101":{},"110":{},"116":{},"133":{},"134":{}},"component":{}}],["follow",{"_index":28,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"25":{},"26":{},"27":{},"28":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"43":{},"44":{},"45":{},"46":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"66":{},"67":{},"68":{},"69":{},"70":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"84":{},"85":{},"86":{},"87":{},"88":{},"92":{},"93":{},"95":{},"97":{},"98":{},"99":{},"101":{},"102":{},"103":{},"104":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"113":{},"114":{},"119":{},"124":{},"134":{},"136":{}},"component":{}}],["foolish",{"_index":5,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["forbidden",{"_index":1730,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["forc",{"_index":1813,"title":{"125-3":{}},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{},"125":{}},"component":{}}],["forego",{"_index":2891,"title":{},"name":{},"text":{"136":{}},"component":{}}],["forest",{"_index":269,"title":{"3-2":{},"22-2":{},"40-2":{},"59-2":{},"77-2":{},"98-2":{}},"name":{},"text":{},"component":{}}],["fork",{"_index":970,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["form",{"_index":494,"title":{},"name":{},"text":{"4":{},"12":{},"23":{},"31":{},"41":{},"49":{},"60":{},"67":{},"78":{},"85":{},"99":{},"107":{}},"component":{}}],["formal",{"_index":234,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"51":{},"58":{},"69":{},"76":{},"87":{},"97":{},"109":{}},"component":{}}],["format",{"_index":218,"title":{"8-2":{},"13-6":{},"27-2":{},"32-6":{},"45-2":{},"50-6":{},"63-2":{},"68-6":{},"81-2":{},"86-6":{},"103-2":{},"108-6":{},"124-2":{}},"name":{},"text":{"2":{},"4":{},"5":{},"7":{},"8":{},"11":{},"12":{},"13":{},"14":{},"16":{},"19":{},"21":{},"23":{},"24":{},"26":{},"27":{},"30":{},"31":{},"32":{},"33":{},"35":{},"37":{},"39":{},"41":{},"42":{},"44":{},"45":{},"48":{},"49":{},"50":{},"51":{},"53":{},"56":{},"58":{},"60":{},"62":{},"63":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"74":{},"76":{},"78":{},"80":{},"81":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"92":{},"95":{},"97":{},"99":{},"100":{},"102":{},"103":{},"106":{},"107":{},"108":{},"109":{},"111":{},"113":{},"124":{}},"component":{}}],["format=(string)adt",{"_index":1943,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["format=(string)nv12",{"_index":2212,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["format=(string)raw",{"_index":1926,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["format=i420",{"_index":1959,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["fortun",{"_index":302,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"77":{},"80":{},"98":{},"102":{}},"component":{}}],["forum",{"_index":2367,"title":{},"name":{},"text":{"95":{}},"component":{}}],["forward",{"_index":1424,"title":{"12-6":{},"13-5":{},"31-6":{},"32-5":{},"49-6":{},"50-5":{},"67-6":{},"68-5":{},"85-6":{},"86-5":{},"107-6":{},"108-5":{}},"name":{},"text":{},"component":{}}],["found",{"_index":2053,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"116":{},"119":{},"120":{},"131":{},"132":{}},"component":{}}],["foundat",{"_index":211,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"135":{}},"component":{}}],["four",{"_index":1481,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["fp",{"_index":2149,"title":{},"name":{},"text":{"18":{},"55":{},"96":{}},"component":{}}],["frame",{"_index":880,"title":{"134-1":{}},"name":{},"text":{"7":{},"12":{},"13":{},"26":{},"31":{},"32":{},"44":{},"49":{},"50":{},"62":{},"67":{},"68":{},"80":{},"85":{},"86":{},"102":{},"107":{},"108":{},"116":{}},"component":{}}],["frame_stat",{"_index":1013,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["framebuff",{"_index":577,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["framed=(boolean)tru",{"_index":1925,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["framerate=(fraction)60/1",{"_index":2211,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["framerate={fps}/1",{"_index":1866,"title":{},"name":{},"text":{"15":{},"16":{},"35":{},"52":{},"53":{},"70":{},"71":{},"88":{},"89":{},"110":{},"111":{}},"component":{}}],["framework",{"_index":253,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["free",{"_index":2467,"title":{},"name":{},"text":{"118":{},"133":{},"134":{}},"component":{}}],["freedom",{"_index":2420,"title":{},"name":{},"text":{"115":{}},"component":{}}],["frequenc",{"_index":1037,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["frequent",{"_index":2762,"title":{},"name":{},"text":{"128":{},"131":{},"133":{}},"component":{}}],["frontend",{"_index":2280,"title":{"95":{}},"name":{},"text":{"95":{},"127":{},"131":{}},"component":{}}],["frontend.org/commun",{"_index":2368,"title":{},"name":{},"text":{"95":{}},"component":{}}],["frontend.org/doc",{"_index":2364,"title":{},"name":{},"text":{"95":{}},"component":{}}],["frontend.org/docs/faq",{"_index":2366,"title":{},"name":{},"text":{"95":{}},"component":{}}],["frontend/them",{"_index":2360,"title":{},"name":{},"text":{"95":{}},"component":{}}],["full",{"_index":40,"title":{"134-5":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"11":{},"13":{},"15":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"30":{},"32":{},"34":{},"38":{},"39":{},"40":{},"42":{},"43":{},"44":{},"48":{},"50":{},"52":{},"57":{},"58":{},"59":{},"61":{},"62":{},"66":{},"68":{},"70":{},"75":{},"76":{},"77":{},"79":{},"80":{},"84":{},"86":{},"88":{},"93":{},"97":{},"98":{},"100":{},"101":{},"102":{},"106":{},"108":{},"110":{},"115":{},"120":{},"134":{}},"component":{}}],["fulli",{"_index":1852,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["fullscreen",{"_index":836,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"124":{},"134":{}},"component":{}}],["function",{"_index":133,"title":{},"name":{},"text":{"2":{},"4":{},"21":{},"23":{},"39":{},"41":{},"58":{},"60":{},"76":{},"78":{},"97":{},"99":{}},"component":{}}],["further",{"_index":2277,"title":{},"name":{},"text":{"94":{}},"component":{}}],["futur",{"_index":520,"title":{},"name":{},"text":{"4":{},"7":{},"23":{},"26":{},"41":{},"44":{},"60":{},"62":{},"78":{},"80":{},"99":{},"102":{},"119":{}},"component":{}}],["g",{"_index":806,"title":{},"name":{},"text":{"6":{},"11":{},"17":{},"25":{},"30":{},"36":{},"43":{},"48":{},"54":{},"61":{},"66":{},"73":{},"79":{},"84":{},"91":{},"101":{},"106":{},"112":{},"131":{}},"component":{}}],["galleri",{"_index":2358,"title":{},"name":{},"text":{"95":{}},"component":{}}],["game",{"_index":56,"title":{"121":{},"15-15":{},"18-1":{},"18-3":{},"18-4":{},"34-15":{},"52-15":{},"55-1":{},"55-3":{},"55-4":{},"96-1":{},"96-3":{},"96-4":{},"110-15":{},"133-3":{}},"name":{},"text":{"1":{},"2":{},"5":{},"11":{},"18":{},"20":{},"21":{},"24":{},"30":{},"34":{},"38":{},"39":{},"42":{},"48":{},"55":{},"57":{},"58":{},"66":{},"75":{},"76":{},"84":{},"93":{},"95":{},"96":{},"97":{},"100":{},"106":{},"115":{},"117":{},"120":{},"121":{},"122":{},"123":{},"124":{},"127":{},"130":{},"131":{},"133":{},"135":{},"136":{}},"component":{}}],["game_slug",{"_index":2619,"title":{},"name":{},"text":{"124":{}},"component":{}}],["gamedir",{"_index":2633,"title":{},"name":{},"text":{"124":{}},"component":{}}],["gameonwhales/lutri",{"_index":2553,"title":{},"name":{},"text":{"124":{}},"component":{}}],["gameonwhales/steam",{"_index":2830,"title":{},"name":{},"text":{"133":{}},"component":{}}],["gameonwhales/xorg:sha",{"_index":2482,"title":{},"name":{},"text":{"119":{}},"component":{}}],["gamepad",{"_index":62,"title":{"134-3":{}},"name":{},"text":{"1":{},"3":{},"5":{},"17":{},"20":{},"22":{},"24":{},"36":{},"38":{},"40":{},"42":{},"54":{},"57":{},"59":{},"73":{},"75":{},"77":{},"91":{},"93":{},"98":{},"100":{},"112":{},"115":{},"120":{},"129":{},"134":{},"135":{}},"component":{}}],["games:/var/lutris/:rw",{"_index":2586,"title":{},"name":{},"text":{"124":{}},"component":{}}],["gamescop",{"_index":584,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["gamestream",{"_index":2743,"title":{},"name":{},"text":{"127":{}},"component":{}}],["game’",{"_index":2155,"title":{},"name":{},"text":{"18":{},"55":{},"96":{}},"component":{}}],["gather",{"_index":2164,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["gcc",{"_index":662,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["gcm",{"_index":976,"title":{},"name":{},"text":{"8":{},"10":{},"27":{},"29":{},"45":{},"47":{},"63":{},"65":{},"81":{},"83":{},"103":{},"105":{}},"component":{}}],["geforc",{"_index":2168,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{},"126":{}},"component":{}}],["gener",{"_index":85,"title":{"3-4":{},"22-4":{},"40-4":{},"59-4":{},"77-4":{},"98-4":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"9":{},"11":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"28":{},"30":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"46":{},"48":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"64":{},"66":{},"70":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"82":{},"84":{},"88":{},"92":{},"93":{},"97":{},"98":{},"99":{},"100":{},"101":{},"104":{},"106":{},"113":{},"115":{},"119":{},"124":{},"125":{},"127":{}},"component":{}}],["get",{"_index":925,"title":{"95-2":{}},"name":{},"text":{"7":{},"18":{},"26":{},"44":{},"55":{},"62":{},"80":{},"95":{},"96":{},"102":{}},"component":{}}],["ghcr.io/gam",{"_index":1808,"title":{},"name":{},"text":{"15":{},"17":{},"34":{},"36":{},"52":{},"54":{},"70":{},"73":{},"88":{},"91":{},"95":{},"110":{},"112":{},"124":{}},"component":{}}],["gigant",{"_index":2731,"title":{},"name":{},"text":{"127":{}},"component":{}}],["git",{"_index":670,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"116":{},"122":{}},"component":{}}],["github",{"_index":2474,"title":{},"name":{},"text":{"119":{},"132":{},"133":{}},"component":{}}],["give",{"_index":154,"title":{},"name":{},"text":{"2":{},"17":{},"21":{},"36":{},"39":{},"54":{},"58":{},"73":{},"76":{},"91":{},"97":{},"112":{}},"component":{}}],["given",{"_index":94,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"7":{},"12":{},"20":{},"21":{},"22":{},"23":{},"26":{},"31":{},"38":{},"39":{},"40":{},"41":{},"44":{},"49":{},"57":{},"58":{},"59":{},"60":{},"62":{},"67":{},"75":{},"76":{},"77":{},"78":{},"80":{},"85":{},"93":{},"97":{},"98":{},"99":{},"102":{},"107":{},"115":{},"136":{}},"component":{}}],["glew1.10",{"_index":2625,"title":{},"name":{},"text":{"124":{}},"component":{}}],["global",{"_index":131,"title":{},"name":{},"text":{"2":{},"18":{},"21":{},"39":{},"55":{},"58":{},"76":{},"96":{},"97":{}},"component":{}}],["glue",{"_index":846,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["gnu",{"_index":750,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["gnu/pkgconfig",{"_index":757,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["gnutl",{"_index":2626,"title":{},"name":{},"text":{"124":{}},"component":{}}],["go",{"_index":772,"title":{},"name":{},"text":{"6":{},"7":{},"25":{},"26":{},"43":{},"44":{},"61":{},"62":{},"79":{},"80":{},"101":{},"102":{},"131":{},"136":{}},"component":{}}],["goal",{"_index":30,"title":{},"name":{},"text":{"1":{},"3":{},"20":{},"22":{},"38":{},"40":{},"57":{},"59":{},"75":{},"77":{},"93":{},"98":{},"125":{},"127":{},"135":{}},"component":{}}],["gobject",{"_index":542,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["gobject2",{"_index":695,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["goe",{"_index":461,"title":{},"name":{},"text":{"3":{},"14":{},"22":{},"33":{},"40":{},"51":{},"59":{},"69":{},"77":{},"87":{},"98":{},"109":{}},"component":{}}],["gogslug",{"_index":2620,"title":{},"name":{},"text":{"124":{}},"component":{}}],["good",{"_index":947,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"114":{},"123":{}},"component":{}}],["good:pulse=en",{"_index":735,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["good:soup=dis",{"_index":733,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["good:ximagesrc=en",{"_index":734,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["gow",{"_index":98,"title":{"120":{},"121":{},"131":{},"131-4":{}},"name":{"131":{}},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"44":{},"57":{},"62":{},"75":{},"80":{},"93":{},"102":{},"114":{},"115":{},"116":{},"119":{},"120":{},"122":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{}},"component":{"114":{},"115":{},"116":{},"117":{},"118":{},"119":{},"120":{},"121":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{}}}],["gow/bas",{"_index":2580,"title":{},"name":{},"text":{"124":{}},"component":{}}],["gow/lutri",{"_index":2582,"title":{},"name":{},"text":{"124":{}},"component":{}}],["gow/nvidia",{"_index":2004,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["gow_log",{"_index":2391,"title":{},"name":{},"text":{"114":{},"124":{}},"component":{}}],["gow_required_devices=/dev/input",{"_index":2145,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"96":{}},"component":{}}],["gow_required_devices=/dev/input/ev",{"_index":2335,"title":{},"name":{},"text":{"95":{}},"component":{}}],["gpart",{"_index":2521,"title":{},"name":{},"text":{"120":{}},"component":{}}],["gpu",{"_index":48,"title":{"126":{},"128":{},"15-12":{},"19-4":{},"34-12":{},"37-4":{},"52-12":{},"56-4":{},"70-8":{},"74-4":{},"88-8":{},"92-4":{},"110-12":{},"113-4":{},"115-4":{},"126-2":{},"126-4":{},"129-9":{},"131-2":{},"133-1":{}},"name":{"128":{}},"text":{"1":{},"7":{},"15":{},"17":{},"19":{},"20":{},"26":{},"34":{},"36":{},"37":{},"38":{},"44":{},"52":{},"54":{},"56":{},"57":{},"62":{},"70":{},"73":{},"74":{},"75":{},"80":{},"88":{},"91":{},"92":{},"93":{},"102":{},"110":{},"112":{},"113":{},"115":{},"119":{},"123":{},"126":{},"128":{},"129":{},"131":{},"132":{},"133":{}},"component":{}}],["gpu.conf",{"_index":2768,"title":{},"name":{},"text":{"128":{}},"component":{}}],["gpu.conf:/usr/share/x11/xorg.conf.d/01",{"_index":2776,"title":{},"name":{},"text":{"128":{}},"component":{}}],["gpu.conf:ro",{"_index":2777,"title":{},"name":{},"text":{"128":{}},"component":{}}],["gpu_uuid",{"_index":2703,"title":{},"name":{},"text":{"126":{}},"component":{}}],["gpus=al",{"_index":1997,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["grammar",{"_index":238,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"51":{},"58":{},"69":{},"76":{},"87":{},"97":{},"109":{}},"component":{}}],["graph",{"_index":480,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["graphic",{"_index":569,"title":{"123-5":{}},"name":{},"text":{"5":{},"7":{},"19":{},"24":{},"26":{},"37":{},"42":{},"44":{},"56":{},"62":{},"74":{},"80":{},"92":{},"100":{},"102":{},"113":{},"115":{},"120":{},"123":{},"127":{},"130":{}},"component":{}}],["grasp",{"_index":2401,"title":{},"name":{},"text":{"115":{}},"component":{}}],["grave",{"_index":1349,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["great",{"_index":142,"title":{},"name":{},"text":{"2":{},"4":{},"21":{},"23":{},"39":{},"41":{},"58":{},"60":{},"76":{},"78":{},"97":{},"99":{},"115":{},"118":{},"120":{},"130":{}},"component":{}}],["grep",{"_index":2017,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{},"124":{},"126":{},"133":{}},"component":{}}],["ground",{"_index":26,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["group",{"_index":406,"title":{},"name":{},"text":{"3":{},"5":{},"17":{},"22":{},"24":{},"36":{},"40":{},"42":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"100":{},"112":{}},"component":{}}],["group=\"input",{"_index":2107,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["group_kernel",{"_index":403,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["group_udev",{"_index":405,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["grub",{"_index":2022,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"91":{},"112":{},"113":{}},"component":{}}],["grub_cmdline_linux_default",{"_index":2025,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["grub_cmdline_linux_default=\"quiet",{"_index":2028,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"91":{},"112":{},"113":{}},"component":{}}],["gs",{"_index":1762,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["gst",{"_index":572,"title":{"6-4":{},"25-4":{},"43-4":{},"61-4":{},"79-4":{},"101-4":{}},"name":{},"text":{"5":{},"6":{},"16":{},"24":{},"25":{},"35":{},"42":{},"43":{},"53":{},"61":{},"71":{},"79":{},"89":{},"100":{},"101":{},"111":{}},"component":{}}],["gst_debug",{"_index":764,"title":{},"name":{},"text":{"6":{},"15":{},"25":{},"34":{},"43":{},"52":{},"61":{},"70":{},"79":{},"88":{},"101":{},"110":{}},"component":{}}],["gst_debug=4",{"_index":761,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["gstbasetransform",{"_index":532,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["gstbuffer",{"_index":504,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["gstbufferlist",{"_index":508,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_sess",{"_index":2202,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["gstreamer",{"_index":478,"title":{"4":{},"16":{},"23":{},"35":{},"41":{},"53":{},"60":{},"71":{},"78":{},"89":{},"99":{},"111":{},"6-3":{},"7-4":{},"15-11":{},"15-14":{},"25-3":{},"26-4":{},"34-11":{},"34-13":{},"43-3":{},"44-4":{},"52-11":{},"52-14":{},"61-3":{},"62-4":{},"70-7":{},"70-9":{},"79-3":{},"80-4":{},"88-7":{},"88-9":{},"101-3":{},"102-4":{},"110-11":{},"110-14":{}},"name":{"4":{},"16":{},"23":{},"35":{},"41":{},"53":{},"60":{},"71":{},"78":{},"89":{},"99":{},"111":{}},"text":{"4":{},"5":{},"6":{},"7":{},"15":{},"23":{},"24":{},"25":{},"26":{},"34":{},"41":{},"42":{},"43":{},"44":{},"52":{},"60":{},"61":{},"62":{},"70":{},"78":{},"79":{},"80":{},"88":{},"99":{},"100":{},"101":{},"102":{},"110":{}},"component":{}}],["gstreamer.freedesktop.org",{"_index":490,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["gstreamer.video.h264_encod",{"_index":2256,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["gstreamer.video.hevc_encod",{"_index":1855,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["gstreamer/issues/1167",{"_index":1869,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["gstrtpmoonlightpay_audio.cpp",{"_index":564,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["gstrtpmoonlightpay_audio.hpp",{"_index":563,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["gstrtpmoonlightpay_video.cpp",{"_index":560,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["gstrtpmoonlightpay_video.hpp",{"_index":559,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["gstvideoencoder.c:771:gst_video_encoder_setcap",{"_index":2206,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["gtx",{"_index":2169,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["guarante",{"_index":984,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["guc",{"_index":2222,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["guc/huc",{"_index":2224,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["gui",{"_index":622,"title":{"115-3":{}},"name":{},"text":{"5":{},"24":{},"42":{},"100":{},"115":{},"120":{},"127":{},"130":{},"135":{}},"component":{}}],["guid",{"_index":553,"title":{},"name":{},"text":{"4":{},"17":{},"23":{},"36":{},"41":{},"54":{},"60":{},"72":{},"73":{},"78":{},"90":{},"91":{},"99":{},"112":{},"117":{},"125":{},"132":{}},"component":{}}],["guy",{"_index":112,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["gyro",{"_index":1042,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"45":{},"48":{},"63":{},"66":{},"81":{},"84":{},"103":{},"106":{}},"component":{}}],["gyro/acceler",{"_index":609,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["gyroscop",{"_index":1046,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["h",{"_index":1241,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"131":{},"133":{}},"component":{}}],["h.264",{"_index":517,"title":{"13-6":{},"32-6":{},"50-6":{},"68-6":{},"86-6":{},"108-6":{}},"name":{},"text":{"4":{},"10":{},"13":{},"23":{},"29":{},"32":{},"41":{},"47":{},"50":{},"60":{},"65":{},"68":{},"70":{},"78":{},"83":{},"86":{},"88":{},"99":{},"105":{},"108":{}},"component":{}}],["hackabl",{"_index":72,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["hadolint",{"_index":2644,"title":{},"name":{},"text":{"124":{}},"component":{}}],["handl",{"_index":482,"title":{},"name":{},"text":{"4":{},"5":{},"7":{},"23":{},"24":{},"26":{},"41":{},"42":{},"44":{},"60":{},"62":{},"78":{},"80":{},"99":{},"100":{},"102":{},"120":{},"125":{},"126":{},"131":{},"134":{},"135":{}},"component":{}}],["hangeul",{"_index":1190,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["hanja",{"_index":1192,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["happen",{"_index":363,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"120":{},"124":{},"128":{},"134":{}},"component":{}}],["happi",{"_index":2785,"title":{},"name":{},"text":{"129":{}},"component":{}}],["haptic",{"_index":1150,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["hard",{"_index":2778,"title":{},"name":{},"text":{"129":{}},"component":{}}],["hardcod",{"_index":1458,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["hardwar",{"_index":35,"title":{},"name":{},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"44":{},"57":{},"62":{},"75":{},"80":{},"93":{},"102":{},"115":{},"127":{},"130":{},"131":{},"132":{},"135":{}},"component":{}}],["hash",{"_index":1070,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["hasn’t",{"_index":2074,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["hat",{"_index":2196,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["have",{"_index":150,"title":{},"name":{},"text":{"2":{},"5":{},"7":{},"21":{},"24":{},"26":{},"39":{},"42":{},"44":{},"58":{},"62":{},"76":{},"80":{},"97":{},"100":{},"102":{},"115":{},"122":{},"125":{},"129":{},"131":{},"134":{},"136":{}},"component":{}}],["haven’t",{"_index":816,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["hdmi",{"_index":2656,"title":{},"name":{},"text":{"125":{}},"component":{}}],["hdr_mode",{"_index":1023,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["head",{"_index":2476,"title":{},"name":{},"text":{"119":{},"127":{}},"component":{}}],["headach",{"_index":2887,"title":{},"name":{},"text":{"136":{}},"component":{}}],["header",{"_index":223,"title":{"13-7":{},"32-7":{},"50-7":{},"68-7":{},"86-7":{},"108-7":{}},"name":{},"text":{"2":{},"4":{},"11":{},"12":{},"13":{},"21":{},"23":{},"30":{},"31":{},"32":{},"39":{},"41":{},"48":{},"49":{},"50":{},"58":{},"60":{},"66":{},"67":{},"68":{},"76":{},"78":{},"84":{},"85":{},"86":{},"97":{},"99":{},"106":{},"107":{},"108":{}},"component":{}}],["headless",{"_index":580,"title":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"135-3":{}},"name":{},"text":{"5":{},"18":{},"24":{},"42":{},"55":{},"96":{},"100":{},"115":{},"116":{},"125":{},"127":{},"129":{},"131":{},"132":{},"134":{},"135":{}},"component":{}}],["heart",{"_index":2406,"title":{},"name":{},"text":{"115":{}},"component":{}}],["height",{"_index":1159,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["height=(int)360",{"_index":1949,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["height=(int)720",{"_index":2210,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["height={height",{"_index":1958,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["helm",{"_index":2539,"title":{},"name":{},"text":{"123":{}},"component":{}}],["help",{"_index":93,"title":{"118":{}},"name":{},"text":{"1":{},"3":{},"6":{},"11":{},"19":{},"20":{},"22":{},"25":{},"30":{},"37":{},"38":{},"40":{},"43":{},"48":{},"56":{},"57":{},"59":{},"61":{},"66":{},"74":{},"75":{},"77":{},"79":{},"84":{},"92":{},"93":{},"98":{},"101":{},"106":{},"113":{},"118":{},"129":{},"131":{},"132":{},"134":{},"135":{}},"component":{}}],["here",{"_index":208,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"9":{},"10":{},"13":{},"15":{},"16":{},"19":{},"21":{},"22":{},"24":{},"28":{},"29":{},"32":{},"34":{},"35":{},"37":{},"39":{},"40":{},"42":{},"46":{},"47":{},"50":{},"52":{},"53":{},"56":{},"58":{},"59":{},"64":{},"65":{},"68":{},"70":{},"71":{},"76":{},"77":{},"82":{},"83":{},"86":{},"88":{},"89":{},"97":{},"98":{},"100":{},"104":{},"105":{},"108":{},"110":{},"111":{},"113":{},"114":{},"120":{},"125":{},"129":{},"131":{},"133":{},"136":{}},"component":{}}],["here’",{"_index":549,"title":{},"name":{},"text":{"4":{},"7":{},"19":{},"23":{},"26":{},"37":{},"41":{},"44":{},"56":{},"60":{},"62":{},"74":{},"78":{},"80":{},"92":{},"95":{},"99":{},"102":{},"113":{},"114":{},"119":{},"127":{},"130":{},"134":{}},"component":{}}],["hevc",{"_index":518,"title":{},"name":{},"text":{"4":{},"10":{},"23":{},"29":{},"41":{},"47":{},"60":{},"65":{},"70":{},"78":{},"83":{},"88":{},"99":{},"105":{}},"component":{}}],["hex",{"_index":1391,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["hexadecim",{"_index":2673,"title":{},"name":{},"text":{"125":{}},"component":{}}],["high",{"_index":171,"title":{},"name":{},"text":{"2":{},"7":{},"10":{},"21":{},"26":{},"29":{},"39":{},"44":{},"47":{},"58":{},"62":{},"65":{},"72":{},"76":{},"80":{},"83":{},"90":{},"97":{},"102":{},"105":{},"115":{}},"component":{}}],["highli",{"_index":144,"title":{},"name":{},"text":{"2":{},"3":{},"21":{},"22":{},"39":{},"40":{},"58":{},"59":{},"76":{},"77":{},"97":{},"98":{},"115":{},"133":{}},"component":{}}],["hint",{"_index":2842,"title":{},"name":{},"text":{"133":{}},"component":{}}],["histor",{"_index":2525,"title":{},"name":{},"text":{"121":{},"127":{},"131":{}},"component":{}}],["hlsdemux",{"_index":1938,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["hold",{"_index":1822,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["home",{"_index":1204,"title":{"15-3":{},"34-3":{},"52-3":{},"110-3":{}},"name":{},"text":{"11":{},"15":{},"30":{},"34":{},"48":{},"52":{},"66":{},"84":{},"106":{},"110":{},"123":{},"124":{}},"component":{}}],["home/.config",{"_index":2442,"title":{},"name":{},"text":{"116":{}},"component":{}}],["home/.config/gow/run",{"_index":2823,"title":{},"name":{},"text":{"131":{}},"component":{}}],["home/.config/gow/user.env",{"_index":2441,"title":{},"name":{},"text":{"116":{}},"component":{}}],["home/gst",{"_index":768,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["home/gstreamer/includ",{"_index":710,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["home/gstreamer/usr/local/includ",{"_index":711,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["home/hobbyist",{"_index":2886,"title":{},"name":{},"text":{"136":{}},"component":{}}],["home/retro",{"_index":1834,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"110":{}},"component":{}}],["home/retro/sunshin",{"_index":2850,"title":{"134-2":{}},"name":{},"text":{},"component":{}}],["honor",{"_index":1777,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["hood",{"_index":2269,"title":{},"name":{},"text":{"72":{},"90":{}},"component":{}}],["hook",{"_index":820,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["hopefulli",{"_index":951,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["horizont",{"_index":1112,"title":{"11-6":{},"30-6":{},"48-6":{},"66-6":{},"84-6":{},"106-6":{}},"name":{},"text":{},"component":{}}],["host",{"_index":34,"title":{"3-3":{},"22-3":{},"40-3":{},"59-3":{},"77-3":{},"98-3":{},"115-1":{},"135-2":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"15":{},"17":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"34":{},"36":{},"38":{},"39":{},"40":{},"42":{},"43":{},"44":{},"52":{},"54":{},"57":{},"58":{},"59":{},"61":{},"62":{},"70":{},"72":{},"73":{},"75":{},"76":{},"77":{},"79":{},"80":{},"88":{},"90":{},"91":{},"93":{},"95":{},"97":{},"98":{},"100":{},"101":{},"102":{},"110":{},"112":{},"115":{},"116":{},"117":{},"120":{},"121":{},"124":{},"126":{},"127":{},"128":{},"129":{},"131":{},"132":{},"133":{},"135":{}},"component":{}}],["host_apps_state_fold",{"_index":1786,"title":{"15-4":{},"34-4":{},"52-4":{},"110-4":{}},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["host_apps_state_folder/fak",{"_index":1828,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["host_apps_state_folder=/etc/wolf",{"_index":1972,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["host_apps_state_folder}/${app_state_folder}/${app_titl",{"_index":1833,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"110":{}},"component":{}}],["hostconfig",{"_index":2250,"title":{},"name":{},"text":{"70":{},"88":{},"95":{},"124":{}},"component":{}}],["hostnam",{"_index":2229,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["host’",{"_index":2807,"title":{},"name":{},"text":{"131":{}},"component":{}}],["hotplug",{"_index":207,"title":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"5-4":{},"24-4":{},"42-4":{},"100-4":{}},"name":{},"text":{"2":{},"3":{},"5":{},"21":{},"22":{},"24":{},"39":{},"40":{},"42":{},"58":{},"59":{},"76":{},"77":{},"97":{},"98":{},"100":{}},"component":{}}],["http",{"_index":812,"title":{"9-6":{},"28-6":{},"46-6":{},"64-6":{},"82-6":{},"104-6":{}},"name":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"text":{"6":{},"8":{},"9":{},"10":{},"12":{},"14":{},"17":{},"19":{},"25":{},"27":{},"28":{},"29":{},"31":{},"33":{},"36":{},"37":{},"43":{},"45":{},"46":{},"47":{},"49":{},"51":{},"54":{},"56":{},"61":{},"63":{},"64":{},"65":{},"67":{},"69":{},"73":{},"74":{},"79":{},"81":{},"82":{},"83":{},"85":{},"87":{},"91":{},"92":{},"101":{},"103":{},"104":{},"105":{},"107":{},"109":{},"112":{},"113":{}},"component":{}}],["http/",{"_index":215,"title":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"name":{},"text":{"2":{},"10":{},"21":{},"29":{},"39":{},"47":{},"58":{},"65":{},"76":{},"83":{},"97":{},"105":{}},"component":{}}],["http://localhost:47989/pin/#337327e8a6fc0c66",{"_index":2089,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["https://:47990",{"_index":2453,"title":{},"name":{},"text":{"117":{},"123":{}},"component":{}}],["https://angelnu.github.io/helm",{"_index":2541,"title":{},"name":{},"text":{"123":{}},"component":{}}],["https://cemu.cfw.guid",{"_index":2349,"title":{},"name":{},"text":{"95":{}},"component":{}}],["https://docs.libretro.com",{"_index":2341,"title":{},"name":{},"text":{"95":{}},"component":{}}],["https://docs.nvidia.com/cuda/cuda",{"_index":2048,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["https://dolphin",{"_index":2351,"title":{},"name":{},"text":{"95":{}},"component":{}}],["https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight",{"_index":1942,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["https://en.wikipedia.org/wiki/wayland_(protocol)#rendering_model",{"_index":853,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["https://gist.github.com/jsturgis/3b19447b304616f18657",{"_index":1917,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["https://github.com/cfsworks/nvml_fix",{"_index":2711,"title":{},"name":{},"text":{"126":{}},"component":{}}],["https://github.com/gam",{"_index":766,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"122":{}},"component":{}}],["https://github.com/supertux/supertux/releases/download/v0.6.3/supertux",{"_index":2628,"title":{},"name":{},"text":{"124":{}},"component":{}}],["https://gitlab.freedesktop.org/gstreamer/gstreamer.git",{"_index":705,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["https://insujang.github.io/2018",{"_index":397,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["https://pcsx2.net/doc",{"_index":2343,"title":{},"name":{},"text":{"95":{}},"component":{}}],["https://pegasu",{"_index":2363,"title":{},"name":{},"text":{"95":{}},"component":{}}],["https://raw.githubusercontent.com/gam",{"_index":2001,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["https://rpcs3.net/quickstart",{"_index":2347,"title":{},"name":{},"text":{"95":{}},"component":{}}],["https://steamdb.info",{"_index":2147,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"96":{}},"component":{}}],["https://storage.googleapis.com/gtv",{"_index":1874,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["https://www.bensound.com/fre",{"_index":1892,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["https://www.twitch.tv/videos/560738950",{"_index":1935,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["https://xemu.app/doc",{"_index":2345,"title":{},"name":{},"text":{"95":{}},"component":{}}],["hub",{"_index":2479,"title":{},"name":{},"text":{"119":{}},"component":{}}],["huge",{"_index":459,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["human",{"_index":828,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"133":{}},"component":{}}],["humblestoreid",{"_index":2621,"title":{},"name":{},"text":{"124":{}},"component":{}}],["hw",{"_index":586,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"70":{},"88":{},"100":{},"123":{},"135":{}},"component":{}}],["i$home/gst",{"_index":779,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["i$home/gstreamer/usr/local/includ",{"_index":755,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["i915",{"_index":2774,"title":{},"name":{},"text":{"128":{}},"component":{}}],["i915.enable_guc=2",{"_index":2218,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["i915.force_prob",{"_index":2220,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["icon",{"_index":2852,"title":{"134-4":{}},"name":{},"text":{},"component":{}}],["id",{"_index":2120,"title":{},"name":{},"text":{"17":{},"18":{},"19":{},"34":{},"36":{},"37":{},"54":{},"55":{},"56":{},"73":{},"74":{},"91":{},"92":{},"96":{},"112":{},"113":{}},"component":{}}],["id_bus=usb",{"_index":336,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_model=wireless_control",{"_index":337,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_revision=0100",{"_index":342,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_serial=sony_interactive_entertainment_wireless_control",{"_index":338,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_type=hid",{"_index":343,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_usb_driver=usbhid",{"_index":347,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_usb_revision=0100",{"_index":345,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_usb_type=hid",{"_index":346,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_usb_vendor_id=054c",{"_index":344,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_vendor=sony_interactive_entertain",{"_index":339,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_vendor_enc=sony\\x20interactive\\x20entertain",{"_index":340,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["id_vendor_id=054c",{"_index":341,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["idea",{"_index":838,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"136":{}},"component":{}}],["ideal",{"_index":832,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"70":{},"80":{},"88":{},"102":{}},"component":{}}],["identifi",{"_index":1476,"title":{},"name":{},"text":{"13":{},"14":{},"15":{},"32":{},"33":{},"34":{},"50":{},"51":{},"52":{},"68":{},"69":{},"86":{},"87":{},"108":{},"109":{},"110":{},"125":{},"128":{}},"component":{}}],["idr",{"_index":1451,"title":{"13-11":{},"32-11":{},"50-11":{},"68-11":{},"86-11":{},"108-11":{}},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["idr_fram",{"_index":1021,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["ignor",{"_index":2126,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["ignore=dl3006",{"_index":2645,"title":{},"name":{},"text":{"124":{}},"component":{}}],["igpu",{"_index":54,"title":{},"name":{},"text":{"1":{},"15":{},"20":{},"38":{},"52":{},"57":{},"70":{},"75":{},"88":{},"93":{},"110":{},"128":{},"131":{}},"component":{}}],["imag",{"_index":899,"title":{"119-2":{},"119-3":{},"119-4":{},"124-3":{},"124-4":{},"124-5":{},"124-6":{},"124-8":{},"124-12":{},"124-19":{}},"name":{},"text":{"7":{},"13":{},"15":{},"17":{},"18":{},"19":{},"26":{},"32":{},"34":{},"36":{},"37":{},"44":{},"50":{},"52":{},"54":{},"55":{},"56":{},"62":{},"68":{},"70":{},"72":{},"73":{},"74":{},"80":{},"86":{},"88":{},"90":{},"91":{},"92":{},"95":{},"96":{},"102":{},"108":{},"110":{},"112":{},"113":{},"114":{},"115":{},"119":{},"120":{},"121":{},"124":{},"125":{},"132":{},"133":{}},"component":{}}],["image_sourc",{"_index":2604,"title":{},"name":{},"text":{"124":{}},"component":{}}],["images/bas",{"_index":2490,"title":{},"name":{},"text":{"119":{},"124":{}},"component":{}}],["images/lutri",{"_index":2584,"title":{},"name":{},"text":{"124":{}},"component":{}}],["images/myapp",{"_index":2383,"title":{},"name":{},"text":{"114":{}},"component":{}}],["images/retroarch",{"_index":2382,"title":{},"name":{},"text":{"114":{}},"component":{}}],["image’",{"_index":2596,"title":{},"name":{},"text":{"124":{}},"component":{}}],["immut",{"_index":137,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["imperson",{"_index":412,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["implement",{"_index":162,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"7":{},"14":{},"21":{},"23":{},"24":{},"26":{},"33":{},"39":{},"41":{},"42":{},"44":{},"51":{},"58":{},"60":{},"62":{},"69":{},"76":{},"78":{},"80":{},"87":{},"97":{},"99":{},"100":{},"102":{},"109":{},"126":{},"127":{}},"component":{}}],["implicit",{"_index":934,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["import",{"_index":1853,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["imposs",{"_index":935,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"135":{}},"component":{}}],["improv",{"_index":2795,"title":{},"name":{},"text":{"130":{}},"component":{}}],["inc",{"_index":2197,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["incl",{"_index":2827,"title":{},"name":{},"text":{"132":{}},"component":{}}],["includ",{"_index":509,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"18":{},"23":{},"25":{},"26":{},"41":{},"43":{},"44":{},"55":{},"60":{},"61":{},"62":{},"78":{},"79":{},"80":{},"96":{},"99":{},"101":{},"102":{},"114":{},"127":{},"130":{},"131":{}},"component":{}}],["incompat",{"_index":945,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["increas",{"_index":998,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{},"120":{}},"component":{}}],["incred",{"_index":92,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["independ",{"_index":568,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["index",{"_index":2,"title":{},"name":{"1":{},"10":{},"20":{},"29":{},"38":{},"47":{},"57":{},"65":{},"75":{},"83":{},"93":{},"94":{},"105":{},"121":{}},"text":{"126":{}},"component":{}}],["indic",{"_index":1033,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"27":{},"30":{},"32":{},"45":{},"48":{},"50":{},"63":{},"66":{},"68":{},"81":{},"84":{},"86":{},"103":{},"106":{},"108":{},"126":{}},"component":{}}],["individu",{"_index":2404,"title":{},"name":{},"text":{"115":{},"124":{}},"component":{}}],["ineffici",{"_index":866,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["inexpens",{"_index":2659,"title":{},"name":{},"text":{"125":{}},"component":{}}],["info",{"_index":808,"title":{},"name":{},"text":{"6":{},"15":{},"16":{},"17":{},"19":{},"25":{},"34":{},"35":{},"36":{},"37":{},"43":{},"52":{},"53":{},"54":{},"56":{},"61":{},"70":{},"71":{},"73":{},"74":{},"79":{},"88":{},"89":{},"91":{},"92":{},"101":{},"110":{},"111":{},"112":{},"113":{},"126":{},"133":{},"134":{}},"component":{}}],["inform",{"_index":515,"title":{},"name":{},"text":{"4":{},"10":{},"12":{},"13":{},"14":{},"19":{},"23":{},"29":{},"31":{},"32":{},"33":{},"37":{},"41":{},"47":{},"49":{},"50":{},"51":{},"56":{},"60":{},"65":{},"67":{},"68":{},"69":{},"74":{},"78":{},"83":{},"85":{},"86":{},"87":{},"92":{},"95":{},"99":{},"105":{},"107":{},"108":{},"109":{},"113":{},"126":{},"131":{},"133":{}},"component":{}}],["infrastructur",{"_index":2749,"title":{},"name":{},"text":{"127":{}},"component":{}}],["initi",{"_index":2047,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["initialis",{"_index":2043,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"70":{},"73":{},"88":{},"91":{},"112":{}},"component":{}}],["initramf",{"_index":2221,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["inotifi",{"_index":471,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["input",{"_index":138,"title":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"5-3":{},"24-3":{},"42-3":{},"100-3":{}},"name":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"text":{"2":{},"3":{},"4":{},"5":{},"10":{},"11":{},"17":{},"21":{},"22":{},"23":{},"24":{},"29":{},"30":{},"36":{},"39":{},"40":{},"41":{},"42":{},"47":{},"48":{},"54":{},"58":{},"59":{},"60":{},"65":{},"66":{},"72":{},"73":{},"76":{},"77":{},"78":{},"83":{},"84":{},"90":{},"91":{},"97":{},"98":{},"99":{},"100":{},"105":{},"106":{},"112":{},"115":{},"120":{},"129":{},"134":{}},"component":{}}],["input.hpp",{"_index":184,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["input_data",{"_index":1015,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"45":{},"48":{},"63":{},"66":{},"81":{},"84":{},"103":{},"106":{}},"component":{}}],["inputs.rul",{"_index":2102,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["inputtino",{"_index":590,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["insecur",{"_index":1054,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["insert",{"_index":1061,"title":{},"name":{},"text":{"9":{},"11":{},"28":{},"30":{},"46":{},"48":{},"64":{},"66":{},"82":{},"84":{},"104":{},"106":{}},"component":{}}],["insertion/delet",{"_index":384,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["insid",{"_index":281,"title":{},"name":{},"text":{"3":{},"5":{},"22":{},"24":{},"40":{},"42":{},"59":{},"77":{},"98":{},"100":{},"114":{},"116":{},"120":{},"126":{},"134":{},"135":{}},"component":{}}],["inspect",{"_index":762,"title":{},"name":{},"text":{"6":{},"16":{},"25":{},"35":{},"43":{},"53":{},"61":{},"71":{},"79":{},"89":{},"101":{},"111":{}},"component":{}}],["instal",{"_index":440,"title":{"122":{},"6-1":{},"6-5":{},"25-1":{},"25-5":{},"43-1":{},"43-5":{},"61-1":{},"61-5":{},"79-1":{},"79-5":{},"101-1":{},"101-5":{},"124-14":{}},"name":{"122":{}},"text":{"3":{},"5":{},"6":{},"16":{},"17":{},"18":{},"19":{},"22":{},"24":{},"25":{},"35":{},"36":{},"37":{},"40":{},"42":{},"43":{},"53":{},"54":{},"55":{},"56":{},"59":{},"61":{},"70":{},"71":{},"72":{},"73":{},"74":{},"77":{},"79":{},"88":{},"89":{},"90":{},"91":{},"92":{},"95":{},"96":{},"98":{},"100":{},"101":{},"111":{},"112":{},"113":{},"114":{},"115":{},"122":{},"123":{},"124":{},"127":{},"129":{},"132":{},"133":{},"135":{},"136":{}},"component":{}}],["installation/error.log",{"_index":2840,"title":{},"name":{},"text":{"133":{}},"component":{}}],["installer_slug",{"_index":2622,"title":{},"name":{},"text":{"124":{}},"component":{}}],["instanc",{"_index":2188,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{},"123":{},"124":{},"135":{}},"component":{}}],["instead",{"_index":411,"title":{},"name":{},"text":{"3":{},"7":{},"11":{},"17":{},"22":{},"26":{},"30":{},"36":{},"40":{},"44":{},"48":{},"54":{},"59":{},"62":{},"66":{},"73":{},"77":{},"80":{},"84":{},"91":{},"98":{},"102":{},"106":{},"112":{},"115":{},"116":{},"119":{},"124":{},"134":{}},"component":{}}],["instruct",{"_index":652,"title":{"123-1":{}},"name":{},"text":{"6":{},"17":{},"19":{},"25":{},"36":{},"37":{},"43":{},"54":{},"56":{},"61":{},"74":{},"79":{},"92":{},"101":{},"112":{},"113":{},"115":{},"123":{},"124":{},"129":{}},"component":{}}],["int",{"_index":990,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["integr",{"_index":2259,"title":{},"name":{},"text":{"70":{},"88":{},"133":{}},"component":{}}],["intel",{"_index":1854,"title":{"19-5":{},"37-5":{},"56-5":{},"113-5":{}},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{},"128":{},"131":{}},"component":{}}],["intel/amd",{"_index":1966,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["intellig",{"_index":3,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["intend",{"_index":2532,"title":{},"name":{},"text":{"123":{}},"component":{}}],["interact",{"_index":2285,"title":{},"name":{},"text":{"95":{}},"component":{}}],["interest",{"_index":2760,"title":{},"name":{},"text":{"127":{}},"component":{}}],["interfac",{"_index":183,"title":{"16-1":{},"35-1":{},"53-1":{},"71-1":{},"89-1":{},"111-1":{}},"name":{},"text":{"2":{},"7":{},"21":{},"26":{},"39":{},"44":{},"58":{},"62":{},"76":{},"80":{},"95":{},"97":{},"102":{},"117":{},"123":{}},"component":{}}],["interfer",{"_index":618,"title":{},"name":{},"text":{"5":{},"6":{},"24":{},"25":{},"42":{},"43":{},"61":{},"79":{},"100":{},"101":{}},"component":{}}],["intermedi",{"_index":882,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["intern",{"_index":272,"title":{"3-5":{},"22-5":{},"40-5":{},"59-5":{},"77-5":{},"98-5":{},"124-1":{}},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["internet",{"_index":2473,"title":{},"name":{},"text":{"119":{}},"component":{}}],["interrog",{"_index":180,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["interrupt",{"_index":2191,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["introduct",{"_index":961,"title":{"95-1":{}},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"95":{},"102":{}},"component":{}}],["invalid",{"_index":881,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["invalidate_ref_fram",{"_index":1009,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["investig",{"_index":2273,"title":{},"name":{},"text":{"73":{},"91":{},"136":{}},"component":{}}],["involv",{"_index":1055,"title":{},"name":{},"text":{"9":{},"10":{},"28":{},"29":{},"46":{},"47":{},"64":{},"65":{},"82":{},"83":{},"104":{},"105":{},"136":{}},"component":{}}],["ioctl",{"_index":389,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["ip",{"_index":1774,"title":{},"name":{},"text":{"14":{},"17":{},"33":{},"36":{},"51":{},"54":{},"69":{},"73":{},"87":{},"91":{},"109":{},"112":{},"117":{},"123":{}},"component":{}}],["ipc",{"_index":394,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["ipcmod",{"_index":2251,"title":{},"name":{},"text":{"70":{},"88":{},"95":{},"124":{}},"component":{}}],["ipv4",{"_index":972,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["ipv6",{"_index":973,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["isn’t",{"_index":2450,"title":{},"name":{},"text":{"117":{},"136":{}},"component":{}}],["isol",{"_index":163,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"15":{},"21":{},"22":{},"24":{},"26":{},"39":{},"40":{},"42":{},"44":{},"52":{},"58":{},"59":{},"62":{},"72":{},"76":{},"77":{},"80":{},"90":{},"97":{},"98":{},"100":{},"102":{},"110":{},"115":{}},"component":{}}],["issu",{"_index":315,"title":{},"name":{},"text":{"3":{},"6":{},"7":{},"19":{},"22":{},"25":{},"26":{},"37":{},"40":{},"43":{},"44":{},"56":{},"59":{},"61":{},"62":{},"74":{},"77":{},"79":{},"80":{},"92":{},"95":{},"98":{},"101":{},"102":{},"113":{},"118":{},"125":{},"126":{},"129":{},"133":{},"134":{}},"component":{}}],["itself",{"_index":2747,"title":{},"name":{},"text":{"127":{}},"component":{}}],["it’",{"_index":24,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"12":{},"13":{},"14":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"26":{},"31":{},"32":{},"33":{},"36":{},"37":{},"38":{},"40":{},"41":{},"42":{},"44":{},"49":{},"50":{},"51":{},"54":{},"55":{},"56":{},"57":{},"59":{},"60":{},"62":{},"67":{},"68":{},"69":{},"70":{},"73":{},"74":{},"75":{},"77":{},"78":{},"80":{},"85":{},"86":{},"87":{},"88":{},"91":{},"92":{},"93":{},"96":{},"98":{},"99":{},"100":{},"102":{},"107":{},"108":{},"109":{},"112":{},"113":{},"114":{},"115":{},"116":{},"119":{},"120":{},"125":{},"126":{},"128":{},"129":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{}},"component":{}}],["it’ll",{"_index":365,"title":{},"name":{},"text":{"3":{},"5":{},"11":{},"17":{},"19":{},"22":{},"24":{},"30":{},"36":{},"37":{},"40":{},"42":{},"48":{},"54":{},"56":{},"59":{},"66":{},"70":{},"73":{},"74":{},"77":{},"84":{},"88":{},"91":{},"92":{},"98":{},"100":{},"106":{},"112":{},"113":{}},"component":{}}],["iv",{"_index":1000,"title":{},"name":{},"text":{"8":{},"12":{},"27":{},"31":{},"45":{},"49":{},"63":{},"67":{},"81":{},"85":{},"103":{},"107":{}},"component":{}}],["i’m",{"_index":2867,"title":{},"name":{},"text":{"134":{}},"component":{}}],["j",{"_index":1244,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["jan",{"_index":2098,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["job",{"_index":51,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"70":{},"75":{},"88":{},"93":{}},"component":{}}],["john",{"_index":462,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["johncmcdonough/virtu",{"_index":467,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["join",{"_index":2468,"title":{},"name":{},"text":{"118":{}},"component":{}}],["journey",{"_index":2469,"title":{},"name":{},"text":{"118":{}},"component":{}}],["joypad",{"_index":188,"title":{"15-7":{},"34-7":{},"52-7":{},"110-7":{}},"name":{},"text":{"2":{},"3":{},"11":{},"17":{},"21":{},"22":{},"30":{},"36":{},"39":{},"40":{},"48":{},"54":{},"58":{},"59":{},"66":{},"72":{},"73":{},"76":{},"77":{},"84":{},"90":{},"91":{},"97":{},"98":{},"106":{},"112":{},"123":{}},"component":{}}],["json",{"_index":179,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"70":{},"76":{},"88":{},"97":{}},"component":{}}],["jul",{"_index":2533,"title":{},"name":{},"text":{"123":{},"129":{}},"component":{}}],["jun",{"_index":2723,"title":{},"name":{},"text":{"126":{}},"component":{}}],["k",{"_index":1246,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["katakana",{"_index":1194,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["katakanahiragana",{"_index":1188,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["keep",{"_index":110,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"17":{},"20":{},"21":{},"22":{},"24":{},"25":{},"36":{},"38":{},"39":{},"40":{},"42":{},"43":{},"54":{},"57":{},"59":{},"61":{},"73":{},"75":{},"77":{},"79":{},"91":{},"93":{},"97":{},"98":{},"100":{},"101":{},"112":{}},"component":{}}],["kernel",{"_index":381,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"112":{},"115":{},"123":{},"129":{},"136":{}},"component":{}}],["kernel==\"uhid",{"_index":2109,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["kernel==\"uinput",{"_index":2104,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["key",{"_index":979,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"11":{},"12":{},"14":{},"27":{},"28":{},"29":{},"30":{},"31":{},"33":{},"45":{},"46":{},"47":{},"48":{},"49":{},"51":{},"63":{},"64":{},"65":{},"66":{},"67":{},"69":{},"81":{},"82":{},"83":{},"84":{},"85":{},"87":{},"103":{},"104":{},"105":{},"106":{},"107":{},"109":{}},"component":{}}],["key.pem",{"_index":1800,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["key_down",{"_index":1130,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["key_up",{"_index":1132,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["keyboard",{"_index":187,"title":{"11-4":{},"30-4":{},"48-4":{},"66-4":{},"84-4":{},"106-4":{},"134-3":{}},"name":{},"text":{"2":{},"5":{},"11":{},"17":{},"21":{},"24":{},"30":{},"36":{},"39":{},"42":{},"48":{},"54":{},"58":{},"66":{},"72":{},"73":{},"76":{},"84":{},"90":{},"91":{},"97":{},"100":{},"106":{},"112":{},"115":{},"120":{},"134":{},"135":{}},"component":{}}],["kick",{"_index":2163,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["kind",{"_index":323,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"77":{},"80":{},"98":{},"102":{}},"component":{}}],["kmod",{"_index":2044,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"126":{}},"component":{}}],["know",{"_index":860,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"70":{},"80":{},"88":{},"102":{},"118":{},"119":{},"122":{},"125":{}},"component":{}}],["knowledg",{"_index":2465,"title":{},"name":{},"text":{"118":{}},"component":{}}],["kubernet",{"_index":2529,"title":{"123-1":{},"123-3":{}},"name":{"123":{}},"text":{"123":{}},"component":{}}],["l",{"_index":1248,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"48":{},"54":{},"66":{},"70":{},"73":{},"84":{},"88":{},"91":{},"106":{},"112":{}},"component":{}}],["l$home/gst",{"_index":778,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["l$home/gstreamer/usr/local/lib/x86_64",{"_index":753,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["la",{"_index":2095,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"123":{},"126":{},"129":{}},"component":{}}],["label",{"_index":2605,"title":{},"name":{},"text":{"124":{}},"component":{}}],["lack",{"_index":905,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["lag",{"_index":2848,"title":{"134-1":{}},"name":{},"text":{},"component":{}}],["laptop",{"_index":2733,"title":{},"name":{},"text":{"127":{}},"component":{}}],["last",{"_index":895,"title":{},"name":{},"text":{"7":{},"14":{},"17":{},"26":{},"33":{},"36":{},"44":{},"51":{},"54":{},"62":{},"69":{},"73":{},"80":{},"87":{},"91":{},"102":{},"109":{},"112":{},"125":{},"131":{}},"component":{}}],["lastli",{"_index":2492,"title":{},"name":{},"text":{"119":{}},"component":{}}],["latenc",{"_index":59,"title":{},"name":{},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"44":{},"57":{},"62":{},"72":{},"75":{},"80":{},"90":{},"93":{},"102":{},"120":{},"127":{},"135":{}},"component":{}}],["latency=0",{"_index":2702,"title":{},"name":{},"text":{"126":{}},"component":{}}],["later",{"_index":353,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"77":{},"80":{},"98":{},"102":{}},"component":{}}],["latest",{"_index":2223,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{},"114":{}},"component":{}}],["launch",{"_index":980,"title":{"15-15":{},"18-1":{},"34-15":{},"52-15":{},"55-1":{},"96-1":{},"110-15":{},"124-11":{},"132-2":{}},"name":{},"text":{"8":{},"12":{},"14":{},"16":{},"18":{},"27":{},"31":{},"33":{},"34":{},"35":{},"45":{},"49":{},"51":{},"53":{},"55":{},"63":{},"67":{},"69":{},"71":{},"81":{},"85":{},"87":{},"89":{},"94":{},"95":{},"96":{},"103":{},"107":{},"109":{},"111":{},"116":{},"119":{},"120":{},"124":{},"125":{},"131":{},"132":{},"135":{},"136":{}},"component":{}}],["launcher",{"_index":2592,"title":{},"name":{},"text":{"124":{},"127":{},"130":{}},"component":{}}],["lay",{"_index":927,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["layer",{"_index":1479,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"119":{},"135":{},"136":{}},"component":{}}],["layer=(int)3",{"_index":1911,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["layout",{"_index":911,"title":{"124-1":{}},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["ld_library_path=\"$ld_library_path:$home/gst",{"_index":777,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["ld_library_path=\"$ld_library_path:$home/gstreamer/lib/x86_64",{"_index":751,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["ldflags=\"$ldflag",{"_index":752,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["lead",{"_index":465,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"77":{},"80":{},"98":{},"102":{}},"component":{}}],["learn",{"_index":2799,"title":{},"name":{},"text":{"130":{}},"component":{}}],["leav",{"_index":2809,"title":{},"name":{},"text":{"131":{}},"component":{}}],["led",{"_index":968,"title":{"8-8":{},"27-8":{},"45-8":{},"63-8":{},"81-8":{},"103-8":{}},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"45":{},"48":{},"63":{},"66":{},"81":{},"84":{},"103":{},"106":{}},"component":{}}],["left",{"_index":1166,"title":{},"name":{},"text":{"11":{},"19":{},"30":{},"37":{},"48":{},"56":{},"66":{},"74":{},"84":{},"92":{},"106":{},"113":{}},"component":{}}],["left/right",{"_index":1039,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["left_button",{"_index":1406,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["left_stick",{"_index":1402,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["leftalt",{"_index":1182,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["leftbrac",{"_index":1351,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["leftctrl",{"_index":1180,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["leftmeta",{"_index":1275,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["leftshift",{"_index":1178,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["legaci",{"_index":1377,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["len",{"_index":993,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["less",{"_index":2717,"title":{},"name":{},"text":{"126":{}},"component":{}}],["let",{"_index":2461,"title":{},"name":{},"text":{"118":{},"127":{}},"component":{}}],["let’",{"_index":374,"title":{},"name":{},"text":{"3":{},"7":{},"17":{},"22":{},"26":{},"36":{},"40":{},"44":{},"54":{},"59":{},"62":{},"73":{},"77":{},"80":{},"91":{},"98":{},"102":{},"112":{},"114":{},"131":{}},"component":{}}],["level",{"_index":80,"title":{},"name":{},"text":{"1":{},"2":{},"7":{},"10":{},"13":{},"15":{},"20":{},"21":{},"26":{},"29":{},"32":{},"34":{},"38":{},"39":{},"44":{},"47":{},"50":{},"52":{},"57":{},"58":{},"62":{},"65":{},"68":{},"70":{},"72":{},"75":{},"76":{},"80":{},"83":{},"86":{},"88":{},"90":{},"93":{},"97":{},"102":{},"105":{},"108":{},"110":{},"124":{},"135":{}},"component":{}}],["level=(string)2",{"_index":1927,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["le’t",{"_index":1728,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["lib",{"_index":1991,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["lib/firmware/i915",{"_index":2225,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["lib/utils.sh",{"_index":2390,"title":{},"name":{},"text":{"114":{},"124":{}},"component":{}}],["libaom",{"_index":698,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libboost",{"_index":787,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libcairo",{"_index":694,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libcairo2",{"_index":693,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libcap2",{"_index":683,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libcurl",{"_index":177,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"124":{}},"component":{}}],["libcurl4",{"_index":795,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libdrm",{"_index":678,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libevdev",{"_index":798,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libgbm",{"_index":794,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libglib2.0",{"_index":689,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libharfbuzz",{"_index":699,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libinput",{"_index":792,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["liblcms2",{"_index":692,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libllvm15",{"_index":671,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libmfx",{"_index":680,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libopenjp2",{"_index":690,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libopu",{"_index":674,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libpango1.0",{"_index":700,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libpci",{"_index":800,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libpuls",{"_index":199,"title":{},"name":{},"text":{"2":{},"5":{},"6":{},"21":{},"24":{},"25":{},"39":{},"42":{},"43":{},"61":{},"79":{},"97":{},"100":{},"101":{}},"component":{}}],["librari",{"_index":167,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"6":{},"7":{},"21":{},"23":{},"24":{},"25":{},"26":{},"39":{},"41":{},"42":{},"43":{},"44":{},"58":{},"60":{},"61":{},"62":{},"76":{},"78":{},"79":{},"80":{},"97":{},"99":{},"100":{},"101":{},"102":{}},"component":{}}],["libraries=app,video",{"_index":716,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["library_path=\"$library_path:$home/gst",{"_index":775,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["library_path=\"$library_path:$home/gstreamer/usr/local/lib/x86_64",{"_index":749,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["librsvg2",{"_index":697,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libssl",{"_index":797,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libudev",{"_index":425,"title":{},"name":{},"text":{"3":{},"6":{},"22":{},"25":{},"40":{},"43":{},"59":{},"61":{},"77":{},"79":{},"98":{},"101":{}},"component":{}}],["libunwind",{"_index":799,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libunwind8",{"_index":682,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libva",{"_index":679,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libvpl",{"_index":681,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libwayland",{"_index":688,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libwebp7",{"_index":696,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libx11",{"_index":685,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libx265",{"_index":673,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libxdamag",{"_index":687,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libxfix",{"_index":686,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libxkbcommon",{"_index":793,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libzbar",{"_index":677,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["libzx",{"_index":676,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"101":{}},"component":{}}],["libzxingcor",{"_index":2227,"title":{},"name":{},"text":{"61":{},"79":{}},"component":{}}],["limit",{"_index":2138,"title":{},"name":{},"text":{"18":{},"55":{},"96":{},"120":{}},"component":{}}],["line",{"_index":626,"title":{},"name":{},"text":{"5":{},"14":{},"15":{},"16":{},"17":{},"19":{},"24":{},"33":{},"34":{},"35":{},"36":{},"37":{},"42":{},"51":{},"52":{},"53":{},"54":{},"56":{},"69":{},"70":{},"71":{},"73":{},"74":{},"87":{},"88":{},"89":{},"91":{},"92":{},"95":{},"100":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"116":{},"119":{},"124":{},"125":{},"128":{},"131":{},"134":{}},"component":{}}],["linear",{"_index":489,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["link",{"_index":857,"title":{},"name":{},"text":{"7":{},"17":{},"26":{},"36":{},"44":{},"54":{},"62":{},"73":{},"80":{},"91":{},"102":{},"112":{}},"component":{}}],["linux",{"_index":63,"title":{"18-4":{},"55-4":{},"96-4":{}},"name":{},"text":{"1":{},"3":{},"6":{},"7":{},"19":{},"20":{},"22":{},"25":{},"26":{},"37":{},"38":{},"40":{},"43":{},"44":{},"56":{},"57":{},"59":{},"61":{},"62":{},"75":{},"77":{},"79":{},"80":{},"93":{},"98":{},"101":{},"102":{},"113":{},"124":{},"127":{},"129":{}},"component":{}}],["linux/index.html#runfil",{"_index":2049,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["lion",{"_index":6,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["list",{"_index":516,"title":{},"name":{},"text":{"4":{},"15":{},"16":{},"17":{},"18":{},"23":{},"35":{},"36":{},"41":{},"52":{},"53":{},"54":{},"55":{},"60":{},"70":{},"71":{},"73":{},"78":{},"88":{},"89":{},"91":{},"96":{},"99":{},"110":{},"111":{},"112":{},"116":{},"126":{},"130":{},"134":{}},"component":{}}],["listen",{"_index":362,"title":{},"name":{},"text":{"3":{},"6":{},"22":{},"25":{},"40":{},"43":{},"59":{},"61":{},"77":{},"79":{},"98":{},"101":{}},"component":{}}],["littl",{"_index":200,"title":{},"name":{},"text":{"2":{},"3":{},"8":{},"11":{},"17":{},"21":{},"22":{},"27":{},"30":{},"36":{},"39":{},"40":{},"45":{},"48":{},"54":{},"58":{},"59":{},"63":{},"66":{},"73":{},"76":{},"77":{},"81":{},"84":{},"91":{},"97":{},"98":{},"103":{},"106":{},"112":{},"118":{}},"component":{}}],["live",{"_index":250,"title":{},"name":{},"text":{"2":{},"5":{},"21":{},"24":{},"39":{},"42":{},"58":{},"76":{},"97":{},"100":{}},"component":{}}],["live=tru",{"_index":1864,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["lo",{"_index":2608,"title":{},"name":{},"text":{"124":{}},"component":{}}],["load",{"_index":2018,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{},"126":{},"131":{}},"component":{}}],["local",{"_index":788,"title":{"116-1":{}},"name":{},"text":{"6":{},"17":{},"19":{},"25":{},"36":{},"37":{},"43":{},"54":{},"56":{},"61":{},"73":{},"74":{},"79":{},"91":{},"92":{},"101":{},"112":{},"113":{},"115":{},"116":{}},"component":{}}],["local_st",{"_index":2426,"title":{},"name":{},"text":{"116":{},"134":{}},"component":{}}],["local_state/.config",{"_index":2843,"title":{},"name":{},"text":{"133":{}},"component":{}}],["local_state/.config/unity3d/nobrakesgames/human/player.log",{"_index":2844,"title":{},"name":{},"text":{"133":{}},"component":{}}],["local_state/.steam/debian",{"_index":2839,"title":{},"name":{},"text":{"133":{}},"component":{}}],["local_state/steam/logs/bootstrap_log.txt",{"_index":2846,"title":{},"name":{},"text":{"133":{}},"component":{}}],["localhost",{"_index":2091,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["locat",{"_index":1931,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"95":{},"111":{},"116":{},"126":{}},"component":{}}],["location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight",{"_index":1936,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["location=\"https://storage.googleapis.com/gtv",{"_index":1919,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["location=/users/ale/downloads/elevate.mp3",{"_index":1896,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["lock",{"_index":2868,"title":{},"name":{},"text":{"134":{}},"component":{}}],["log",{"_index":789,"title":{"133-4":{},"134-5":{}},"name":{},"text":{"6":{},"15":{},"17":{},"19":{},"25":{},"34":{},"36":{},"37":{},"43":{},"52":{},"54":{},"56":{},"61":{},"70":{},"73":{},"74":{},"79":{},"88":{},"91":{},"92":{},"101":{},"110":{},"112":{},"113":{},"129":{},"133":{},"134":{}},"component":{}}],["logic",{"_index":170,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["loki",{"_index":99,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["long",{"_index":2396,"title":{},"name":{},"text":{"114":{},"115":{},"120":{}},"component":{}}],["longer",{"_index":2648,"title":{},"name":{},"text":{"124":{},"134":{}},"component":{}}],["look",{"_index":84,"title":{},"name":{},"text":{"1":{},"13":{},"14":{},"19":{},"20":{},"32":{},"33":{},"37":{},"38":{},"50":{},"51":{},"56":{},"57":{},"68":{},"69":{},"72":{},"74":{},"75":{},"86":{},"87":{},"90":{},"92":{},"93":{},"95":{},"108":{},"109":{},"113":{},"133":{},"135":{}},"component":{}}],["loss",{"_index":2877,"title":{},"name":{},"text":{"135":{}},"component":{}}],["loss_stat",{"_index":1011,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["lost",{"_index":926,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["lot",{"_index":936,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"124":{},"133":{}},"component":{}}],["low",{"_index":58,"title":{},"name":{},"text":{"1":{},"13":{},"20":{},"32":{},"38":{},"50":{},"57":{},"68":{},"72":{},"75":{},"86":{},"90":{},"93":{},"108":{},"120":{},"127":{},"135":{}},"component":{}}],["low/high",{"_index":1036,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["lower",{"_index":2124,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["ls",{"_index":2016,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"70":{},"73":{},"74":{},"88":{},"91":{},"92":{},"112":{},"113":{},"123":{},"126":{},"129":{}},"component":{}}],["lshw",{"_index":2700,"title":{},"name":{},"text":{"126":{}},"component":{}}],["lt",{"_index":1379,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"114":{}},"component":{}}],["luckili",{"_index":455,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["lutri",{"_index":2545,"title":{"124":{},"124-3":{},"124-6":{},"124-8":{}},"name":{"124":{}},"text":{"124":{}},"component":{}}],["lutris.sh",{"_index":2552,"title":{"124-17":{}},"name":{},"text":{"124":{}},"component":{}}],["lutris.yml",{"_index":2569,"title":{},"name":{},"text":{"124":{}},"component":{}}],["lutris_arg",{"_index":2642,"title":{},"name":{},"text":{"124":{}},"component":{}}],["lutris_args=(\"lutris:rungame/supertux",{"_index":2610,"title":{},"name":{},"text":{"124":{}},"component":{}}],["lutris_args=(\"lutris:supertux",{"_index":2611,"title":{},"name":{},"text":{"124":{}},"component":{}}],["m",{"_index":1250,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"48":{},"54":{},"66":{},"73":{},"84":{},"91":{},"106":{},"112":{}},"component":{}}],["machin",{"_index":2536,"title":{},"name":{},"text":{"123":{},"127":{}},"component":{}}],["machine’",{"_index":2779,"title":{},"name":{},"text":{"129":{}},"component":{}}],["made",{"_index":25,"title":{"135-1":{}},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{},"120":{},"121":{},"127":{},"131":{}},"component":{}}],["main",{"_index":422,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"10":{},"14":{},"17":{},"22":{},"23":{},"24":{},"26":{},"29":{},"33":{},"36":{},"40":{},"41":{},"42":{},"44":{},"47":{},"51":{},"54":{},"59":{},"60":{},"62":{},"65":{},"69":{},"70":{},"73":{},"77":{},"78":{},"80":{},"83":{},"87":{},"88":{},"91":{},"98":{},"99":{},"100":{},"102":{},"105":{},"109":{},"112":{},"115":{},"134":{}},"component":{}}],["maintain",{"_index":2462,"title":{},"name":{},"text":{"118":{}},"component":{}}],["major",{"_index":2070,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"73":{},"90":{},"91":{},"112":{}},"component":{}}],["major:minor",{"_index":308,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["major=13",{"_index":348,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["make",{"_index":270,"title":{"3-2":{},"22-2":{},"40-2":{},"59-2":{},"77-2":{},"98-2":{}},"name":{},"text":{"5":{},"6":{},"9":{},"15":{},"17":{},"18":{},"19":{},"24":{},"25":{},"28":{},"34":{},"36":{},"37":{},"42":{},"43":{},"46":{},"52":{},"54":{},"55":{},"56":{},"61":{},"64":{},"70":{},"73":{},"74":{},"79":{},"82":{},"88":{},"91":{},"92":{},"95":{},"96":{},"100":{},"101":{},"104":{},"110":{},"112":{},"113":{},"114":{},"115":{},"116":{},"119":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"129":{},"130":{},"131":{},"133":{},"136":{}},"component":{}}],["manag",{"_index":400,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"22":{},"24":{},"26":{},"40":{},"42":{},"44":{},"59":{},"62":{},"77":{},"80":{},"95":{},"98":{},"100":{},"102":{},"115":{},"123":{},"124":{},"127":{},"129":{},"131":{},"135":{}},"component":{}}],["mangohud",{"_index":2133,"title":{"18-2":{},"55-2":{},"96-2":{}},"name":{},"text":{"18":{},"55":{},"96":{}},"component":{}}],["mani",{"_index":864,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"118":{},"122":{},"124":{},"127":{},"130":{},"131":{},"133":{},"135":{},"136":{}},"component":{}}],["manual",{"_index":1968,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{},"117":{},"119":{},"123":{},"128":{},"131":{}},"component":{}}],["manual_build",{"_index":643,"title":{},"name":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"text":{},"component":{}}],["map",{"_index":1789,"title":{"15-7":{},"34-7":{},"52-7":{},"110-7":{}},"name":{},"text":{"95":{},"116":{},"126":{}},"component":{}}],["mark",{"_index":1776,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["mask",{"_index":1117,"title":{"11-12":{},"30-12":{},"48-12":{},"66-12":{},"84-12":{},"106-12":{}},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["match",{"_index":1851,"title":{},"name":{},"text":{"15":{},"52":{},"110":{},"116":{}},"component":{}}],["matchdriv",{"_index":2769,"title":{},"name":{},"text":{"128":{}},"component":{}}],["matshona",{"_index":8,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["matter",{"_index":370,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["matthew1000/gstream",{"_index":1877,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["matur",{"_index":2411,"title":{},"name":{},"text":{"115":{}},"component":{}}],["mcdonough",{"_index":463,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["mean",{"_index":869,"title":{},"name":{},"text":{"7":{},"11":{},"13":{},"17":{},"19":{},"26":{},"30":{},"32":{},"36":{},"37":{},"44":{},"48":{},"50":{},"54":{},"56":{},"62":{},"66":{},"68":{},"73":{},"74":{},"80":{},"84":{},"86":{},"91":{},"92":{},"102":{},"106":{},"108":{},"112":{},"113":{},"115":{},"125":{},"126":{},"132":{},"134":{},"136":{}},"component":{}}],["mechan",{"_index":385,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"22":{},"23":{},"26":{},"40":{},"41":{},"44":{},"59":{},"60":{},"62":{},"77":{},"78":{},"80":{},"98":{},"99":{},"102":{},"115":{},"131":{}},"component":{}}],["media",{"_index":481,"title":{},"name":{},"text":{"4":{},"16":{},"23":{},"35":{},"41":{},"53":{},"60":{},"71":{},"78":{},"89":{},"99":{},"111":{}},"component":{}}],["meet",{"_index":2675,"title":{},"name":{},"text":{"125":{},"129":{},"134":{}},"component":{}}],["memori",{"_index":833,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"135":{}},"component":{}}],["mention",{"_index":1778,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{},"134":{}},"component":{}}],["menu",{"_index":2593,"title":{},"name":{},"text":{"124":{},"134":{}},"component":{}}],["mesa",{"_index":871,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["meson",{"_index":663,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["messag",{"_index":227,"title":{"14-3":{},"14-4":{},"14-7":{},"14-8":{},"33-3":{},"33-4":{},"33-7":{},"33-8":{},"51-3":{},"51-4":{},"51-7":{},"51-8":{},"69-3":{},"69-4":{},"69-7":{},"69-8":{},"87-3":{},"87-4":{},"87-7":{},"87-8":{},"109-3":{},"109-4":{},"109-7":{},"109-8":{}},"name":{},"text":{"2":{},"3":{},"8":{},"11":{},"14":{},"21":{},"22":{},"27":{},"30":{},"33":{},"39":{},"40":{},"45":{},"48":{},"51":{},"58":{},"59":{},"63":{},"66":{},"69":{},"76":{},"77":{},"81":{},"84":{},"87":{},"97":{},"98":{},"103":{},"106":{},"109":{}},"component":{}}],["meta",{"_index":2561,"title":{},"name":{},"text":{"124":{}},"component":{}}],["method",{"_index":136,"title":{},"name":{},"text":{"2":{},"4":{},"21":{},"23":{},"39":{},"41":{},"58":{},"60":{},"76":{},"78":{},"97":{},"99":{}},"component":{}}],["mfx_err_unsupport",{"_index":2160,"title":{"19-5":{},"37-5":{},"56-5":{},"113-5":{}},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["mfxvideoencode::queri",{"_index":2203,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["mice",{"_index":2410,"title":{},"name":{},"text":{"115":{}},"component":{}}],["micro",{"_index":570,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["middl",{"_index":1167,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["mind",{"_index":414,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"120":{},"131":{}},"component":{}}],["minim",{"_index":2387,"title":{},"name":{},"text":{"114":{}},"component":{}}],["minimum",{"_index":2079,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["minor",{"_index":2186,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{},"126":{}},"component":{}}],["minor=0",{"_index":349,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["minu",{"_index":1298,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["minut",{"_index":2829,"title":{},"name":{},"text":{"132":{}},"component":{}}],["misc",{"_index":1419,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["miss",{"_index":2042,"title":{"134-1":{},"134-4":{}},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"129":{},"136":{}},"component":{}}],["mix",{"_index":487,"title":{},"name":{},"text":{"4":{},"5":{},"16":{},"23":{},"24":{},"35":{},"41":{},"42":{},"53":{},"60":{},"71":{},"78":{},"89":{},"99":{},"100":{},"111":{}},"component":{}}],["mkdir",{"_index":708,"title":{"134-2":{}},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["mknod",{"_index":312,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"73":{},"77":{},"91":{},"95":{},"98":{},"112":{},"124":{}},"component":{}}],["mobil",{"_index":2751,"title":{},"name":{},"text":{"127":{}},"component":{}}],["mock",{"_index":254,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["mode",{"_index":1439,"title":{"135-2":{},"135-3":{}},"name":{},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{},"116":{},"120":{},"124":{},"127":{},"131":{},"134":{},"135":{}},"component":{}}],["mode=\"0660",{"_index":2106,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["model",{"_index":851,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"126":{}},"component":{}}],["modern",{"_index":2758,"title":{},"name":{},"text":{"127":{}},"component":{}}],["modeset",{"_index":2040,"title":{"134-6":{}},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"134":{}},"component":{}}],["modeset=1",{"_index":2019,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["modifi",{"_index":76,"title":{},"name":{},"text":{"1":{},"7":{},"11":{},"19":{},"20":{},"26":{},"30":{},"37":{},"38":{},"44":{},"48":{},"56":{},"57":{},"62":{},"66":{},"70":{},"74":{},"75":{},"80":{},"84":{},"88":{},"92":{},"93":{},"102":{},"106":{},"113":{},"114":{},"124":{}},"component":{}}],["modul",{"_index":117,"title":{"2-1":{},"21-1":{},"39-1":{},"58-1":{},"76-1":{},"97-1":{}},"name":{},"text":{"2":{},"17":{},"19":{},"21":{},"36":{},"37":{},"39":{},"54":{},"56":{},"58":{},"73":{},"74":{},"76":{},"91":{},"92":{},"97":{},"112":{},"113":{},"115":{},"123":{},"129":{},"136":{}},"component":{}}],["modulepath",{"_index":2770,"title":{},"name":{},"text":{"128":{}},"component":{}}],["monitor",{"_index":45,"title":{"125":{},"125-1":{},"129-3":{},"129-5":{},"129-6":{}},"name":{"125":{}},"text":{"1":{},"3":{},"7":{},"20":{},"22":{},"26":{},"38":{},"40":{},"44":{},"57":{},"59":{},"62":{},"75":{},"77":{},"80":{},"93":{},"98":{},"102":{},"125":{},"129":{},"134":{}},"component":{}}],["monitor0",{"_index":2681,"title":{},"name":{},"text":{"125":{}},"component":{}}],["monoton",{"_index":997,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["moonlight",{"_index":14,"title":{"10":{},"29":{},"47":{},"65":{},"83":{},"105":{},"17-2":{},"19-1":{},"36-2":{},"37-1":{},"54-2":{},"56-1":{},"73-2":{},"74-1":{},"91-2":{},"92-1":{},"112-2":{},"113-1":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"90":{},"91":{},"92":{},"93":{},"94":{},"96":{},"97":{},"98":{},"99":{},"100":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"113":{},"115":{},"117":{},"123":{},"124":{},"127":{},"131":{},"134":{}},"component":{}}],["more",{"_index":189,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"11":{},"13":{},"14":{},"15":{},"16":{},"17":{},"19":{},"21":{},"22":{},"24":{},"26":{},"30":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"39":{},"40":{},"42":{},"44":{},"48":{},"50":{},"51":{},"52":{},"53":{},"54":{},"56":{},"58":{},"59":{},"62":{},"66":{},"68":{},"69":{},"70":{},"71":{},"73":{},"74":{},"76":{},"77":{},"80":{},"84":{},"86":{},"87":{},"88":{},"89":{},"91":{},"92":{},"95":{},"97":{},"98":{},"100":{},"102":{},"106":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"115":{},"116":{},"120":{},"125":{},"126":{},"127":{},"128":{},"130":{},"131":{},"133":{},"134":{}},"component":{}}],["mostli",{"_index":71,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{},"116":{},"124":{}},"component":{}}],["motion",{"_index":966,"title":{"8-7":{},"11-15":{},"27-7":{},"30-15":{},"45-7":{},"48-15":{},"63-7":{},"66-15":{},"81-7":{},"84-15":{},"103-7":{},"106-15":{}},"name":{},"text":{"8":{},"17":{},"27":{},"36":{},"45":{},"54":{},"63":{},"73":{},"81":{},"91":{},"103":{},"112":{}},"component":{}}],["motion_ev",{"_index":1029,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["mount",{"_index":266,"title":{"3-1":{},"22-1":{},"40-1":{},"59-1":{},"77-1":{},"95-6":{},"98-1":{}},"name":{},"text":{"3":{},"5":{},"15":{},"17":{},"22":{},"24":{},"34":{},"36":{},"40":{},"42":{},"52":{},"54":{},"59":{},"70":{},"73":{},"77":{},"88":{},"91":{},"95":{},"98":{},"100":{},"110":{},"112":{},"124":{},"125":{}},"component":{}}],["mous",{"_index":186,"title":{"11-1":{},"11-2":{},"11-3":{},"11-5":{},"11-6":{},"30-1":{},"30-2":{},"30-3":{},"30-5":{},"30-6":{},"48-1":{},"48-2":{},"48-3":{},"48-5":{},"48-6":{},"66-1":{},"66-2":{},"66-3":{},"66-5":{},"66-6":{},"84-1":{},"84-2":{},"84-3":{},"84-5":{},"84-6":{},"106-1":{},"106-2":{},"106-3":{},"106-5":{},"106-6":{},"134-3":{}},"name":{},"text":{"2":{},"5":{},"11":{},"17":{},"21":{},"24":{},"30":{},"36":{},"39":{},"42":{},"48":{},"54":{},"58":{},"66":{},"72":{},"73":{},"76":{},"84":{},"90":{},"91":{},"97":{},"100":{},"106":{},"112":{},"120":{},"123":{},"129":{},"134":{},"135":{}},"component":{}}],["mouse_button_down",{"_index":1126,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["mouse_button_up",{"_index":1128,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["mouse_hscrol",{"_index":1136,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["mouse_move_ab",{"_index":1124,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["mouse_move_rel",{"_index":1122,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["mouse_scrol",{"_index":1134,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["move",{"_index":604,"title":{"11-1":{},"11-2":{},"30-1":{},"30-2":{},"48-1":{},"48-2":{},"66-1":{},"66-2":{},"84-1":{},"84-2":{},"106-1":{},"106-2":{}},"name":{},"text":{"5":{},"15":{},"17":{},"24":{},"36":{},"42":{},"52":{},"54":{},"73":{},"91":{},"100":{},"110":{},"112":{},"124":{},"134":{}},"component":{}}],["movement",{"_index":1157,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["mp4",{"_index":1915,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["mpegaudioversion=(int)1",{"_index":1910,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["mpegversion=(int)1",{"_index":1909,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["mpegversion=(int)4",{"_index":1924,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["much",{"_index":2388,"title":{},"name":{},"text":{"114":{},"120":{},"125":{},"130":{},"135":{}},"component":{}}],["multi",{"_index":1115,"title":{"11-11":{},"30-11":{},"48-11":{},"66-11":{},"84-11":{},"106-11":{}},"name":{},"text":{},"component":{}}],["multilib",{"_index":2831,"title":{},"name":{},"text":{"133":{}},"component":{}}],["multipl",{"_index":18,"title":{"15-3":{},"15-12":{},"34-3":{},"34-12":{},"52-3":{},"52-12":{},"70-8":{},"88-8":{},"110-3":{},"110-12":{}},"name":{},"text":{"1":{},"2":{},"5":{},"7":{},"15":{},"19":{},"20":{},"21":{},"24":{},"26":{},"34":{},"37":{},"38":{},"39":{},"42":{},"44":{},"52":{},"56":{},"57":{},"58":{},"62":{},"70":{},"72":{},"74":{},"75":{},"76":{},"80":{},"88":{},"90":{},"92":{},"93":{},"95":{},"97":{},"100":{},"102":{},"110":{},"113":{},"116":{},"123":{},"124":{},"127":{},"131":{}},"component":{}}],["music",{"_index":1889,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["myapp",{"_index":2392,"title":{},"name":{},"text":{"114":{}},"component":{}}],["myapp.yml",{"_index":2399,"title":{},"name":{},"text":{"114":{}},"component":{}}],["myself",{"_index":2471,"title":{"119-2":{}},"name":{},"text":{},"component":{}}],["n",{"_index":1252,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"48":{},"54":{},"66":{},"73":{},"84":{},"91":{},"106":{},"112":{}},"component":{}}],["n3d",{"_index":2062,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["n3d=`echo",{"_index":2055,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["n=`expr",{"_index":2061,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["nal",{"_index":1448,"title":{"13-7":{},"32-7":{},"50-7":{},"68-7":{},"86-7":{},"108-7":{}},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["nal_ref_idc",{"_index":1449,"title":{"13-8":{},"32-8":{},"50-8":{},"68-8":{},"86-8":{},"108-8":{}},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["nal_unit_typ",{"_index":1450,"title":{"13-9":{},"32-9":{},"50-9":{},"68-9":{},"86-9":{},"108-9":{}},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["nalu",{"_index":1484,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["name",{"_index":558,"title":{},"name":{},"text":{"4":{},"11":{},"15":{},"17":{},"18":{},"19":{},"23":{},"30":{},"34":{},"36":{},"37":{},"41":{},"48":{},"52":{},"54":{},"55":{},"56":{},"60":{},"66":{},"70":{},"73":{},"74":{},"78":{},"84":{},"88":{},"91":{},"92":{},"95":{},"96":{},"99":{},"106":{},"110":{},"112":{},"113":{},"120":{},"124":{},"131":{},"132":{}},"component":{}}],["name=comp",{"_index":1950,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["name=demux",{"_index":1921,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["name=t",{"_index":1898,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["namespac",{"_index":416,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["nasm",{"_index":675,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["nat",{"_index":1431,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{}},"component":{}}],["nathanle1406",{"_index":2148,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"96":{}},"component":{}}],["nativ",{"_index":2136,"title":{"18-4":{},"55-4":{},"96-4":{}},"name":{},"text":{"124":{}},"component":{}}],["natur",{"_index":146,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"124":{},"136":{}},"component":{}}],["ne",{"_index":442,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["near",{"_index":496,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["necessari",{"_index":1430,"title":{},"name":{},"text":{"12":{},"13":{},"19":{},"31":{},"32":{},"37":{},"49":{},"50":{},"56":{},"67":{},"68":{},"74":{},"85":{},"86":{},"92":{},"107":{},"108":{},"113":{},"114":{},"115":{},"120":{}},"component":{}}],["necessarili",{"_index":2507,"title":{},"name":{},"text":{"120":{},"125":{},"127":{}},"component":{}}],["need",{"_index":44,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"6":{},"7":{},"9":{},"10":{},"14":{},"15":{},"17":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"26":{},"28":{},"29":{},"33":{},"34":{},"36":{},"37":{},"38":{},"40":{},"41":{},"42":{},"43":{},"44":{},"46":{},"47":{},"51":{},"52":{},"54":{},"56":{},"57":{},"59":{},"60":{},"61":{},"62":{},"64":{},"65":{},"69":{},"70":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"80":{},"82":{},"83":{},"87":{},"88":{},"90":{},"91":{},"92":{},"93":{},"95":{},"98":{},"99":{},"100":{},"101":{},"102":{},"104":{},"105":{},"109":{},"110":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{},"118":{},"119":{},"120":{},"123":{},"124":{},"125":{},"126":{},"127":{},"129":{},"131":{},"132":{},"134":{}},"component":{}}],["negoti",{"_index":888,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["net_admin",{"_index":2337,"title":{},"name":{},"text":{"95":{},"124":{}},"component":{}}],["net_raw",{"_index":2336,"title":{},"name":{},"text":{"95":{},"124":{}},"component":{}}],["netlink",{"_index":393,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["netlink_kobject_uev",{"_index":432,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["network",{"_index":415,"title":{},"name":{},"text":{"3":{},"9":{},"13":{},"22":{},"28":{},"32":{},"40":{},"46":{},"50":{},"59":{},"64":{},"68":{},"77":{},"82":{},"86":{},"98":{},"104":{},"108":{},"120":{},"136":{}},"component":{}}],["network:host",{"_index":2078,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["network=host",{"_index":418,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"112":{}},"component":{}}],["network_mod",{"_index":1985,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"120":{},"134":{}},"component":{}}],["new",{"_index":140,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"8":{},"11":{},"14":{},"15":{},"21":{},"22":{},"24":{},"26":{},"27":{},"30":{},"33":{},"34":{},"39":{},"40":{},"42":{},"44":{},"45":{},"48":{},"51":{},"52":{},"58":{},"59":{},"62":{},"63":{},"66":{},"69":{},"70":{},"72":{},"76":{},"77":{},"80":{},"81":{},"84":{},"87":{},"88":{},"90":{},"97":{},"98":{},"100":{},"102":{},"103":{},"106":{},"109":{},"110":{},"114":{},"116":{},"125":{},"127":{},"128":{},"136":{}},"component":{}}],["newli",{"_index":2121,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"119":{},"120":{}},"component":{}}],["newlin",{"_index":1757,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["next",{"_index":908,"title":{"117-1":{},"123-7":{}},"name":{},"text":{"7":{},"8":{},"9":{},"10":{},"11":{},"14":{},"26":{},"27":{},"28":{},"29":{},"30":{},"33":{},"44":{},"45":{},"46":{},"47":{},"48":{},"51":{},"62":{},"63":{},"64":{},"65":{},"66":{},"69":{},"80":{},"81":{},"82":{},"83":{},"84":{},"87":{},"95":{},"102":{},"103":{},"104":{},"105":{},"106":{},"109":{},"122":{},"125":{},"132":{}},"component":{}}],["ninja",{"_index":661,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["nintendo",{"_index":1369,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"48":{},"54":{},"66":{},"73":{},"84":{},"91":{},"106":{},"112":{},"127":{}},"component":{}}],["node",{"_index":1791,"title":{"15-13":{},"34-14":{},"52-13":{},"70-10":{},"88-10":{},"110-13":{}},"name":{},"text":{"15":{},"17":{},"34":{},"36":{},"52":{},"54":{},"70":{},"73":{},"88":{},"91":{},"110":{},"112":{},"123":{}},"component":{}}],["nomenclatur",{"_index":537,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["non",{"_index":488,"title":{},"name":{},"text":{"4":{},"13":{},"23":{},"32":{},"41":{},"50":{},"60":{},"68":{},"78":{},"86":{},"99":{},"108":{},"120":{},"131":{}},"component":{}}],["none",{"_index":917,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["normal",{"_index":298,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"115":{},"125":{},"136":{}},"component":{}}],["notabl",{"_index":2423,"title":{},"name":{},"text":{"115":{},"131":{}},"component":{}}],["note",{"_index":1452,"title":{},"name":{},"text":{"13":{},"19":{},"32":{},"37":{},"50":{},"56":{},"68":{},"86":{},"108":{},"113":{},"124":{}},"component":{}}],["noth",{"_index":2265,"title":{},"name":{},"text":{"72":{},"90":{},"125":{}},"component":{}}],["notif",{"_index":387,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["nouveau",{"_index":2699,"title":{"126-4":{}},"name":{},"text":{"126":{}},"component":{}}],["now",{"_index":758,"title":{},"name":{},"text":{"6":{},"7":{},"9":{},"13":{},"17":{},"25":{},"26":{},"28":{},"32":{},"36":{},"43":{},"44":{},"46":{},"50":{},"54":{},"61":{},"62":{},"64":{},"68":{},"73":{},"79":{},"80":{},"82":{},"86":{},"91":{},"101":{},"102":{},"104":{},"108":{},"112":{},"116":{},"121":{},"124":{},"125":{},"127":{},"131":{},"132":{},"136":{}},"component":{}}],["null",{"_index":2638,"title":{},"name":{},"text":{"124":{}},"component":{}}],["number",{"_index":890,"title":{},"name":{},"text":{"7":{},"8":{},"11":{},"12":{},"14":{},"17":{},"26":{},"27":{},"30":{},"31":{},"33":{},"36":{},"44":{},"45":{},"48":{},"49":{},"51":{},"54":{},"62":{},"63":{},"66":{},"67":{},"69":{},"73":{},"80":{},"81":{},"84":{},"85":{},"87":{},"91":{},"102":{},"103":{},"106":{},"107":{},"109":{},"112":{}},"component":{}}],["numlock",{"_index":1328,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["numpad",{"_index":1281,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["nv",{"_index":1447,"title":{"13-4":{},"32-4":{},"50-4":{},"68-4":{},"86-4":{},"108-4":{}},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["nv_version=$(cat",{"_index":2007,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["nvcodec",{"_index":760,"title":{},"name":{},"text":{"6":{},"15":{},"25":{},"43":{},"52":{},"61":{},"70":{},"79":{},"88":{},"101":{},"110":{}},"component":{}}],["nvdev",{"_index":2056,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["nvdevs=`lspci",{"_index":2054,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["nvga",{"_index":2063,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["nvga=`echo",{"_index":2058,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["nvidia",{"_index":636,"title":{"126":{},"6-1":{},"25-1":{},"43-1":{},"61-1":{},"79-1":{},"101-1":{},"126-2":{},"126-4":{},"129-9":{}},"name":{"126":{}},"text":{"6":{},"15":{},"17":{},"19":{},"25":{},"34":{},"36":{},"37":{},"43":{},"52":{},"54":{},"56":{},"61":{},"70":{},"73":{},"74":{},"79":{},"88":{},"91":{},"92":{},"101":{},"110":{},"112":{},"113":{},"115":{},"126":{},"127":{},"128":{},"129":{},"131":{}},"component":{}}],["nvidia/xorg",{"_index":2771,"title":{},"name":{},"text":{"128":{}},"component":{}}],["nvidia_driver_capabilities=al",{"_index":1995,"title":{},"name":{},"text":{"17":{},"54":{},"112":{}},"component":{}}],["nvidia_driver_volume_nam",{"_index":1818,"title":{},"name":{},"text":{"15":{},"19":{},"34":{},"37":{},"52":{},"56":{},"70":{},"74":{},"88":{},"92":{},"110":{},"113":{}},"component":{}}],["nvidia_driver_volume_name=nvidia",{"_index":2031,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["nvidia_visible_devices=al",{"_index":1996,"title":{},"name":{},"text":{"17":{},"54":{},"112":{}},"component":{}}],["nvidiagraphicsdriv",{"_index":650,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["nvidia’",{"_index":2742,"title":{},"name":{},"text":{"127":{}},"component":{}}],["nvrm",{"_index":2705,"title":{},"name":{},"text":{"126":{}},"component":{}}],["o",{"_index":1254,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["object",{"_index":544,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["objects/vari",{"_index":132,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["obtain",{"_index":1084,"title":{"125-4":{}},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["obvious",{"_index":468,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["occur",{"_index":1732,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["offici",{"_index":538,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"23":{},"25":{},"26":{},"41":{},"43":{},"44":{},"60":{},"61":{},"62":{},"78":{},"79":{},"80":{},"95":{},"99":{},"101":{},"102":{},"114":{},"126":{}},"component":{}}],["ogg/vorbi",{"_index":483,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["ok",{"_index":1780,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["older",{"_index":943,"title":{"126-2":{}},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"126":{},"129":{}},"component":{}}],["on",{"_index":356,"title":{},"name":{},"text":{"3":{},"4":{},"6":{},"7":{},"8":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"18":{},"22":{},"23":{},"25":{},"26":{},"27":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"40":{},"41":{},"43":{},"44":{},"45":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"55":{},"59":{},"60":{},"61":{},"62":{},"63":{},"66":{},"67":{},"68":{},"69":{},"70":{},"73":{},"77":{},"78":{},"79":{},"80":{},"81":{},"84":{},"85":{},"86":{},"87":{},"88":{},"91":{},"96":{},"98":{},"99":{},"101":{},"102":{},"103":{},"106":{},"107":{},"108":{},"109":{},"110":{},"112":{},"114":{},"116":{},"119":{},"120":{},"123":{},"125":{},"126":{},"127":{},"128":{},"131":{},"134":{},"135":{}},"component":{}}],["onc",{"_index":948,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"70":{},"80":{},"88":{},"94":{},"95":{},"102":{},"114":{},"117":{},"120":{},"131":{}},"component":{}}],["onlin",{"_index":2860,"title":{},"name":{},"text":{"134":{}},"component":{}}],["open",{"_index":10,"title":{},"name":{},"text":{"1":{},"6":{},"12":{},"13":{},"17":{},"20":{},"25":{},"31":{},"32":{},"36":{},"38":{},"43":{},"49":{},"50":{},"54":{},"57":{},"61":{},"67":{},"68":{},"72":{},"75":{},"79":{},"85":{},"86":{},"90":{},"93":{},"101":{},"107":{},"108":{},"112":{},"117":{},"119":{},"120":{},"123":{},"124":{},"126":{},"127":{},"128":{},"134":{},"136":{}},"component":{}}],["opengl",{"_index":859,"title":{"18-4":{},"55-4":{},"96-4":{}},"name":{},"text":{"7":{},"18":{},"26":{},"44":{},"55":{},"62":{},"80":{},"96":{},"102":{}},"component":{}}],["openssl",{"_index":796,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["oper",{"_index":915,"title":{},"name":{},"text":{"7":{},"12":{},"13":{},"26":{},"31":{},"32":{},"44":{},"49":{},"50":{},"62":{},"67":{},"68":{},"80":{},"85":{},"86":{},"102":{},"107":{},"108":{}},"component":{}}],["opt/gow",{"_index":2573,"title":{},"name":{},"text":{"124":{}},"component":{}}],["opt/gow/bash",{"_index":2389,"title":{},"name":{},"text":{"114":{},"124":{}},"component":{}}],["opt/gow/startup.d",{"_index":2575,"title":{},"name":{},"text":{"124":{}},"component":{}}],["opt/gow/startup.d/20",{"_index":2595,"title":{},"name":{},"text":{"124":{}},"component":{}}],["opt/gow/startup.sh",{"_index":2570,"title":{},"name":{},"text":{"124":{}},"component":{}}],["opt/gow/supertux",{"_index":2643,"title":{},"name":{},"text":{"124":{}},"component":{}}],["optim",{"_index":1155,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["optimis",{"_index":620,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["option",{"_index":264,"title":{"14-5":{},"33-5":{},"51-5":{},"69-5":{},"87-5":{},"109-5":{},"128-1":{}},"name":{},"text":{"2":{},"7":{},"11":{},"14":{},"15":{},"17":{},"18":{},"21":{},"26":{},"30":{},"33":{},"34":{},"36":{},"39":{},"44":{},"48":{},"51":{},"52":{},"54":{},"55":{},"58":{},"62":{},"66":{},"69":{},"70":{},"73":{},"76":{},"80":{},"84":{},"87":{},"88":{},"91":{},"96":{},"97":{},"102":{},"106":{},"109":{},"110":{},"112":{},"114":{},"119":{},"125":{},"128":{},"131":{},"132":{},"133":{},"134":{},"135":{}},"component":{}}],["options+=\"static_node=uinput",{"_index":2108,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["opu",{"_index":1106,"title":{"12-4":{},"31-4":{},"49-4":{},"67-4":{},"85-4":{},"107-4":{}},"name":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"text":{"10":{},"12":{},"29":{},"31":{},"47":{},"49":{},"65":{},"67":{},"83":{},"85":{},"105":{},"107":{}},"component":{}}],["order",{"_index":21,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"30":{},"31":{},"32":{},"34":{},"35":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"48":{},"49":{},"50":{},"52":{},"53":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"66":{},"67":{},"68":{},"70":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"84":{},"85":{},"86":{},"88":{},"89":{},"90":{},"92":{},"93":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"102":{},"103":{},"104":{},"106":{},"107":{},"108":{},"110":{},"111":{},"113":{},"115":{},"116":{},"121":{},"123":{},"126":{},"131":{},"133":{},"134":{}},"component":{}}],["org.opencontainers.image.sourc",{"_index":2606,"title":{},"name":{},"text":{"124":{}},"component":{}}],["origin",{"_index":408,"title":{},"name":{},"text":{"3":{},"4":{},"8":{},"9":{},"22":{},"23":{},"27":{},"28":{},"40":{},"41":{},"45":{},"46":{},"59":{},"60":{},"63":{},"64":{},"77":{},"78":{},"81":{},"82":{},"98":{},"99":{},"103":{},"104":{},"127":{},"131":{}},"component":{}}],["os",{"_index":2413,"title":{},"name":{},"text":{"115":{},"127":{},"131":{},"136":{}},"component":{}}],["osx",{"_index":1885,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["other",{"_index":2466,"title":{},"name":{},"text":{"118":{}},"component":{}}],["otherwis",{"_index":1093,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["ourselv",{"_index":2888,"title":{},"name":{},"text":{"136":{}},"component":{}}],["out",{"_index":89,"title":{},"name":{},"text":{"1":{},"3":{},"7":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"26":{},"35":{},"36":{},"37":{},"38":{},"40":{},"44":{},"53":{},"54":{},"55":{},"56":{},"57":{},"59":{},"62":{},"71":{},"73":{},"74":{},"75":{},"77":{},"80":{},"89":{},"91":{},"92":{},"93":{},"96":{},"98":{},"102":{},"111":{},"112":{},"113":{},"116":{},"117":{},"118":{},"119":{},"120":{},"122":{},"123":{},"129":{},"133":{},"134":{},"135":{}},"component":{}}],["outlin",{"_index":2215,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["output",{"_index":141,"title":{},"name":{},"text":{"2":{},"4":{},"7":{},"19":{},"21":{},"23":{},"26":{},"37":{},"39":{},"41":{},"44":{},"56":{},"58":{},"60":{},"62":{},"76":{},"78":{},"80":{},"94":{},"97":{},"99":{},"102":{},"113":{},"131":{}},"component":{}}],["outputclass",{"_index":2766,"title":{},"name":{},"text":{"128":{}},"component":{}}],["outsid",{"_index":313,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"77":{},"80":{},"98":{},"102":{},"116":{}},"component":{}}],["over",{"_index":295,"title":{},"name":{},"text":{"3":{},"7":{},"8":{},"9":{},"10":{},"12":{},"14":{},"22":{},"26":{},"27":{},"28":{},"29":{},"31":{},"33":{},"40":{},"44":{},"45":{},"46":{},"47":{},"49":{},"51":{},"59":{},"62":{},"63":{},"64":{},"65":{},"67":{},"69":{},"70":{},"77":{},"80":{},"81":{},"82":{},"83":{},"85":{},"87":{},"88":{},"98":{},"102":{},"103":{},"104":{},"105":{},"107":{},"109":{},"115":{},"119":{},"123":{},"127":{}},"component":{}}],["overal",{"_index":2664,"title":{},"name":{},"text":{"125":{}},"component":{}}],["overhead",{"_index":1473,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["overlap",{"_index":284,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"22":{},"23":{},"24":{},"40":{},"41":{},"42":{},"59":{},"60":{},"77":{},"78":{},"98":{},"99":{},"100":{}},"component":{}}],["overlay",{"_index":1944,"title":{},"name":{},"text":{"16":{},"18":{},"35":{},"53":{},"55":{},"71":{},"89":{},"96":{},"111":{}},"component":{}}],["overrid",{"_index":1788,"title":{"15-7":{},"34-7":{},"52-7":{},"110-7":{}},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{},"131":{}},"component":{}}],["overridden",{"_index":629,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["overview",{"_index":476,"title":{"72":{},"90":{},"115":{},"127":{},"4-1":{},"8-1":{},"9-1":{},"10-1":{},"12-1":{},"13-1":{},"14-1":{},"23-1":{},"27-1":{},"28-1":{},"29-1":{},"31-1":{},"32-1":{},"33-1":{},"41-1":{},"45-1":{},"46-1":{},"47-1":{},"49-1":{},"50-1":{},"51-1":{},"60-1":{},"63-1":{},"64-1":{},"65-1":{},"67-1":{},"68-1":{},"69-1":{},"78-1":{},"81-1":{},"82-1":{},"83-1":{},"85-1":{},"86-1":{},"87-1":{},"94-1":{},"99-1":{},"103-1":{},"104-1":{},"105-1":{},"107-1":{},"108-1":{},"109-1":{}},"name":{"72":{},"90":{},"115":{},"127":{}},"text":{"7":{},"10":{},"26":{},"29":{},"44":{},"47":{},"62":{},"65":{},"80":{},"83":{},"102":{},"105":{},"115":{},"122":{},"123":{},"127":{}},"component":{}}],["overwrit",{"_index":2571,"title":{},"name":{},"text":{"124":{}},"component":{}}],["own",{"_index":2428,"title":{},"name":{},"text":{"116":{},"134":{}},"component":{}}],["p",{"_index":709,"title":{},"name":{},"text":{"6":{},"11":{},"13":{},"25":{},"30":{},"32":{},"43":{},"48":{},"50":{},"61":{},"66":{},"68":{},"79":{},"84":{},"86":{},"101":{},"106":{},"108":{},"131":{}},"component":{}}],["packag",{"_index":1428,"title":{},"name":{},"text":{"12":{},"13":{},"14":{},"31":{},"32":{},"33":{},"49":{},"50":{},"51":{},"67":{},"68":{},"69":{},"85":{},"86":{},"87":{},"107":{},"108":{},"109":{},"114":{},"122":{},"127":{}},"component":{}}],["packet",{"_index":217,"title":{"8-2":{},"12-3":{},"13-3":{},"27-2":{},"31-3":{},"32-3":{},"45-2":{},"49-3":{},"50-3":{},"63-2":{},"67-3":{},"68-3":{},"81-2":{},"85-3":{},"86-3":{},"103-2":{},"107-3":{},"108-3":{}},"name":{},"text":{"2":{},"3":{},"4":{},"8":{},"11":{},"12":{},"13":{},"14":{},"21":{},"22":{},"23":{},"27":{},"30":{},"31":{},"32":{},"33":{},"39":{},"40":{},"41":{},"45":{},"48":{},"49":{},"50":{},"51":{},"58":{},"59":{},"60":{},"63":{},"66":{},"67":{},"68":{},"69":{},"76":{},"77":{},"78":{},"81":{},"84":{},"85":{},"86":{},"87":{},"97":{},"98":{},"99":{},"103":{},"106":{},"107":{},"108":{},"109":{}},"component":{}}],["packets",{"_index":1454,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["packets/request",{"_index":255,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["pad",{"_index":2116,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["paddl",{"_index":1413,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["page",{"_index":1870,"title":{},"name":{},"text":{"15":{},"17":{},"18":{},"19":{},"36":{},"37":{},"52":{},"54":{},"55":{},"56":{},"70":{},"73":{},"74":{},"88":{},"91":{},"92":{},"96":{},"110":{},"112":{},"113":{},"123":{},"132":{},"135":{}},"component":{}}],["pagedown",{"_index":1201,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["pageup",{"_index":1199,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["pair",{"_index":1050,"title":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{},"17-2":{},"36-2":{},"54-2":{},"73-2":{},"91-2":{},"112-2":{}},"name":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"text":{"9":{},"10":{},"15":{},"17":{},"28":{},"29":{},"34":{},"36":{},"46":{},"47":{},"52":{},"54":{},"64":{},"65":{},"70":{},"73":{},"82":{},"83":{},"88":{},"91":{},"104":{},"105":{},"110":{},"112":{},"117":{}},"component":{}}],["paired_cli",{"_index":1839,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["pairingsecret",{"_index":1077,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["paradigm",{"_index":135,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["parallel",{"_index":145,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["param",{"_index":1469,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["paramet",{"_index":1432,"title":{},"name":{},"text":{"12":{},"13":{},"17":{},"31":{},"32":{},"36":{},"49":{},"50":{},"54":{},"67":{},"68":{},"73":{},"85":{},"86":{},"91":{},"107":{},"108":{},"112":{}},"component":{}}],["params=21101",{"_index":1767,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["pariti",{"_index":1427,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{}},"component":{}}],["pars",{"_index":236,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"51":{},"58":{},"69":{},"76":{},"87":{},"97":{},"109":{}},"component":{}}],["parser",{"_index":228,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["parser.hpp",{"_index":229,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"51":{},"58":{},"69":{},"76":{},"87":{},"97":{},"109":{}},"component":{}}],["part",{"_index":159,"title":{},"name":{},"text":{"2":{},"7":{},"14":{},"21":{},"26":{},"33":{},"39":{},"44":{},"51":{},"58":{},"62":{},"69":{},"70":{},"76":{},"80":{},"87":{},"88":{},"97":{},"102":{},"109":{},"133":{}},"component":{}}],["parti",{"_index":2511,"title":{},"name":{},"text":{"120":{}},"component":{}}],["particularli",{"_index":2376,"title":{},"name":{},"text":{"114":{},"136":{}},"component":{}}],["pass",{"_index":351,"title":{},"name":{},"text":{"3":{},"14":{},"19":{},"22":{},"33":{},"37":{},"40":{},"51":{},"56":{},"59":{},"69":{},"74":{},"77":{},"87":{},"92":{},"98":{},"109":{},"113":{},"119":{},"120":{},"123":{},"124":{},"126":{},"131":{}},"component":{}}],["passthrough",{"_index":2538,"title":{},"name":{},"text":{"123":{}},"component":{}}],["password",{"_index":1062,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{},"117":{},"123":{}},"component":{}}],["past",{"_index":1858,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["patch",{"_index":2710,"title":{},"name":{},"text":{"126":{}},"component":{}}],["path",{"_index":1797,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"95":{},"110":{},"124":{},"126":{}},"component":{}}],["path/to/edid.txt:/home/retro/edid.txt:ro",{"_index":2693,"title":{},"name":{},"text":{"125":{}},"component":{}}],["path/to/rom",{"_index":2331,"title":{},"name":{},"text":{"95":{}},"component":{}}],["path/to/roms:/rom",{"_index":2330,"title":{},"name":{},"text":{"95":{}},"component":{}}],["path/to/xorg",{"_index":2694,"title":{},"name":{},"text":{"125":{},"128":{}},"component":{}}],["path=\"$home/gstreamer/usr/local/bin:$path",{"_index":748,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["path=/tmp/pipe.sock",{"_index":1900,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["patient",{"_index":956,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["pattern=bal",{"_index":1862,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["paus",{"_index":1184,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["payload",{"_index":439,"title":{"8-3":{},"14-6":{},"27-3":{},"33-6":{},"45-3":{},"51-6":{},"63-3":{},"69-6":{},"81-3":{},"87-6":{},"103-3":{},"109-6":{}},"name":{},"text":{"3":{},"4":{},"8":{},"12":{},"13":{},"14":{},"22":{},"23":{},"27":{},"31":{},"32":{},"33":{},"40":{},"41":{},"45":{},"49":{},"50":{},"51":{},"59":{},"60":{},"63":{},"67":{},"68":{},"69":{},"77":{},"78":{},"81":{},"85":{},"86":{},"87":{},"98":{},"99":{},"103":{},"107":{},"108":{},"109":{}},"component":{}}],["pci",{"_index":2537,"title":{},"name":{},"text":{"123":{}},"component":{}}],["pcsx2",{"_index":2342,"title":{},"name":{},"text":{"95":{}},"component":{}}],["peculiar",{"_index":2566,"title":{},"name":{},"text":{"124":{}},"component":{}}],["peek",{"_index":2796,"title":{},"name":{},"text":{"130":{}},"component":{}}],["peg",{"_index":235,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"51":{},"58":{},"69":{},"76":{},"87":{},"97":{},"109":{}},"component":{}}],["pegasu",{"_index":2275,"title":{"95":{}},"name":{"95":{}},"text":{"94":{},"95":{}},"component":{}}],["pegasus/.config/pegasu",{"_index":2359,"title":{},"name":{},"text":{"95":{}},"component":{}}],["peglib",{"_index":232,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["pen",{"_index":1114,"title":{"11-8":{},"30-8":{},"48-8":{},"66-8":{},"84-8":{},"106-8":{}},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["pend",{"_index":887,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["peopl",{"_index":2793,"title":{},"name":{},"text":{"130":{}},"component":{}}],["per",{"_index":2153,"title":{},"name":{},"text":{"18":{},"55":{},"96":{},"116":{}},"component":{}}],["perform",{"_index":827,"title":{},"name":{},"text":{"7":{},"11":{},"26":{},"30":{},"44":{},"48":{},"62":{},"66":{},"80":{},"84":{},"102":{},"106":{}},"component":{}}],["periodic_p",{"_index":1019,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["perman",{"_index":1785,"title":{"15-2":{},"34-2":{},"52-2":{},"110-2":{}},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"72":{},"88":{},"90":{},"110":{}},"component":{}}],["permiss",{"_index":303,"title":{"134-2":{},"134-6":{}},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"112":{}},"component":{}}],["persist",{"_index":2023,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{},"116":{}},"component":{}}],["phase",{"_index":981,"title":{"9-2":{},"9-3":{},"9-4":{},"9-5":{},"9-6":{},"28-2":{},"28-3":{},"28-4":{},"28-5":{},"28-6":{},"46-2":{},"46-3":{},"46-4":{},"46-5":{},"46-6":{},"64-2":{},"64-3":{},"64-4":{},"64-5":{},"64-6":{},"82-2":{},"82-3":{},"82-4":{},"82-5":{},"82-6":{},"104-2":{},"104-3":{},"104-4":{},"104-5":{},"104-6":{}},"name":{},"text":{"8":{},"9":{},"12":{},"13":{},"27":{},"28":{},"31":{},"32":{},"45":{},"46":{},"49":{},"50":{},"63":{},"64":{},"67":{},"68":{},"81":{},"82":{},"85":{},"86":{},"103":{},"104":{},"107":{},"108":{}},"component":{}}],["phone",{"_index":2752,"title":{},"name":{},"text":{"127":{}},"component":{}}],["physf",{"_index":2624,"title":{},"name":{},"text":{"124":{}},"component":{}}],["physic",{"_index":824,"title":{},"name":{},"text":{"7":{},"19":{},"26":{},"37":{},"44":{},"56":{},"62":{},"74":{},"80":{},"92":{},"102":{},"113":{},"125":{}},"component":{}}],["pi",{"_index":2737,"title":{},"name":{},"text":{"127":{}},"component":{}}],["pick",{"_index":321,"title":{},"name":{},"text":{"3":{},"6":{},"10":{},"17":{},"22":{},"25":{},"29":{},"36":{},"40":{},"43":{},"47":{},"54":{},"59":{},"61":{},"65":{},"70":{},"73":{},"77":{},"79":{},"83":{},"88":{},"91":{},"98":{},"101":{},"105":{},"112":{},"124":{},"127":{}},"component":{}}],["pictur",{"_index":855,"title":{"16-7":{},"35-7":{},"53-7":{},"71-7":{},"89-7":{},"111-7":{}},"name":{},"text":{"7":{},"13":{},"26":{},"32":{},"44":{},"50":{},"62":{},"68":{},"80":{},"86":{},"102":{},"108":{}},"component":{}}],["piec",{"_index":2405,"title":{},"name":{},"text":{"115":{},"124":{},"127":{}},"component":{}}],["pin",{"_index":1064,"title":{},"name":{},"text":{"9":{},"17":{},"28":{},"36":{},"46":{},"54":{},"64":{},"73":{},"82":{},"91":{},"104":{},"112":{},"117":{},"123":{}},"component":{}}],["ping",{"_index":1423,"title":{"12-2":{},"13-2":{},"31-2":{},"32-2":{},"49-2":{},"50-2":{},"67-2":{},"68-2":{},"85-2":{},"86-2":{},"107-2":{},"108-2":{}},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{}},"component":{}}],["pip",{"_index":1945,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["pipelin",{"_index":77,"title":{"16-2":{},"35-2":{},"53-2":{},"71-2":{},"89-2":{},"111-2":{}},"name":{},"text":{"1":{},"4":{},"5":{},"7":{},"15":{},"16":{},"20":{},"23":{},"24":{},"26":{},"35":{},"38":{},"41":{},"42":{},"44":{},"52":{},"53":{},"57":{},"60":{},"62":{},"70":{},"71":{},"75":{},"78":{},"80":{},"88":{},"89":{},"93":{},"99":{},"100":{},"102":{},"110":{},"111":{},"130":{}},"component":{}}],["pipewiresrc",{"_index":1886,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["pixel",{"_index":910,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["pkg",{"_index":785,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["pkg_config_path=\"$pkg_config_path:$home/gst",{"_index":781,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["pkg_config_path=\"$pkg_config_path:$home/gstreamer/usr/local/lib/x86_64",{"_index":756,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["place",{"_index":655,"title":{},"name":{},"text":{"6":{},"12":{},"13":{},"25":{},"31":{},"32":{},"43":{},"49":{},"50":{},"61":{},"67":{},"68":{},"79":{},"85":{},"86":{},"95":{},"101":{},"107":{},"108":{},"116":{},"124":{},"133":{}},"component":{}}],["plain",{"_index":435,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["plaincert",{"_index":1068,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["plaintext",{"_index":1755,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["plan",{"_index":949,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"119":{},"127":{},"131":{}},"component":{}}],["platform",{"_index":212,"title":{"135":{},"116-4":{},"129-2":{},"131-1":{}},"name":{"135":{}},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"95":{},"97":{},"119":{},"120":{},"124":{},"127":{},"129":{},"130":{},"131":{},"132":{},"135":{}},"component":{}}],["platform/hw",{"_index":260,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["play",{"_index":22,"title":{"16-4":{},"18-3":{},"35-4":{},"53-4":{},"55-3":{},"71-4":{},"89-4":{},"96-3":{},"111-4":{}},"name":{},"text":{"1":{},"7":{},"14":{},"20":{},"26":{},"33":{},"38":{},"44":{},"51":{},"57":{},"62":{},"69":{},"70":{},"75":{},"80":{},"87":{},"88":{},"93":{},"102":{},"109":{},"117":{},"127":{},"130":{},"133":{}},"component":{}}],["playback",{"_index":484,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["pleas",{"_index":649,"title":{},"name":{},"text":{"6":{},"19":{},"25":{},"37":{},"43":{},"56":{},"61":{},"74":{},"79":{},"92":{},"95":{},"101":{},"113":{},"133":{}},"component":{}}],["plu",{"_index":1294,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["plug",{"_index":47,"title":{"125-2":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"11":{},"20":{},"22":{},"23":{},"24":{},"26":{},"30":{},"38":{},"40":{},"41":{},"42":{},"44":{},"48":{},"57":{},"59":{},"60":{},"62":{},"66":{},"75":{},"77":{},"78":{},"80":{},"84":{},"93":{},"98":{},"99":{},"100":{},"102":{},"106":{},"125":{},"129":{}},"component":{}}],["plugin",{"_index":477,"title":{"4-2":{},"23-2":{},"41-2":{},"60-2":{},"78-2":{},"99-2":{}},"name":{},"text":{"4":{},"5":{},"6":{},"7":{},"15":{},"16":{},"23":{},"24":{},"25":{},"26":{},"35":{},"41":{},"42":{},"43":{},"44":{},"52":{},"53":{},"60":{},"61":{},"62":{},"70":{},"71":{},"78":{},"79":{},"80":{},"88":{},"89":{},"99":{},"100":{},"101":{},"102":{},"110":{},"111":{},"129":{}},"component":{}}],["pod",{"_index":2544,"title":{},"name":{},"text":{"123":{}},"component":{}}],["point",{"_index":2088,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"114":{},"117":{},"124":{}},"component":{}}],["pointer",{"_index":2670,"title":{},"name":{},"text":{"125":{}},"component":{}}],["polul",{"_index":2010,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["popul",{"_index":2014,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"70":{},"73":{},"88":{},"91":{},"112":{}},"component":{}}],["popular",{"_index":2340,"title":{},"name":{},"text":{"95":{},"125":{},"127":{},"130":{},"136":{}},"component":{}}],["port",{"_index":813,"title":{},"name":{},"text":{"6":{},"10":{},"12":{},"13":{},"14":{},"17":{},"19":{},"25":{},"29":{},"31":{},"32":{},"33":{},"36":{},"37":{},"43":{},"47":{},"49":{},"50":{},"51":{},"54":{},"56":{},"61":{},"65":{},"67":{},"68":{},"69":{},"70":{},"73":{},"74":{},"79":{},"83":{},"85":{},"86":{},"87":{},"88":{},"91":{},"92":{},"95":{},"101":{},"105":{},"107":{},"108":{},"109":{},"112":{},"113":{},"116":{},"124":{}},"component":{}}],["portabl",{"_index":165,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["posit",{"_index":845,"title":{},"name":{},"text":{"7":{},"11":{},"18":{},"26":{},"30":{},"44":{},"48":{},"55":{},"62":{},"66":{},"80":{},"84":{},"96":{},"102":{},"106":{}},"component":{}}],["possibl",{"_index":128,"title":{},"name":{},"text":{"2":{},"6":{},"7":{},"12":{},"13":{},"21":{},"25":{},"26":{},"31":{},"32":{},"39":{},"43":{},"44":{},"49":{},"50":{},"58":{},"61":{},"62":{},"67":{},"68":{},"70":{},"76":{},"79":{},"80":{},"85":{},"86":{},"88":{},"97":{},"101":{},"102":{},"107":{},"108":{},"114":{},"125":{},"126":{},"127":{},"128":{},"131":{},"135":{}},"component":{}}],["post",{"_index":2518,"title":{},"name":{},"text":{"120":{}},"component":{}}],["potenti",{"_index":597,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["power",{"_index":155,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"70":{},"76":{},"88":{},"95":{},"97":{}},"component":{}}],["pp",{"_index":1751,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["practic",{"_index":2547,"title":{"124-9":{}},"name":{},"text":{},"component":{}}],["pre",{"_index":619,"title":{},"name":{},"text":{"5":{},"17":{},"18":{},"24":{},"36":{},"42":{},"54":{},"55":{},"73":{},"91":{},"96":{},"100":{},"112":{},"132":{}},"component":{}}],["preconfigur",{"_index":2274,"title":{},"name":{},"text":{"94":{},"95":{}},"component":{}}],["predomin",{"_index":872,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["prefer",{"_index":653,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"95":{},"101":{},"116":{}},"component":{}}],["prefix=$home/gst",{"_index":770,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["prefix=$home/gstream",{"_index":712,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["prepar",{"_index":2574,"title":{},"name":{},"text":{"124":{}},"component":{}}],["present",{"_index":429,"title":{},"name":{},"text":{"3":{},"5":{},"6":{},"7":{},"11":{},"14":{},"15":{},"17":{},"19":{},"22":{},"24":{},"25":{},"26":{},"30":{},"33":{},"34":{},"36":{},"37":{},"40":{},"42":{},"43":{},"44":{},"48":{},"51":{},"52":{},"54":{},"56":{},"59":{},"61":{},"62":{},"66":{},"69":{},"70":{},"73":{},"74":{},"77":{},"79":{},"80":{},"84":{},"87":{},"88":{},"91":{},"92":{},"98":{},"100":{},"101":{},"102":{},"106":{},"109":{},"110":{},"112":{},"113":{},"121":{},"123":{},"127":{},"131":{}},"component":{}}],["preserv",{"_index":2557,"title":{},"name":{},"text":{"124":{}},"component":{}}],["press",{"_index":1165,"title":{},"name":{},"text":{"11":{},"18":{},"30":{},"48":{},"55":{},"66":{},"84":{},"96":{},"106":{},"134":{}},"component":{}}],["pretend",{"_index":2658,"title":{},"name":{},"text":{"125":{}},"component":{}}],["pretti",{"_index":2381,"title":{},"name":{},"text":{"114":{}},"component":{}}],["previou",{"_index":2641,"title":{},"name":{},"text":{"124":{},"134":{}},"component":{}}],["previous",{"_index":932,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["primari",{"_index":29,"title":{"128":{}},"name":{"128":{}},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{},"128":{}},"component":{}}],["primarygpu",{"_index":2761,"title":{"128-1":{}},"name":{},"text":{"128":{}},"component":{}}],["print",{"_index":447,"title":{},"name":{},"text":{"3":{},"11":{},"15":{},"17":{},"19":{},"22":{},"30":{},"34":{},"36":{},"37":{},"40":{},"48":{},"52":{},"54":{},"56":{},"59":{},"66":{},"70":{},"73":{},"74":{},"77":{},"84":{},"88":{},"91":{},"92":{},"98":{},"106":{},"110":{},"112":{},"113":{},"131":{}},"component":{}}],["prior",{"_index":2576,"title":{},"name":{},"text":{"124":{}},"component":{}}],["prioriti",{"_index":1736,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["privat",{"_index":1078,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["privileg",{"_index":67,"title":{},"name":{},"text":{"1":{},"3":{},"20":{},"22":{},"38":{},"40":{},"57":{},"59":{},"70":{},"75":{},"77":{},"88":{},"93":{},"95":{},"98":{},"120":{},"124":{},"134":{}},"component":{}}],["pro",{"_index":2872,"title":{},"name":{},"text":{"135":{}},"component":{}}],["probabl",{"_index":2162,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{},"127":{}},"component":{}}],["problem",{"_index":2488,"title":{},"name":{},"text":{"119":{},"134":{},"136":{}},"component":{}}],["proc/devic",{"_index":2072,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["process",{"_index":388,"title":{"15-9":{},"34-9":{},"52-9":{},"70-5":{},"88-5":{},"110-9":{}},"name":{},"text":{"3":{},"4":{},"17":{},"19":{},"22":{},"23":{},"36":{},"37":{},"40":{},"41":{},"54":{},"56":{},"59":{},"60":{},"70":{},"73":{},"74":{},"77":{},"78":{},"88":{},"91":{},"92":{},"98":{},"99":{},"112":{},"113":{},"114":{},"115":{},"127":{}},"component":{}}],["produc",{"_index":2814,"title":{},"name":{},"text":{"131":{}},"component":{}}],["product",{"_index":2558,"title":{},"name":{},"text":{"124":{}},"component":{}}],["profile=(string)lc",{"_index":1928,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["program",{"_index":134,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"21":{},"22":{},"26":{},"39":{},"40":{},"44":{},"58":{},"59":{},"62":{},"76":{},"77":{},"80":{},"97":{},"98":{},"102":{},"124":{}},"component":{}}],["progress",{"_index":2893,"title":{},"name":{},"text":{"136":{}},"component":{}}],["project",{"_index":107,"title":{},"name":{},"text":{"1":{},"2":{},"20":{},"21":{},"38":{},"39":{},"57":{},"58":{},"75":{},"76":{},"93":{},"97":{},"118":{},"130":{},"135":{}},"component":{}}],["project’",{"_index":2369,"title":{},"name":{},"text":{"95":{}},"component":{}}],["prompt",{"_index":1059,"title":{},"name":{},"text":{"9":{},"17":{},"28":{},"36":{},"46":{},"54":{},"64":{},"73":{},"82":{},"91":{},"104":{},"112":{},"117":{}},"component":{}}],["proper",{"_index":451,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"115":{}},"component":{}}],["properg",{"_index":2579,"title":{},"name":{},"text":{"124":{}},"component":{}}],["properli",{"_index":633,"title":{},"name":{},"text":{"5":{},"12":{},"17":{},"24":{},"31":{},"36":{},"42":{},"49":{},"54":{},"67":{},"85":{},"100":{},"107":{},"112":{}},"component":{}}],["properti",{"_index":528,"title":{},"name":{},"text":{"4":{},"7":{},"15":{},"23":{},"26":{},"34":{},"41":{},"44":{},"52":{},"60":{},"62":{},"70":{},"78":{},"80":{},"88":{},"99":{},"102":{},"110":{}},"component":{}}],["proprietari",{"_index":651,"title":{"126-1":{}},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"126":{}},"component":{}}],["protocol",{"_index":122,"title":{"10":{},"29":{},"47":{},"65":{},"83":{},"105":{},"2-4":{},"21-4":{},"39-4":{},"58-4":{},"76-4":{},"97-4":{}},"name":{},"text":{"2":{},"7":{},"10":{},"13":{},"14":{},"21":{},"26":{},"29":{},"32":{},"33":{},"39":{},"44":{},"47":{},"50":{},"51":{},"58":{},"62":{},"65":{},"68":{},"69":{},"76":{},"80":{},"83":{},"86":{},"87":{},"97":{},"102":{},"105":{},"108":{},"109":{},"127":{}},"component":{}}],["protocol.hpp",{"_index":216,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["proton",{"_index":2134,"title":{"18-3":{},"55-3":{},"96-3":{}},"name":{},"text":{"18":{},"55":{},"96":{},"133":{}},"component":{}}],["proton_log=1",{"_index":2143,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"70":{},"88":{},"96":{}},"component":{}}],["prototyp",{"_index":466,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["provid",{"_index":57,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"7":{},"8":{},"20":{},"21":{},"22":{},"24":{},"26":{},"27":{},"38":{},"39":{},"40":{},"42":{},"44":{},"45":{},"57":{},"58":{},"59":{},"62":{},"63":{},"75":{},"76":{},"77":{},"80":{},"81":{},"93":{},"95":{},"97":{},"98":{},"100":{},"102":{},"103":{},"115":{},"120":{},"124":{},"126":{},"127":{},"131":{},"132":{},"135":{}},"component":{}}],["ps",{"_index":1368,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["ps5",{"_index":2117,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["public",{"_index":1067,"title":{},"name":{},"text":{"9":{},"10":{},"28":{},"29":{},"46":{},"47":{},"64":{},"65":{},"82":{},"83":{},"104":{},"105":{},"118":{}},"component":{}}],["pull",{"_index":2379,"title":{"132-1":{}},"name":{},"text":{"114":{},"119":{},"132":{}},"component":{}}],["puls",{"_index":2806,"title":{},"name":{},"text":{"131":{}},"component":{}}],["pulseaudio",{"_index":589,"title":{"115-2":{}},"name":{},"text":{"5":{},"15":{},"24":{},"34":{},"42":{},"52":{},"70":{},"88":{},"100":{},"110":{},"115":{},"120":{},"127":{},"135":{}},"component":{}}],["purpos",{"_index":86,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["push",{"_index":386,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"22":{},"23":{},"26":{},"40":{},"41":{},"44":{},"59":{},"60":{},"62":{},"77":{},"78":{},"80":{},"98":{},"99":{},"102":{},"119":{}},"component":{}}],["put",{"_index":274,"title":{"3-7":{},"22-7":{},"40-7":{},"59-7":{},"77-7":{},"98-7":{}},"name":{},"text":{"6":{},"16":{},"25":{},"35":{},"43":{},"53":{},"61":{},"71":{},"79":{},"89":{},"101":{},"111":{},"114":{},"116":{},"125":{},"133":{}},"component":{}}],["q",{"_index":1257,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"131":{}},"component":{}}],["qsv",{"_index":1857,"title":{},"name":{},"text":{"15":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["qsvencod",{"_index":2201,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["qtdemux",{"_index":1920,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["question",{"_index":931,"title":{},"name":{},"text":{"7":{},"9":{},"26":{},"28":{},"44":{},"46":{},"62":{},"64":{},"80":{},"82":{},"102":{},"104":{},"118":{},"133":{}},"component":{}}],["queue",{"_index":1899,"title":{},"name":{},"text":{"16":{},"19":{},"35":{},"37":{},"53":{},"56":{},"71":{},"74":{},"89":{},"92":{},"111":{},"113":{}},"component":{}}],["quick",{"_index":962,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["quickstart",{"_index":1964,"title":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"123-6":{}},"name":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["quicksync",{"_index":624,"title":{},"name":{},"text":{"5":{},"15":{},"24":{},"42":{},"52":{},"70":{},"88":{},"100":{},"110":{}},"component":{}}],["quiet",{"_index":2813,"title":{},"name":{},"text":{"131":{}},"component":{}}],["quit",{"_index":1056,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{},"117":{}},"component":{}}],["r",{"_index":1259,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"134":{}},"component":{}}],["r1",{"_index":1437,"title":{},"name":{},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"component":{}}],["r\\n",{"_index":1770,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["race",{"_index":152,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["random",{"_index":1429,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{}},"component":{}}],["randomli",{"_index":1073,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"70":{},"82":{},"88":{},"104":{}},"component":{}}],["rang",{"_index":307,"title":{},"name":{},"text":{"3":{},"4":{},"22":{},"23":{},"40":{},"41":{},"59":{},"60":{},"77":{},"78":{},"98":{},"99":{}},"component":{}}],["rare",{"_index":2712,"title":{},"name":{},"text":{"126":{}},"component":{}}],["raspberri",{"_index":2736,"title":{},"name":{},"text":{"127":{}},"component":{}}],["rate",{"_index":2449,"title":{},"name":{},"text":{"116":{}},"component":{}}],["rate=(int)44100",{"_index":1912,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["rational",{"_index":205,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["raw",{"_index":576,"title":{},"name":{},"text":{"5":{},"15":{},"16":{},"24":{},"35":{},"42":{},"52":{},"53":{},"70":{},"71":{},"88":{},"89":{},"100":{},"110":{},"111":{}},"component":{}}],["raw(memory:vamemori",{"_index":2208,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["rc",{"_index":2801,"title":{"131-4":{}},"name":{},"text":{"131":{}},"component":{}}],["rc3",{"_index":2791,"title":{},"name":{},"text":{"129":{}},"component":{}}],["re",{"_index":158,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"70":{},"76":{},"88":{},"97":{}},"component":{}}],["reach",{"_index":1095,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{},"133":{},"134":{}},"component":{}}],["react",{"_index":246,"title":{},"name":{},"text":{"2":{},"3":{},"21":{},"22":{},"39":{},"40":{},"59":{},"77":{},"97":{},"98":{}},"component":{}}],["read",{"_index":204,"title":{},"name":{},"text":{"2":{},"5":{},"6":{},"7":{},"13":{},"21":{},"24":{},"25":{},"26":{},"32":{},"39":{},"42":{},"43":{},"44":{},"50":{},"58":{},"61":{},"62":{},"68":{},"70":{},"76":{},"79":{},"80":{},"86":{},"88":{},"97":{},"100":{},"101":{},"102":{},"108":{},"115":{},"122":{},"125":{}},"component":{}}],["readabl",{"_index":127,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["readi",{"_index":884,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"121":{},"132":{}},"component":{}}],["real",{"_index":258,"title":{},"name":{},"text":{"2":{},"7":{},"17":{},"21":{},"26":{},"36":{},"39":{},"44":{},"54":{},"58":{},"62":{},"73":{},"76":{},"80":{},"91":{},"97":{},"102":{},"112":{},"115":{}},"component":{}}],["realli",{"_index":918,"title":{},"name":{},"text":{"7":{},"17":{},"26":{},"36":{},"44":{},"54":{},"62":{},"73":{},"80":{},"91":{},"102":{},"112":{},"125":{},"135":{},"136":{}},"component":{}}],["reason",{"_index":847,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"115":{},"136":{}},"component":{}}],["reboot",{"_index":2029,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"91":{},"112":{},"113":{}},"component":{}}],["receiv",{"_index":294,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"12":{},"13":{},"19":{},"22":{},"23":{},"26":{},"31":{},"32":{},"37":{},"40":{},"41":{},"44":{},"49":{},"50":{},"56":{},"59":{},"60":{},"62":{},"67":{},"68":{},"74":{},"77":{},"78":{},"80":{},"85":{},"86":{},"92":{},"98":{},"99":{},"102":{},"107":{},"108":{},"113":{}},"component":{}}],["recogn",{"_index":383,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["recognis",{"_index":2159,"title":{"19-4":{},"37-4":{},"56-4":{},"74-4":{},"92-4":{},"113-4":{}},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["recommend",{"_index":783,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{},"115":{},"124":{},"129":{},"133":{}},"component":{}}],["red",{"_index":2195,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["reed",{"_index":220,"title":{},"name":{},"text":{"2":{},"12":{},"13":{},"21":{},"31":{},"32":{},"39":{},"49":{},"50":{},"58":{},"67":{},"68":{},"76":{},"85":{},"86":{},"97":{},"107":{},"108":{}},"component":{}}],["reenignearch",{"_index":104,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["refer",{"_index":276,"title":{"3-8":{},"7-5":{},"22-8":{},"26-5":{},"40-8":{},"44-5":{},"59-8":{},"62-5":{},"77-8":{},"80-5":{},"98-8":{},"102-5":{}},"name":{},"text":{"6":{},"7":{},"11":{},"25":{},"26":{},"30":{},"43":{},"44":{},"48":{},"61":{},"62":{},"66":{},"79":{},"80":{},"84":{},"95":{},"101":{},"102":{},"106":{},"124":{}},"component":{}}],["region",{"_index":863,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["registri",{"_index":2497,"title":{},"name":{},"text":{"119":{}},"component":{}}],["reinstal",{"_index":2216,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["reject",{"_index":2207,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["rel",{"_index":930,"title":{"11-1":{},"30-1":{},"48-1":{},"66-1":{},"84-1":{},"106-1":{}},"name":{},"text":{"7":{},"11":{},"26":{},"30":{},"44":{},"48":{},"62":{},"66":{},"80":{},"84":{},"102":{},"106":{},"125":{}},"component":{}}],["relat",{"_index":2175,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"95":{},"113":{},"125":{},"133":{}},"component":{}}],["releas",{"_index":942,"title":{},"name":{},"text":{"7":{},"11":{},"26":{},"30":{},"44":{},"48":{},"62":{},"66":{},"80":{},"84":{},"102":{},"106":{},"114":{}},"component":{}}],["reli",{"_index":2748,"title":{},"name":{},"text":{"127":{}},"component":{}}],["reload",{"_index":2132,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["remain",{"_index":1034,"title":{},"name":{},"text":{"8":{},"13":{},"27":{},"32":{},"45":{},"50":{},"63":{},"68":{},"81":{},"86":{},"103":{},"108":{},"124":{}},"component":{}}],["remot",{"_index":19,"title":{"16-5":{},"35-5":{},"53-5":{},"71-5":{},"89-5":{},"111-5":{}},"name":{},"text":{"1":{},"7":{},"9":{},"11":{},"16":{},"20":{},"26":{},"28":{},"30":{},"35":{},"38":{},"44":{},"46":{},"48":{},"53":{},"57":{},"62":{},"64":{},"66":{},"71":{},"72":{},"75":{},"80":{},"82":{},"84":{},"89":{},"90":{},"93":{},"102":{},"104":{},"106":{},"111":{},"115":{},"120":{},"121":{}},"component":{}}],["remov",{"_index":854,"title":{},"name":{},"text":{"7":{},"15":{},"17":{},"26":{},"34":{},"36":{},"44":{},"52":{},"54":{},"62":{},"70":{},"73":{},"80":{},"88":{},"91":{},"102":{},"110":{},"112":{},"124":{},"135":{}},"component":{}}],["render",{"_index":850,"title":{"15-13":{},"34-14":{},"52-13":{},"70-10":{},"88-10":{},"110-13":{}},"name":{},"text":{"7":{},"15":{},"26":{},"34":{},"44":{},"52":{},"62":{},"70":{},"80":{},"88":{},"102":{},"110":{},"126":{},"133":{}},"component":{}}],["render_nod",{"_index":1845,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["renderd128",{"_index":1843,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{},"126":{}},"component":{}}],["renderd129",{"_index":1844,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["repetit",{"_index":2822,"title":{},"name":{},"text":{"131":{}},"component":{}}],["replac",{"_index":2090,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"95":{},"112":{},"121":{},"127":{},"131":{}},"component":{}}],["replic",{"_index":371,"title":{},"name":{},"text":{"3":{},"19":{},"22":{},"37":{},"40":{},"56":{},"59":{},"74":{},"77":{},"92":{},"98":{},"113":{},"124":{}},"component":{}}],["repo",{"_index":2380,"title":{},"name":{},"text":{"114":{},"121":{},"123":{},"127":{},"131":{},"132":{}},"component":{}}],["report",{"_index":2460,"title":{},"name":{},"text":{"118":{},"119":{},"131":{}},"component":{}}],["repositori",{"_index":2374,"title":{"114-6":{}},"name":{},"text":{"114":{}},"component":{}}],["repres",{"_index":1004,"title":{},"name":{},"text":{"8":{},"11":{},"14":{},"27":{},"30":{},"33":{},"45":{},"48":{},"51":{},"63":{},"66":{},"69":{},"81":{},"84":{},"87":{},"103":{},"106":{},"109":{},"125":{}},"component":{}}],["repurpos",{"_index":2395,"title":{},"name":{},"text":{"114":{}},"component":{}}],["request",{"_index":392,"title":{"13-11":{},"14-3":{},"32-11":{},"33-3":{},"50-11":{},"51-3":{},"68-11":{},"69-3":{},"86-11":{},"87-3":{},"108-11":{},"109-3":{}},"name":{},"text":{"3":{},"7":{},"9":{},"14":{},"22":{},"26":{},"28":{},"33":{},"40":{},"44":{},"46":{},"51":{},"59":{},"62":{},"64":{},"69":{},"77":{},"80":{},"82":{},"87":{},"98":{},"102":{},"104":{},"109":{},"114":{}},"component":{}}],["requir",{"_index":243,"title":{"125":{},"129":{},"123-2":{},"129-2":{}},"name":{"129":{}},"text":{"2":{},"3":{},"4":{},"6":{},"14":{},"17":{},"21":{},"22":{},"23":{},"25":{},"33":{},"36":{},"39":{},"40":{},"41":{},"43":{},"51":{},"54":{},"58":{},"59":{},"60":{},"61":{},"69":{},"73":{},"76":{},"77":{},"78":{},"79":{},"87":{},"91":{},"97":{},"98":{},"99":{},"101":{},"109":{},"112":{},"114":{},"115":{},"120":{},"122":{},"123":{},"124":{},"129":{},"131":{},"133":{},"134":{},"136":{}},"component":{}}],["required_packag",{"_index":2373,"title":{"114-5":{}},"name":{},"text":{"114":{}},"component":{}}],["resembl",{"_index":2129,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["reserv",{"_index":2000,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["resid",{"_index":1806,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["resolut",{"_index":2448,"title":{},"name":{},"text":{"116":{},"125":{}},"component":{}}],["resolution/fp",{"_index":42,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["resourc",{"_index":870,"title":{"95-11":{}},"name":{},"text":{"7":{},"17":{},"26":{},"36":{},"44":{},"54":{},"62":{},"80":{},"95":{},"102":{},"112":{}},"component":{}}],["respect",{"_index":1381,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"95":{},"106":{},"115":{}},"component":{}}],["respons",{"_index":390,"title":{"14-7":{},"33-7":{},"51-7":{},"69-7":{},"87-7":{},"109-7":{}},"name":{},"text":{"3":{},"9":{},"14":{},"22":{},"28":{},"33":{},"40":{},"46":{},"51":{},"59":{},"64":{},"69":{},"77":{},"82":{},"87":{},"98":{},"104":{},"109":{}},"component":{}}],["rest",{"_index":994,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["restart",{"_index":1986,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"116":{}},"component":{}}],["restrict",{"_index":602,"title":{},"name":{},"text":{"5":{},"17":{},"24":{},"36":{},"42":{},"54":{},"100":{},"112":{},"120":{}},"component":{}}],["result",{"_index":366,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"16":{},"22":{},"23":{},"24":{},"26":{},"35":{},"40":{},"41":{},"42":{},"44":{},"53":{},"59":{},"60":{},"62":{},"71":{},"77":{},"78":{},"80":{},"89":{},"98":{},"99":{},"100":{},"102":{},"111":{},"115":{}},"component":{}}],["retro",{"_index":2501,"title":{},"name":{},"text":{"120":{}},"component":{}}],["retroarch",{"_index":293,"title":{"134-4":{}},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"95":{},"98":{},"114":{},"120":{},"127":{},"130":{},"131":{}},"component":{}}],["retroarch.yml",{"_index":2398,"title":{},"name":{},"text":{"114":{}},"component":{}}],["retrofit",{"_index":543,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["return",{"_index":139,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"125":{}},"component":{}}],["revers",{"_index":456,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["revolv",{"_index":244,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"97":{}},"component":{}}],["rfc",{"_index":1433,"title":{},"name":{},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"component":{}}],["rgb",{"_index":967,"title":{"8-8":{},"27-8":{},"45-8":{},"63-8":{},"81-8":{},"103-8":{}},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["rgb_led",{"_index":1031,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["right",{"_index":291,"title":{},"name":{},"text":{"3":{},"11":{},"18":{},"22":{},"30":{},"40":{},"48":{},"55":{},"59":{},"66":{},"70":{},"77":{},"84":{},"88":{},"96":{},"98":{},"106":{},"117":{},"119":{},"124":{},"129":{},"136":{}},"component":{}}],["right_button",{"_index":1407,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["right_stick",{"_index":1404,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["rightalt",{"_index":1339,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["rightbrac",{"_index":1355,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["rightctrl",{"_index":1336,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["rightmeta",{"_index":1277,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["rightshift",{"_index":1333,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["ring",{"_index":2141,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"96":{}},"component":{}}],["rm",{"_index":2011,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["rmw",{"_index":1980,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"95":{},"112":{},"124":{}},"component":{}}],["roadmap",{"_index":2792,"title":{"130":{}},"name":{"130":{}},"text":{},"component":{}}],["rom",{"_index":2278,"title":{"95-3":{},"95-4":{},"95-6":{}},"name":{},"text":{"95":{}},"component":{}}],["roms/3do",{"_index":2288,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/amiga",{"_index":2289,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/amigacd32",{"_index":2290,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/arcad",{"_index":2291,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/atari2600",{"_index":2292,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/atari5200",{"_index":2293,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/atari7800",{"_index":2294,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/atarijaguar",{"_index":2295,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/atarijaguarcd",{"_index":2296,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/atarilynx",{"_index":2297,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/atarist",{"_index":2298,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/gb",{"_index":2299,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/gba",{"_index":2300,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/gbc",{"_index":2301,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/gc",{"_index":2302,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/genesi",{"_index":2303,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/megacd",{"_index":2304,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/model2",{"_index":2305,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/model3",{"_index":2306,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/n",{"_index":2310,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/n64",{"_index":2307,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/naomi",{"_index":2308,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/neogeo",{"_index":2309,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/ngp",{"_index":2311,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/ngpc",{"_index":2312,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/ps2",{"_index":2313,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/ps3",{"_index":2314,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/psp",{"_index":2315,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/psx",{"_index":2316,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/saturn",{"_index":2317,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/sega32x",{"_index":2318,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/segacd",{"_index":2319,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/sn",{"_index":2320,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/snes_widescreen",{"_index":2321,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/switch",{"_index":2322,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/virtualboy",{"_index":2323,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/wii",{"_index":2324,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/wiiu",{"_index":2325,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/wonderswan",{"_index":2326,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/wonderswancolor",{"_index":2327,"title":{},"name":{},"text":{"95":{}},"component":{}}],["roms/xbox",{"_index":2328,"title":{},"name":{},"text":{"95":{}},"component":{}}],["room",{"_index":2875,"title":{},"name":{},"text":{"135":{}},"component":{}}],["root",{"_index":475,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"112":{},"116":{},"123":{},"126":{},"129":{}},"component":{}}],["roughli",{"_index":438,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["rout",{"_index":843,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["rpcs3",{"_index":2346,"title":{},"name":{},"text":{"95":{}},"component":{}}],["rt",{"_index":1380,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["rtp",{"_index":492,"title":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{},"12-3":{},"13-3":{},"31-3":{},"32-3":{},"49-3":{},"50-3":{},"67-3":{},"68-3":{},"85-3":{},"86-3":{},"107-3":{},"108-3":{}},"name":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{}},"text":{"4":{},"5":{},"10":{},"12":{},"13":{},"23":{},"24":{},"29":{},"31":{},"32":{},"41":{},"42":{},"47":{},"49":{},"50":{},"60":{},"65":{},"67":{},"68":{},"78":{},"83":{},"85":{},"86":{},"99":{},"100":{},"105":{},"107":{},"108":{}},"component":{}}],["rtp_header_s",{"_index":1456,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["rtpmoonlightpay_audio",{"_index":540,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["rtpmoonlightpay_video",{"_index":539,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["rtsp",{"_index":226,"title":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{},"14-2":{},"33-2":{},"51-2":{},"69-2":{},"87-2":{},"109-2":{}},"name":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"text":{"2":{},"10":{},"12":{},"13":{},"14":{},"17":{},"19":{},"21":{},"29":{},"31":{},"32":{},"33":{},"36":{},"37":{},"39":{},"47":{},"49":{},"50":{},"51":{},"54":{},"56":{},"58":{},"65":{},"67":{},"68":{},"69":{},"73":{},"74":{},"76":{},"83":{},"85":{},"86":{},"87":{},"91":{},"92":{},"97":{},"105":{},"107":{},"108":{},"109":{},"112":{},"113":{}},"component":{}}],["rtsp/1.0",{"_index":1760,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["rtsp://192.168.1.100:48010",{"_index":1759,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["rule",{"_index":304,"title":{},"name":{},"text":{"3":{},"5":{},"17":{},"22":{},"24":{},"36":{},"40":{},"42":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"100":{},"112":{}},"component":{}}],["rumbl",{"_index":965,"title":{"8-5":{},"8-6":{},"27-5":{},"27-6":{},"45-5":{},"45-6":{},"63-5":{},"63-6":{},"81-5":{},"81-6":{},"103-5":{},"103-6":{}},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"45":{},"48":{},"63":{},"66":{},"81":{},"84":{},"103":{},"106":{}},"component":{}}],["rumble_data",{"_index":1025,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["rumble_trigg",{"_index":1027,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["run",{"_index":66,"title":{"131":{},"132":{},"5-5":{},"24-5":{},"42-5":{},"100-5":{},"131-4":{},"133-3":{}},"name":{"131":{},"132":{}},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"28":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"42":{},"43":{},"44":{},"45":{},"46":{},"52":{},"54":{},"56":{},"57":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"70":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"79":{},"80":{},"81":{},"82":{},"88":{},"90":{},"91":{},"92":{},"93":{},"95":{},"97":{},"98":{},"100":{},"101":{},"102":{},"103":{},"104":{},"110":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{},"118":{},"119":{},"120":{},"121":{},"122":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{}},"component":{}}],["run/udev/control",{"_index":426,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["run/udev/data",{"_index":434,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["run/udev:/run/udev:ro",{"_index":2246,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["run/udev:/run/udev:rw",{"_index":1979,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["run_cmd",{"_index":2241,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["run_gamescope=tru",{"_index":2247,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["run_sway=1",{"_index":2334,"title":{},"name":{},"text":{"95":{}},"component":{}}],["run_sway=1\",\"gow_required_devices=/dev/input/ev",{"_index":2587,"title":{},"name":{},"text":{"124":{}},"component":{}}],["run_sway=tru",{"_index":2144,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"96":{}},"component":{}}],["runner",{"_index":1790,"title":{"15-8":{},"34-8":{},"52-8":{},"70-4":{},"88-4":{},"110-8":{}},"name":{},"text":{"70":{},"88":{},"124":{}},"component":{}}],["runtim",{"_index":1998,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"70":{},"88":{},"112":{},"126":{}},"component":{}}],["rust",{"_index":574,"title":{},"name":{},"text":{"5":{},"6":{},"15":{},"24":{},"25":{},"34":{},"42":{},"43":{},"52":{},"61":{},"70":{},"79":{},"88":{},"100":{},"101":{},"110":{}},"component":{}}],["rust_backtrac",{"_index":1829,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["rw",{"_index":2727,"title":{},"name":{},"text":{"126":{}},"component":{}}],["s",{"_index":1261,"title":{},"name":{},"text":{"11":{},"12":{},"30":{},"31":{},"48":{},"49":{},"66":{},"67":{},"84":{},"85":{},"106":{},"107":{},"131":{}},"component":{}}],["sacrific",{"_index":829,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["sad",{"_index":901,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["safe",{"_index":612,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["salt",{"_index":1058,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["same",{"_index":372,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"11":{},"12":{},"15":{},"17":{},"19":{},"22":{},"23":{},"24":{},"30":{},"31":{},"34":{},"36":{},"37":{},"40":{},"41":{},"42":{},"48":{},"49":{},"52":{},"54":{},"56":{},"59":{},"60":{},"66":{},"67":{},"70":{},"73":{},"74":{},"77":{},"78":{},"84":{},"85":{},"88":{},"91":{},"92":{},"98":{},"99":{},"100":{},"106":{},"107":{},"110":{},"112":{},"113":{},"115":{},"116":{},"119":{},"120":{},"124":{},"125":{},"127":{},"131":{},"135":{}},"component":{}}],["sampl",{"_index":1890,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["sandbox",{"_index":2757,"title":{},"name":{},"text":{"127":{}},"component":{}}],["save",{"_index":1043,"title":{},"name":{},"text":{"8":{},"13":{},"27":{},"32":{},"45":{},"50":{},"63":{},"68":{},"70":{},"81":{},"86":{},"88":{},"103":{},"108":{},"124":{}},"component":{}}],["sbin/modprob",{"_index":2051,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["scale",{"_index":830,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["scene",{"_index":840,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["schema",{"_index":1035,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["scope",{"_index":921,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"125":{}},"component":{}}],["scratch",{"_index":654,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["screen",{"_index":1882,"title":{"19-1":{},"37-1":{},"56-1":{},"74-1":{},"92-1":{},"113-1":{},"125-5":{}},"name":{},"text":{"16":{},"17":{},"18":{},"19":{},"35":{},"36":{},"37":{},"53":{},"54":{},"55":{},"56":{},"71":{},"73":{},"74":{},"89":{},"91":{},"92":{},"96":{},"111":{},"112":{},"113":{},"120":{},"125":{},"134":{}},"component":{}}],["screen.conf",{"_index":2678,"title":{},"name":{},"text":{"125":{}},"component":{}}],["screen.conf:/usr/share/x11/xorg.conf.d/01",{"_index":2695,"title":{},"name":{},"text":{"125":{}},"component":{}}],["screen.conf:ro",{"_index":2696,"title":{},"name":{},"text":{"125":{}},"component":{}}],["screen0",{"_index":2679,"title":{},"name":{},"text":{"125":{}},"component":{}}],["screen=tru",{"_index":1884,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["script",{"_index":556,"title":{"114-3":{},"124-14":{}},"name":{},"text":{"4":{},"17":{},"23":{},"36":{},"41":{},"54":{},"60":{},"73":{},"78":{},"91":{},"99":{},"112":{},"114":{},"119":{},"121":{},"124":{},"126":{},"127":{},"128":{},"131":{},"132":{},"135":{}},"component":{}}],["scripts/startup",{"_index":2548,"title":{"124-11":{}},"name":{},"text":{"124":{}},"component":{}}],["scripts/supertux",{"_index":2646,"title":{},"name":{},"text":{"124":{}},"component":{}}],["scroll",{"_index":1111,"title":{"11-5":{},"11-6":{},"30-5":{},"30-6":{},"48-5":{},"48-6":{},"66-5":{},"66-6":{},"84-5":{},"84-6":{},"106-5":{},"106-6":{}},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["scrolllock",{"_index":1330,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["seat",{"_index":605,"title":{},"name":{},"text":{"5":{},"17":{},"24":{},"36":{},"42":{},"54":{},"73":{},"91":{},"100":{},"112":{}},"component":{}}],["seat1",{"_index":2125,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["seat9",{"_index":2122,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["second",{"_index":1773,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["secret",{"_index":1072,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["section",{"_index":1435,"title":{},"name":{},"text":{"12":{},"14":{},"31":{},"33":{},"49":{},"51":{},"67":{},"69":{},"85":{},"87":{},"95":{},"107":{},"109":{},"115":{},"119":{},"125":{},"128":{}},"component":{}}],["secur",{"_index":1051,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{},"120":{}},"component":{}}],["see",{"_index":606,"title":{"133-1":{}},"name":{},"text":{"5":{},"9":{},"11":{},"13":{},"15":{},"16":{},"17":{},"18":{},"19":{},"24":{},"28":{},"30":{},"32":{},"34":{},"35":{},"36":{},"37":{},"42":{},"46":{},"48":{},"50":{},"52":{},"53":{},"54":{},"55":{},"56":{},"64":{},"66":{},"68":{},"70":{},"71":{},"73":{},"74":{},"82":{},"84":{},"86":{},"88":{},"89":{},"91":{},"92":{},"94":{},"96":{},"100":{},"104":{},"106":{},"108":{},"110":{},"111":{},"112":{},"113":{},"117":{},"120":{},"123":{},"126":{},"129":{},"131":{},"132":{},"134":{}},"component":{}}],["seem",{"_index":2009,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"135":{}},"component":{}}],["seen",{"_index":256,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["sei",{"_index":1747,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["select",{"_index":557,"title":{},"name":{},"text":{"4":{},"7":{},"11":{},"15":{},"19":{},"23":{},"26":{},"30":{},"34":{},"37":{},"41":{},"44":{},"48":{},"52":{},"56":{},"60":{},"62":{},"66":{},"70":{},"74":{},"78":{},"80":{},"84":{},"88":{},"92":{},"95":{},"99":{},"102":{},"106":{},"110":{},"113":{},"124":{},"127":{},"134":{}},"component":{}}],["self",{"_index":2556,"title":{},"name":{},"text":{"124":{}},"component":{}}],["semicolon",{"_index":1341,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["send",{"_index":396,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"30":{},"31":{},"32":{},"40":{},"41":{},"42":{},"44":{},"45":{},"46":{},"48":{},"49":{},"50":{},"59":{},"60":{},"62":{},"63":{},"64":{},"66":{},"67":{},"68":{},"77":{},"78":{},"80":{},"81":{},"82":{},"84":{},"85":{},"86":{},"98":{},"99":{},"100":{},"102":{},"103":{},"104":{},"106":{},"107":{},"108":{}},"component":{}}],["sender",{"_index":421,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["sensit",{"_index":2835,"title":{},"name":{},"text":{"133":{}},"component":{}}],["sensor",{"_index":2118,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["sent",{"_index":368,"title":{},"name":{},"text":{"3":{},"8":{},"9":{},"11":{},"12":{},"13":{},"22":{},"27":{},"28":{},"30":{},"31":{},"32":{},"40":{},"45":{},"46":{},"48":{},"49":{},"50":{},"59":{},"63":{},"64":{},"66":{},"67":{},"68":{},"77":{},"81":{},"82":{},"84":{},"85":{},"86":{},"98":{},"103":{},"104":{},"106":{},"107":{},"108":{}},"component":{}}],["separ",{"_index":169,"title":{},"name":{},"text":{"2":{},"6":{},"12":{},"13":{},"14":{},"21":{},"25":{},"31":{},"32":{},"33":{},"39":{},"43":{},"49":{},"50":{},"51":{},"58":{},"61":{},"67":{},"68":{},"69":{},"70":{},"72":{},"76":{},"79":{},"85":{},"86":{},"87":{},"88":{},"90":{},"95":{},"97":{},"101":{},"107":{},"108":{},"109":{},"125":{},"135":{}},"component":{}}],["seq",{"_index":995,"title":{},"name":{},"text":{"8":{},"17":{},"27":{},"36":{},"45":{},"54":{},"63":{},"73":{},"81":{},"91":{},"103":{},"112":{}},"component":{}}],["sequenc",{"_index":999,"title":{},"name":{},"text":{"8":{},"13":{},"14":{},"27":{},"32":{},"33":{},"45":{},"50":{},"51":{},"63":{},"68":{},"69":{},"81":{},"86":{},"87":{},"103":{},"108":{},"109":{}},"component":{}}],["server",{"_index":13,"title":{"2-5":{},"8-4":{},"21-5":{},"27-4":{},"39-5":{},"45-4":{},"58-5":{},"63-4":{},"76-5":{},"81-4":{},"97-5":{},"103-4":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{},"17":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"28":{},"36":{},"38":{},"39":{},"40":{},"42":{},"43":{},"44":{},"45":{},"46":{},"54":{},"57":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"72":{},"73":{},"75":{},"76":{},"77":{},"79":{},"80":{},"81":{},"82":{},"90":{},"91":{},"93":{},"97":{},"98":{},"100":{},"101":{},"102":{},"103":{},"104":{},"112":{},"115":{},"117":{},"118":{},"120":{},"125":{},"127":{},"131":{},"135":{},"136":{}},"component":{}}],["server/gst",{"_index":635,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["server0",{"_index":791,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["server_challeng",{"_index":1074,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["server_secret",{"_index":1081,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["serverchallengeresp",{"_index":1076,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["servic",{"_index":1982,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"125":{},"131":{},"135":{}},"component":{}}],["session",{"_index":259,"title":{},"name":{},"text":{"2":{},"14":{},"15":{},"17":{},"19":{},"21":{},"33":{},"34":{},"36":{},"37":{},"39":{},"51":{},"52":{},"54":{},"56":{},"58":{},"69":{},"73":{},"74":{},"76":{},"87":{},"91":{},"92":{},"97":{},"109":{},"110":{},"112":{},"113":{}},"component":{}}],["set",{"_index":78,"title":{"95-4":{},"95-6":{}},"name":{},"text":{"1":{},"4":{},"5":{},"8":{},"10":{},"11":{},"13":{},"15":{},"17":{},"20":{},"23":{},"24":{},"27":{},"29":{},"30":{},"32":{},"34":{},"36":{},"38":{},"41":{},"42":{},"45":{},"47":{},"48":{},"50":{},"52":{},"54":{},"57":{},"60":{},"63":{},"65":{},"66":{},"68":{},"70":{},"73":{},"75":{},"78":{},"81":{},"83":{},"84":{},"86":{},"88":{},"91":{},"93":{},"95":{},"99":{},"100":{},"103":{},"105":{},"106":{},"108":{},"110":{},"112":{},"114":{},"116":{},"120":{},"123":{},"124":{},"125":{},"126":{},"128":{},"129":{},"131":{},"132":{},"133":{}},"component":{}}],["setup",{"_index":561,"title":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"name":{},"text":{"4":{},"5":{},"6":{},"14":{},"23":{},"24":{},"25":{},"33":{},"41":{},"42":{},"43":{},"51":{},"60":{},"61":{},"69":{},"70":{},"78":{},"79":{},"87":{},"88":{},"99":{},"100":{},"101":{},"109":{},"125":{},"136":{}},"component":{}}],["sever",{"_index":2339,"title":{},"name":{},"text":{"95":{},"125":{},"131":{}},"component":{}}],["sh",{"_index":317,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"70":{},"73":{},"77":{},"88":{},"91":{},"98":{},"112":{}},"component":{}}],["sha256",{"_index":1069,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{},"119":{}},"component":{}}],["sha256(server_challeng",{"_index":1088,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["sha256:6b8555260ed07c7ed466e0b821922a3cedf4ee27b9d6b8fea9d6aa2995b75f61",{"_index":2481,"title":{},"name":{},"text":{"119":{}},"component":{}}],["shape",{"_index":495,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["share",{"_index":16,"title":{"15-3":{},"34-3":{},"52-3":{},"110-3":{}},"name":{},"text":{"1":{},"2":{},"7":{},"9":{},"15":{},"16":{},"20":{},"21":{},"26":{},"28":{},"34":{},"35":{},"38":{},"39":{},"44":{},"46":{},"52":{},"53":{},"57":{},"58":{},"62":{},"64":{},"71":{},"72":{},"75":{},"76":{},"80":{},"82":{},"89":{},"90":{},"93":{},"97":{},"102":{},"104":{},"110":{},"111":{},"115":{},"116":{},"118":{},"124":{}},"component":{}}],["shareabl",{"_index":852,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["sheet",{"_index":1879,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["shift",{"_index":2156,"title":{},"name":{},"text":{"18":{},"55":{},"96":{}},"component":{}}],["shine",{"_index":2882,"title":{},"name":{},"text":{"135":{}},"component":{}}],["ship",{"_index":2780,"title":{},"name":{},"text":{"129":{}},"component":{}}],["shm",{"_index":862,"title":{},"name":{},"text":{"7":{},"16":{},"26":{},"35":{},"44":{},"53":{},"62":{},"71":{},"80":{},"89":{},"102":{},"111":{},"133":{}},"component":{}}],["shmsink",{"_index":1887,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["shmsrc",{"_index":1888,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["short",{"_index":989,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["shortcut",{"_index":2594,"title":{},"name":{},"text":{"124":{}},"component":{}}],["show",{"_index":1793,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{},"125":{}},"component":{}}],["shown",{"_index":2240,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["side",{"_index":129,"title":{},"name":{},"text":{"2":{},"7":{},"11":{},"16":{},"21":{},"26":{},"30":{},"35":{},"39":{},"44":{},"48":{},"53":{},"58":{},"62":{},"66":{},"71":{},"76":{},"80":{},"84":{},"89":{},"97":{},"102":{},"106":{},"111":{},"117":{},"123":{}},"component":{}}],["sign",{"_index":1079,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["signal",{"_index":1041,"title":{},"name":{},"text":{"8":{},"12":{},"19":{},"27":{},"31":{},"37":{},"45":{},"49":{},"56":{},"63":{},"67":{},"74":{},"81":{},"85":{},"92":{},"103":{},"107":{},"113":{}},"component":{}}],["signatur",{"_index":1071,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["signifi",{"_index":2821,"title":{},"name":{},"text":{"131":{}},"component":{}}],["significantli",{"_index":906,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"125":{},"126":{}},"component":{}}],["similar",{"_index":2282,"title":{},"name":{},"text":{"95":{}},"component":{}}],["simpl",{"_index":191,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"7":{},"8":{},"17":{},"21":{},"23":{},"24":{},"26":{},"27":{},"36":{},"39":{},"41":{},"42":{},"44":{},"45":{},"54":{},"58":{},"60":{},"62":{},"63":{},"73":{},"76":{},"78":{},"80":{},"81":{},"91":{},"97":{},"99":{},"100":{},"102":{},"103":{},"112":{},"115":{},"116":{},"121":{},"122":{},"127":{},"131":{}},"component":{}}],["simpli",{"_index":2385,"title":{},"name":{},"text":{"114":{},"125":{},"135":{}},"component":{}}],["simplifi",{"_index":848,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["simultan",{"_index":50,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["singl",{"_index":17,"title":{},"name":{},"text":{"1":{},"5":{},"7":{},"15":{},"17":{},"20":{},"24":{},"26":{},"34":{},"36":{},"38":{},"42":{},"44":{},"52":{},"54":{},"57":{},"62":{},"70":{},"72":{},"73":{},"75":{},"80":{},"88":{},"90":{},"91":{},"93":{},"100":{},"102":{},"110":{},"112":{},"115":{},"120":{},"122":{},"124":{}},"component":{}}],["singular",{"_index":922,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["sink",{"_index":502,"title":{},"name":{},"text":{"4":{},"5":{},"23":{},"24":{},"41":{},"42":{},"60":{},"78":{},"99":{},"100":{}},"component":{}}],["sink_0::alpha=1.0",{"_index":1951,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["sink_0::xpos=1280",{"_index":1953,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["sink_0::zorder=2",{"_index":1952,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["sink_1::alpha=1.0",{"_index":1954,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["sink_1::zorder=1",{"_index":1955,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["sit",{"_index":498,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["site=(string)mpeg2",{"_index":2213,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["site={color_rang",{"_index":1961,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["situaion",{"_index":2654,"title":{},"name":{},"text":{"125":{}},"component":{}}],["situat",{"_index":2660,"title":{},"name":{},"text":{"125":{},"126":{},"128":{},"135":{}},"component":{}}],["size",{"_index":511,"title":{},"name":{},"text":{"4":{},"8":{},"11":{},"13":{},"14":{},"23":{},"27":{},"30":{},"32":{},"33":{},"41":{},"45":{},"48":{},"50":{},"51":{},"60":{},"63":{},"66":{},"68":{},"69":{},"78":{},"81":{},"84":{},"86":{},"87":{},"99":{},"103":{},"106":{},"108":{},"109":{},"133":{}},"component":{}}],["size=10000000",{"_index":1901,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["ski",{"_index":2523,"title":{},"name":{},"text":{"120":{}},"component":{}}],["skip",{"_index":2119,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"124":{}},"component":{}}],["skype",{"_index":2522,"title":{},"name":{},"text":{"120":{}},"component":{}}],["slam",{"_index":2662,"title":{},"name":{},"text":{"125":{}},"component":{}}],["slash",{"_index":1302,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["sleep",{"_index":1279,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"70":{},"84":{},"88":{},"106":{}},"component":{}}],["sleepybishop/nanor",{"_index":225,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["slice",{"_index":1742,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["slightli",{"_index":1376,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["slow",{"_index":2849,"title":{"134-1":{}},"name":{},"text":{"136":{}},"component":{}}],["slug",{"_index":2636,"title":{},"name":{},"text":{"124":{}},"component":{}}],["small",{"_index":591,"title":{},"name":{},"text":{"5":{},"7":{},"24":{},"26":{},"42":{},"44":{},"62":{},"80":{},"100":{},"102":{}},"component":{}}],["smaller",{"_index":2734,"title":{},"name":{},"text":{"127":{}},"component":{}}],["smart",{"_index":2765,"title":{},"name":{},"text":{"128":{}},"component":{}}],["smi",{"_index":1990,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{},"126":{}},"component":{}}],["smithay",{"_index":573,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["snippet",{"_index":2698,"title":{},"name":{},"text":{"125":{}},"component":{}}],["socket",{"_index":181,"title":{},"name":{},"text":{"2":{},"3":{},"15":{},"16":{},"21":{},"22":{},"34":{},"35":{},"39":{},"40":{},"52":{},"53":{},"58":{},"59":{},"70":{},"71":{},"76":{},"77":{},"88":{},"89":{},"97":{},"98":{},"110":{},"111":{},"115":{},"116":{},"120":{}},"component":{}}],["sof",{"_index":1465,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["softwar",{"_index":937,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"115":{},"124":{},"127":{},"129":{}},"component":{}}],["solomon",{"_index":221,"title":{},"name":{},"text":{"2":{},"12":{},"13":{},"21":{},"31":{},"32":{},"39":{},"49":{},"50":{},"58":{},"67":{},"68":{},"76":{},"85":{},"86":{},"97":{},"107":{},"108":{}},"component":{}}],["solut",{"_index":87,"title":{},"name":{},"text":{"1":{},"5":{},"20":{},"24":{},"38":{},"42":{},"57":{},"75":{},"93":{},"100":{},"120":{},"134":{},"135":{},"136":{}},"component":{}}],["solv",{"_index":2854,"title":{},"name":{},"text":{"134":{}},"component":{}}],["solvabl",{"_index":2889,"title":{},"name":{},"text":{"136":{}},"component":{}}],["someth",{"_index":448,"title":{"120-1":{},"133-4":{}},"name":{},"text":{"3":{},"19":{},"22":{},"37":{},"40":{},"56":{},"59":{},"74":{},"77":{},"92":{},"98":{},"113":{},"125":{},"127":{},"129":{},"134":{}},"component":{}}],["somewher",{"_index":2677,"title":{},"name":{},"text":{"125":{},"128":{}},"component":{}}],["sound",{"_index":271,"title":{"3-2":{},"22-2":{},"40-2":{},"59-2":{},"77-2":{},"98-2":{}},"name":{},"text":{"115":{},"125":{},"127":{}},"component":{}}],["sourc",{"_index":11,"title":{},"name":{},"text":{"1":{},"7":{},"15":{},"16":{},"20":{},"26":{},"35":{},"38":{},"44":{},"52":{},"53":{},"57":{},"62":{},"70":{},"71":{},"72":{},"75":{},"80":{},"88":{},"89":{},"90":{},"93":{},"102":{},"110":{},"111":{},"114":{},"120":{},"124":{},"126":{},"127":{}},"component":{}}],["source=nvidia",{"_index":2012,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["sp",{"_index":1749,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["space",{"_index":410,"title":{},"name":{},"text":{"3":{},"11":{},"22":{},"30":{},"40":{},"48":{},"59":{},"66":{},"77":{},"84":{},"98":{},"106":{},"124":{},"125":{}},"component":{}}],["spacescop",{"_index":1893,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["spec",{"_index":969,"title":{},"name":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"component":{}}],["special",{"_index":611,"title":{},"name":{},"text":{"5":{},"7":{},"24":{},"26":{},"42":{},"44":{},"62":{},"80":{},"100":{},"102":{},"120":{}},"component":{}}],["special_flag",{"_index":1412,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["specif",{"_index":82,"title":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{},"14-2":{},"33-2":{},"51-2":{},"69-2":{},"87-2":{},"109-2":{},"129-2":{}},"name":{},"text":{"1":{},"2":{},"4":{},"5":{},"7":{},"11":{},"13":{},"14":{},"17":{},"20":{},"21":{},"23":{},"24":{},"26":{},"30":{},"32":{},"33":{},"36":{},"38":{},"39":{},"41":{},"42":{},"44":{},"48":{},"50":{},"51":{},"54":{},"57":{},"58":{},"60":{},"62":{},"66":{},"68":{},"69":{},"70":{},"73":{},"75":{},"76":{},"78":{},"80":{},"84":{},"86":{},"87":{},"88":{},"91":{},"93":{},"95":{},"97":{},"99":{},"100":{},"102":{},"106":{},"108":{},"109":{},"112":{},"114":{},"115":{},"116":{},"119":{},"124":{},"126":{},"133":{}},"component":{}}],["specifi",{"_index":1107,"title":{},"name":{},"text":{"10":{},"11":{},"13":{},"14":{},"29":{},"30":{},"32":{},"33":{},"47":{},"48":{},"50":{},"51":{},"65":{},"66":{},"68":{},"69":{},"83":{},"84":{},"86":{},"87":{},"105":{},"106":{},"108":{},"109":{},"117":{},"119":{},"120":{},"128":{},"131":{}},"component":{}}],["speed",{"_index":913,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["spin",{"_index":1965,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["splash",{"_index":2219,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["split",{"_index":507,"title":{},"name":{},"text":{"4":{},"5":{},"23":{},"24":{},"41":{},"42":{},"60":{},"78":{},"99":{},"100":{}},"component":{}}],["spotifi",{"_index":2520,"title":{},"name":{},"text":{"120":{}},"component":{}}],["src",{"_index":2634,"title":{},"name":{},"text":{"124":{}},"component":{}}],["src/core",{"_index":118,"title":{"2-2":{},"21-2":{},"39-2":{},"58-2":{},"76-2":{},"97-2":{}},"name":{},"text":{},"component":{}}],["src/fake",{"_index":119,"title":{"2-3":{},"21-3":{},"39-3":{},"58-3":{},"76-3":{},"97-3":{}},"name":{},"text":{},"component":{}}],["src/moonlight",{"_index":121,"title":{"2-4":{},"2-5":{},"21-4":{},"21-5":{},"39-4":{},"39-5":{},"58-4":{},"58-5":{},"76-4":{},"76-5":{},"97-4":{},"97-5":{}},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["ssl",{"_index":1100,"title":{},"name":{},"text":{"10":{},"29":{},"47":{},"65":{},"83":{},"105":{}},"component":{}}],["stabl",{"_index":2816,"title":{},"name":{},"text":{"131":{}},"component":{}}],["stackoverflow.com",{"_index":1477,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["stacktrac",{"_index":790,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["stage",{"_index":939,"title":{},"name":{},"text":{"7":{},"9":{},"26":{},"28":{},"44":{},"46":{},"62":{},"64":{},"80":{},"82":{},"102":{},"104":{},"124":{}},"component":{}}],["standalon",{"_index":201,"title":{},"name":{},"text":{"2":{},"5":{},"21":{},"24":{},"39":{},"42":{},"97":{},"100":{}},"component":{}}],["standard",{"_index":2730,"title":{},"name":{},"text":{"126":{}},"component":{}}],["stargaz",{"_index":106,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["start",{"_index":554,"title":{"95-2":{}},"name":{},"text":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"14":{},"15":{},"17":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"32":{},"33":{},"34":{},"36":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"50":{},"51":{},"52":{},"54":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"68":{},"69":{},"70":{},"72":{},"73":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"88":{},"90":{},"91":{},"94":{},"95":{},"99":{},"100":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"108":{},"109":{},"110":{},"112":{},"114":{},"123":{},"124":{},"125":{},"127":{},"128":{},"134":{}},"component":{}}],["start/stop",{"_index":2800,"title":{},"name":{},"text":{"130":{}},"component":{}}],["start_a",{"_index":1005,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["start_b",{"_index":1007,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["start_virtual_compositor",{"_index":2142,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"70":{},"88":{},"95":{},"96":{},"124":{}},"component":{}}],["starting/upd",{"_index":2847,"title":{},"name":{},"text":{"133":{}},"component":{}}],["startup",{"_index":2228,"title":{"124-17":{}},"name":{},"text":{"70":{},"88":{},"124":{}},"component":{}}],["startup.sh",{"_index":2386,"title":{},"name":{},"text":{"114":{},"124":{}},"component":{}}],["stat",{"_index":2150,"title":{},"name":{},"text":{"18":{},"55":{},"96":{},"134":{}},"component":{}}],["state",{"_index":883,"title":{"116-1":{}},"name":{},"text":{"7":{},"15":{},"26":{},"34":{},"44":{},"52":{},"62":{},"70":{},"80":{},"88":{},"102":{},"110":{},"135":{}},"component":{}}],["stateless",{"_index":168,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["statu",{"_index":1784,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{},"136":{}},"component":{}}],["steam",{"_index":583,"title":{"18":{},"55":{},"96":{},"133":{},"15-15":{},"18-1":{},"18-3":{},"34-15":{},"52-15":{},"55-1":{},"55-3":{},"96-1":{},"96-3":{},"110-15":{},"133-1":{},"133-2":{}},"name":{"18":{},"55":{},"96":{},"133":{}},"text":{"5":{},"8":{},"15":{},"18":{},"24":{},"27":{},"34":{},"42":{},"45":{},"52":{},"55":{},"63":{},"70":{},"81":{},"88":{},"94":{},"96":{},"100":{},"103":{},"120":{},"122":{},"127":{},"130":{},"131":{},"133":{}},"component":{}}],["steam.adoc",{"_index":2371,"title":{},"name":{},"text":{"110":{}},"component":{}}],["steam_startup_flags=steam://rungameid/1245620",{"_index":2146,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"96":{}},"component":{}}],["steamid",{"_index":2637,"title":{},"name":{},"text":{"124":{}},"component":{}}],["steam’",{"_index":2832,"title":{},"name":{},"text":{"133":{}},"component":{}}],["step",{"_index":375,"title":{"117-1":{},"123-7":{},"124-4":{},"124-5":{},"124-6":{},"124-7":{}},"name":{},"text":{"3":{},"7":{},"9":{},"19":{},"22":{},"26":{},"28":{},"37":{},"40":{},"44":{},"46":{},"56":{},"59":{},"62":{},"64":{},"77":{},"80":{},"82":{},"94":{},"98":{},"102":{},"104":{},"113":{},"117":{},"119":{},"125":{},"129":{}},"component":{}}],["stereo",{"_index":1441,"title":{},"name":{},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"component":{}}],["stick",{"_index":1383,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["still",{"_index":320,"title":{},"name":{},"text":{"3":{},"7":{},"18":{},"22":{},"26":{},"40":{},"44":{},"55":{},"59":{},"62":{},"77":{},"80":{},"96":{},"98":{},"102":{},"115":{},"125":{},"127":{},"131":{},"134":{},"135":{},"136":{}},"component":{}}],["stop",{"_index":1814,"title":{},"name":{},"text":{"15":{},"17":{},"34":{},"36":{},"52":{},"54":{},"70":{},"72":{},"73":{},"88":{},"90":{},"91":{},"110":{},"112":{},"116":{}},"component":{}}],["storag",{"_index":2267,"title":{},"name":{},"text":{"72":{},"90":{},"124":{}},"component":{}}],["store",{"_index":1066,"title":{"15-2":{},"34-2":{},"52-2":{},"110-2":{}},"name":{},"text":{"9":{},"15":{},"28":{},"34":{},"46":{},"52":{},"64":{},"70":{},"82":{},"88":{},"104":{},"110":{},"116":{},"124":{},"127":{}},"component":{}}],["straight",{"_index":834,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["straightforward",{"_index":2375,"title":{},"name":{},"text":{"114":{},"127":{}},"component":{}}],["stream",{"_index":12,"title":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{},"5-6":{},"16-3":{},"16-5":{},"16-6":{},"24-6":{},"35-3":{},"35-5":{},"35-6":{},"42-6":{},"53-3":{},"53-5":{},"53-6":{},"71-3":{},"71-5":{},"71-6":{},"89-3":{},"89-5":{},"89-6":{},"100-6":{},"111-3":{},"111-5":{},"111-6":{},"115-1":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"8":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"19":{},"20":{},"22":{},"23":{},"24":{},"26":{},"27":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"37":{},"38":{},"40":{},"41":{},"42":{},"44":{},"45":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"56":{},"57":{},"59":{},"60":{},"62":{},"63":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"74":{},"75":{},"77":{},"78":{},"80":{},"81":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"92":{},"93":{},"94":{},"98":{},"99":{},"100":{},"102":{},"103":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"113":{},"115":{},"120":{},"127":{},"129":{},"131":{},"134":{},"135":{}},"component":{}}],["streamer",{"_index":2499,"title":{},"name":{},"text":{"119":{},"131":{}},"component":{}}],["strictli",{"_index":174,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["string",{"_index":628,"title":{},"name":{},"text":{"5":{},"13":{},"14":{},"24":{},"32":{},"33":{},"42":{},"50":{},"51":{},"68":{},"69":{},"86":{},"87":{},"100":{},"108":{},"109":{}},"component":{}}],["strip",{"_index":714,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["structur",{"_index":125,"title":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"95-3":{},"124-15":{}},"name":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"text":{"2":{},"4":{},"14":{},"15":{},"21":{},"23":{},"33":{},"34":{},"39":{},"41":{},"51":{},"52":{},"58":{},"60":{},"69":{},"76":{},"78":{},"87":{},"95":{},"97":{},"99":{},"109":{},"110":{},"124":{}},"component":{}}],["stuff",{"_index":464,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["style=color",{"_index":1894,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["subdirectori",{"_index":2287,"title":{},"name":{},"text":{"95":{}},"component":{}}],["submit",{"_index":2378,"title":{},"name":{},"text":{"114":{}},"component":{}}],["subpag",{"_index":2276,"title":{},"name":{},"text":{"94":{}},"component":{}}],["subsect",{"_index":2689,"title":{},"name":{},"text":{"125":{}},"component":{}}],["substitut",{"_index":2439,"title":{},"name":{},"text":{"116":{}},"component":{}}],["subsystem==\"misc",{"_index":2105,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["subsystem=input",{"_index":334,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["subsystems==\"input",{"_index":2111,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["succesfulli",{"_index":2239,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["successfulli",{"_index":1096,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"70":{},"82":{},"88":{},"104":{}},"component":{}}],["such",{"_index":858,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"94":{},"102":{},"124":{},"127":{},"129":{}},"component":{}}],["sudo",{"_index":445,"title":{},"name":{},"text":{"3":{},"17":{},"19":{},"22":{},"36":{},"37":{},"40":{},"54":{},"56":{},"59":{},"73":{},"74":{},"77":{},"91":{},"92":{},"98":{},"112":{},"113":{},"119":{},"126":{},"134":{}},"component":{}}],["suggest",{"_index":545,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["suit",{"_index":2354,"title":{},"name":{},"text":{"95":{},"116":{}},"component":{}}],["sum",{"_index":1421,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"48":{},"50":{},"66":{},"68":{},"84":{},"86":{},"106":{},"108":{}},"component":{}}],["summari",{"_index":2178,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{},"125":{}},"component":{}}],["sunshin",{"_index":90,"title":{},"name":{},"text":{"1":{},"19":{},"20":{},"37":{},"38":{},"56":{},"57":{},"74":{},"75":{},"92":{},"93":{},"113":{},"115":{},"117":{},"120":{},"123":{},"127":{},"131":{},"134":{},"136":{}},"component":{}}],["super",{"_index":2598,"title":{},"name":{},"text":{"124":{}},"component":{}}],["superflu",{"_index":2647,"title":{},"name":{},"text":{"124":{}},"component":{}}],["supertux",{"_index":2550,"title":{"124-16":{}},"name":{},"text":{"124":{}},"component":{}}],["supertux.sh",{"_index":2549,"title":{"124-11":{}},"name":{},"text":{"124":{}},"component":{}}],["supplement",{"_index":1745,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["suppli",{"_index":2508,"title":{},"name":{},"text":{"120":{},"125":{},"131":{}},"component":{}}],["support",{"_index":41,"title":{"5-4":{},"17-3":{},"24-4":{},"36-3":{},"42-4":{},"54-3":{},"73-3":{},"91-3":{},"100-4":{},"112-3":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"7":{},"8":{},"11":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"30":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"44":{},"45":{},"48":{},"52":{},"54":{},"56":{},"57":{},"58":{},"59":{},"60":{},"62":{},"63":{},"66":{},"70":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"80":{},"81":{},"84":{},"88":{},"91":{},"92":{},"93":{},"95":{},"97":{},"98":{},"99":{},"100":{},"102":{},"103":{},"106":{},"110":{},"112":{},"113":{},"115":{},"116":{},"120":{},"123":{},"124":{},"125":{},"126":{},"127":{},"130":{},"131":{},"132":{},"133":{},"135":{}},"component":{}}],["support_hevc",{"_index":2230,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["sure",{"_index":354,"title":{},"name":{},"text":{"3":{},"6":{},"9":{},"15":{},"17":{},"19":{},"22":{},"25":{},"28":{},"34":{},"36":{},"37":{},"40":{},"43":{},"46":{},"52":{},"54":{},"56":{},"59":{},"61":{},"64":{},"73":{},"74":{},"77":{},"79":{},"82":{},"91":{},"92":{},"98":{},"101":{},"104":{},"110":{},"112":{},"113":{},"114":{},"115":{},"116":{},"119":{},"122":{},"123":{},"125":{},"126":{},"133":{},"134":{}},"component":{}}],["surfac",{"_index":886,"title":{},"name":{},"text":{"7":{},"19":{},"26":{},"37":{},"44":{},"56":{},"62":{},"74":{},"80":{},"92":{},"102":{},"113":{}},"component":{}}],["surprisingli",{"_index":2841,"title":{},"name":{},"text":{"133":{}},"component":{}}],["surround",{"_index":1766,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["sway",{"_index":2564,"title":{},"name":{},"text":{"124":{}},"component":{}}],["switch",{"_index":522,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{},"127":{}},"component":{}}],["syntax",{"_index":1734,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["sys/class/drm/renderd*/device/driv",{"_index":2262,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["sys/class/drm/renderd128/device/driv",{"_index":2263,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["sys/class/drm/renderd129/device/driv",{"_index":1841,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["sys/module/nvidia/vers",{"_index":2008,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["sys/module/nvidia_drm/parameters/modeset",{"_index":2021,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"56":{},"73":{},"74":{},"91":{},"92":{},"112":{},"113":{}},"component":{}}],["sys_admin",{"_index":2253,"title":{},"name":{},"text":{"70":{},"88":{},"95":{},"124":{}},"component":{}}],["sys_nic",{"_index":2254,"title":{},"name":{},"text":{"70":{},"88":{},"95":{},"124":{}},"component":{}}],["sysrq",{"_index":1213,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["system",{"_index":596,"title":{"119-4":{}},"name":{},"text":{"5":{},"6":{},"7":{},"16":{},"17":{},"19":{},"24":{},"25":{},"26":{},"35":{},"36":{},"37":{},"42":{},"43":{},"44":{},"53":{},"54":{},"56":{},"61":{},"62":{},"71":{},"73":{},"79":{},"80":{},"89":{},"91":{},"95":{},"100":{},"101":{},"102":{},"111":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{},"119":{},"124":{},"127":{},"128":{},"129":{},"131":{},"132":{},"133":{},"134":{},"135":{},"136":{}},"component":{}}],["system.yml",{"_index":2568,"title":{},"name":{},"text":{"124":{}},"component":{}}],["t",{"_index":1263,"title":{},"name":{},"text":{"11":{},"16":{},"17":{},"30":{},"35":{},"36":{},"48":{},"53":{},"54":{},"66":{},"71":{},"73":{},"84":{},"89":{},"91":{},"106":{},"111":{},"112":{},"119":{},"124":{}},"component":{}}],["tab",{"_index":1172,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["tabl",{"_index":1121,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"30":{},"31":{},"32":{},"48":{},"49":{},"50":{},"66":{},"67":{},"68":{},"84":{},"85":{},"86":{},"95":{},"106":{},"107":{},"108":{}},"component":{}}],["tag",{"_index":983,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{},"119":{}},"component":{}}],["tag+=\"uaccess",{"_index":2110,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["take",{"_index":108,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"7":{},"12":{},"13":{},"19":{},"20":{},"21":{},"22":{},"26":{},"31":{},"32":{},"37":{},"38":{},"39":{},"40":{},"44":{},"49":{},"50":{},"56":{},"57":{},"58":{},"59":{},"62":{},"67":{},"68":{},"72":{},"74":{},"75":{},"76":{},"77":{},"80":{},"85":{},"86":{},"90":{},"92":{},"93":{},"97":{},"98":{},"102":{},"107":{},"108":{},"113":{},"118":{},"125":{},"131":{},"132":{},"135":{}},"component":{}}],["taken",{"_index":1916,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["talk",{"_index":2804,"title":{},"name":{},"text":{"131":{}},"component":{}}],["tamper",{"_index":985,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{},"119":{}},"component":{}}],["target",{"_index":1772,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["tast",{"_index":2425,"title":{},"name":{},"text":{"116":{}},"component":{}}],["tcp",{"_index":1099,"title":{},"name":{},"text":{"10":{},"14":{},"15":{},"29":{},"33":{},"34":{},"47":{},"51":{},"52":{},"65":{},"69":{},"70":{},"83":{},"87":{},"88":{},"105":{},"109":{},"110":{}},"component":{}}],["tee",{"_index":1897,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["tell",{"_index":896,"title":{},"name":{},"text":{"7":{},"12":{},"13":{},"15":{},"26":{},"31":{},"32":{},"34":{},"44":{},"49":{},"50":{},"52":{},"62":{},"67":{},"68":{},"70":{},"80":{},"85":{},"86":{},"88":{},"102":{},"107":{},"108":{},"110":{},"126":{},"128":{},"131":{}},"component":{}}],["templat",{"_index":2509,"title":{},"name":{},"text":{"120":{},"123":{}},"component":{}}],["termin",{"_index":1017,"title":{},"name":{},"text":{"8":{},"19":{},"27":{},"37":{},"45":{},"56":{},"63":{},"74":{},"81":{},"92":{},"103":{},"113":{}},"component":{}}],["test",{"_index":123,"title":{"2-6":{},"21-6":{},"39-6":{},"58-6":{},"76-6":{},"97-6":{}},"name":{},"text":{"2":{},"6":{},"7":{},"15":{},"16":{},"17":{},"21":{},"25":{},"26":{},"35":{},"36":{},"39":{},"43":{},"44":{},"52":{},"53":{},"54":{},"58":{},"61":{},"62":{},"70":{},"71":{},"76":{},"79":{},"80":{},"88":{},"89":{},"97":{},"101":{},"102":{},"110":{},"111":{},"112":{},"125":{},"126":{},"127":{}},"component":{}}],["tests/cmakelists.txt",{"_index":265,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["text",{"_index":436,"title":{},"name":{},"text":{"3":{},"14":{},"22":{},"33":{},"40":{},"51":{},"59":{},"69":{},"77":{},"87":{},"98":{},"109":{},"131":{}},"component":{}}],["textur",{"_index":861,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["thank",{"_index":460,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"18":{},"22":{},"24":{},"26":{},"34":{},"40":{},"42":{},"44":{},"55":{},"59":{},"62":{},"77":{},"80":{},"96":{},"98":{},"100":{},"102":{},"118":{}},"component":{}}],["that’",{"_index":474,"title":{},"name":{},"text":{"3":{},"7":{},"17":{},"22":{},"26":{},"36":{},"40":{},"44":{},"54":{},"59":{},"62":{},"70":{},"73":{},"77":{},"80":{},"88":{},"91":{},"98":{},"102":{},"112":{},"115":{},"119":{},"125":{},"134":{}},"component":{}}],["theme",{"_index":2279,"title":{"95-10":{}},"name":{},"text":{"95":{}},"component":{}}],["themselv",{"_index":2484,"title":{},"name":{},"text":{"119":{}},"component":{}}],["theori",{"_index":835,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"127":{}},"component":{}}],["therefor",{"_index":2485,"title":{},"name":{},"text":{"119":{},"133":{},"135":{}},"component":{}}],["there’",{"_index":358,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"18":{},"22":{},"24":{},"26":{},"40":{},"42":{},"44":{},"55":{},"59":{},"62":{},"77":{},"80":{},"96":{},"98":{},"100":{},"102":{},"119":{}},"component":{}}],["they’ll",{"_index":1467,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["they’r",{"_index":2515,"title":{},"name":{},"text":{"120":{},"125":{}},"component":{}}],["thing",{"_index":581,"title":{},"name":{},"text":{"5":{},"6":{},"7":{},"17":{},"19":{},"24":{},"25":{},"26":{},"36":{},"37":{},"42":{},"43":{},"44":{},"54":{},"56":{},"61":{},"62":{},"73":{},"74":{},"79":{},"80":{},"91":{},"92":{},"100":{},"101":{},"102":{},"112":{},"113":{},"124":{},"130":{},"132":{},"136":{}},"component":{}}],["think",{"_index":2506,"title":{},"name":{},"text":{"120":{},"131":{}},"component":{}}],["third",{"_index":2510,"title":{},"name":{},"text":{"120":{}},"component":{}}],["those",{"_index":327,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{},"116":{},"119":{},"127":{},"131":{},"135":{},"136":{}},"component":{}}],["though",{"_index":378,"title":{},"name":{},"text":{"3":{},"5":{},"22":{},"24":{},"40":{},"42":{},"59":{},"77":{},"98":{},"100":{},"125":{},"127":{},"136":{}},"component":{}}],["thread",{"_index":149,"title":{},"name":{},"text":{"2":{},"6":{},"21":{},"25":{},"39":{},"43":{},"58":{},"61":{},"76":{},"79":{},"97":{},"101":{}},"component":{}}],["three",{"_index":1480,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["through",{"_index":904,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"95":{},"102":{}},"component":{}}],["throw",{"_index":2187,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["thrown",{"_index":1831,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["thu",{"_index":2746,"title":{},"name":{},"text":{"127":{}},"component":{}}],["ti",{"_index":175,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"127":{},"131":{}},"component":{}}],["time",{"_index":301,"title":{"116-2":{}},"name":{},"text":{"3":{},"7":{},"11":{},"15":{},"17":{},"19":{},"22":{},"26":{},"30":{},"34":{},"36":{},"37":{},"40":{},"44":{},"48":{},"52":{},"54":{},"56":{},"59":{},"62":{},"66":{},"70":{},"73":{},"74":{},"77":{},"80":{},"84":{},"88":{},"91":{},"92":{},"98":{},"102":{},"106":{},"110":{},"112":{},"113":{},"116":{},"117":{},"118":{},"120":{},"125":{},"126":{},"131":{},"132":{}},"component":{}}],["time_zon",{"_index":2433,"title":{},"name":{},"text":{"116":{}},"component":{}}],["timestamp=tru",{"_index":1907,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["tip",{"_index":2139,"title":{},"name":{},"text":{"18":{},"34":{},"55":{},"96":{}},"component":{}}],["tireless",{"_index":115,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["titl",{"_index":1837,"title":{},"name":{},"text":{"15":{},"16":{},"18":{},"34":{},"35":{},"52":{},"53":{},"55":{},"70":{},"71":{},"88":{},"89":{},"95":{},"96":{},"110":{},"111":{},"124":{},"133":{}},"component":{}}],["tmp/socket",{"_index":1805,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["tmp/sockets:/tmp/sockets:rw",{"_index":1971,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["toc",{"_index":1438,"title":{},"name":{},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"component":{}}],["todo",{"_index":2244,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["togeth",{"_index":275,"title":{"3-7":{},"22-7":{},"40-7":{},"59-7":{},"77-7":{},"98-7":{}},"name":{},"text":{"5":{},"13":{},"24":{},"32":{},"42":{},"50":{},"68":{},"86":{},"100":{},"108":{},"115":{},"127":{},"131":{}},"component":{}}],["toggl",{"_index":2861,"title":{},"name":{},"text":{"134":{}},"component":{}}],["toml",{"_index":1787,"title":{"15-5":{},"34-5":{},"52-5":{},"70-2":{},"88-2":{},"110-5":{}},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["took",{"_index":2137,"title":{},"name":{},"text":{"18":{},"55":{},"96":{}},"component":{}}],["tool",{"_index":83,"title":{},"name":{},"text":{"1":{},"2":{},"6":{},"15":{},"17":{},"20":{},"21":{},"25":{},"34":{},"36":{},"38":{},"39":{},"43":{},"52":{},"54":{},"57":{},"58":{},"61":{},"70":{},"73":{},"75":{},"76":{},"79":{},"88":{},"91":{},"93":{},"97":{},"101":{},"110":{},"112":{},"114":{},"125":{}},"component":{}}],["toolkit",{"_index":1967,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"126":{}},"component":{}}],["top",{"_index":193,"title":{},"name":{},"text":{"2":{},"15":{},"21":{},"39":{},"52":{},"58":{},"70":{},"76":{},"88":{},"97":{},"110":{},"115":{},"120":{},"135":{},"136":{}},"component":{}}],["total",{"_index":1472,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"126":{}},"component":{}}],["touch",{"_index":1113,"title":{"11-7":{},"11-14":{},"30-7":{},"30-14":{},"48-7":{},"48-14":{},"66-7":{},"66-14":{},"84-7":{},"84-14":{},"106-7":{},"106-14":{}},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["touchpad",{"_index":1372,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["trace",{"_index":1794,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["track",{"_index":2786,"title":{},"name":{},"text":{"129":{}},"component":{}}],["tracker",{"_index":2370,"title":{},"name":{},"text":{"95":{}},"component":{}}],["transfer",{"_index":874,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["transform",{"_index":531,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["transit",{"_index":940,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["translat",{"_index":2408,"title":{},"name":{},"text":{"115":{}},"component":{}}],["transmiss",{"_index":1445,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{}},"component":{}}],["tree",{"_index":267,"title":{"3-2":{},"22-2":{},"40-2":{},"59-2":{},"77-2":{},"98-2":{}},"name":{},"text":{},"component":{}}],["tri",{"_index":88,"title":{},"name":{},"text":{"1":{},"2":{},"5":{},"7":{},"15":{},"16":{},"19":{},"20":{},"21":{},"24":{},"26":{},"35":{},"37":{},"38":{},"39":{},"42":{},"44":{},"52":{},"53":{},"56":{},"57":{},"58":{},"62":{},"70":{},"71":{},"74":{},"75":{},"76":{},"80":{},"88":{},"89":{},"92":{},"93":{},"97":{},"100":{},"102":{},"110":{},"111":{},"113":{},"115":{},"125":{},"128":{},"129":{},"131":{},"134":{}},"component":{}}],["trick",{"_index":424,"title":{},"name":{},"text":{"3":{},"7":{},"16":{},"22":{},"26":{},"35":{},"40":{},"44":{},"53":{},"59":{},"62":{},"71":{},"77":{},"80":{},"89":{},"98":{},"102":{},"111":{}},"component":{}}],["tricki",{"_index":2876,"title":{},"name":{},"text":{"135":{}},"component":{}}],["trigger",{"_index":290,"title":{"8-6":{},"27-6":{},"45-6":{},"63-6":{},"81-6":{},"103-6":{}},"name":{},"text":{"3":{},"8":{},"10":{},"11":{},"17":{},"22":{},"27":{},"29":{},"30":{},"36":{},"40":{},"45":{},"47":{},"48":{},"54":{},"59":{},"63":{},"65":{},"66":{},"73":{},"77":{},"81":{},"83":{},"84":{},"91":{},"98":{},"103":{},"105":{},"106":{},"112":{}},"component":{}}],["trivial",{"_index":521,"title":{},"name":{},"text":{"4":{},"5":{},"23":{},"24":{},"41":{},"42":{},"60":{},"78":{},"99":{},"100":{}},"component":{}}],["troubl",{"_index":2714,"title":{},"name":{},"text":{"126":{},"134":{}},"component":{}}],["troubleshoot",{"_index":2161,"title":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{},"134":{},"95-11":{}},"name":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{},"134":{}},"text":{"95":{},"117":{},"123":{}},"component":{}}],["true",{"_index":1811,"title":{},"name":{},"text":{"15":{},"17":{},"18":{},"34":{},"36":{},"52":{},"54":{},"55":{},"70":{},"73":{},"88":{},"91":{},"95":{},"96":{},"110":{},"112":{},"120":{},"124":{},"125":{},"134":{}},"component":{}}],["trueli",{"_index":954,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["trust",{"_index":2470,"title":{"119-2":{}},"name":{},"text":{"119":{},"120":{}},"component":{}}],["tsdemux",{"_index":1939,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["turn",{"_index":326,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"11":{},"22":{},"23":{},"26":{},"30":{},"40":{},"41":{},"44":{},"48":{},"59":{},"60":{},"62":{},"66":{},"77":{},"78":{},"80":{},"84":{},"98":{},"99":{},"102":{},"106":{},"124":{}},"component":{}}],["tutori",{"_index":550,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["tux",{"_index":2599,"title":{},"name":{},"text":{"124":{}},"component":{}}],["tweak",{"_index":2445,"title":{},"name":{},"text":{"116":{}},"component":{}}],["twitch",{"_index":1871,"title":{"16-6":{},"35-6":{},"53-6":{},"71-6":{},"89-6":{},"111-6":{}},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["twitch.tv",{"_index":1930,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["two",{"_index":278,"title":{},"name":{},"text":{"3":{},"4":{},"8":{},"13":{},"14":{},"15":{},"22":{},"23":{},"27":{},"32":{},"33":{},"40":{},"41":{},"45":{},"50":{},"51":{},"52":{},"59":{},"60":{},"63":{},"68":{},"69":{},"70":{},"77":{},"78":{},"81":{},"86":{},"87":{},"88":{},"98":{},"99":{},"103":{},"108":{},"109":{},"110":{},"115":{},"119":{},"127":{},"132":{},"135":{}},"component":{}}],["txt",{"_index":2672,"title":{},"name":{},"text":{"125":{}},"component":{}}],["type",{"_index":952,"title":{},"name":{},"text":{"7":{},"8":{},"11":{},"13":{},"14":{},"15":{},"26":{},"27":{},"30":{},"32":{},"33":{},"34":{},"44":{},"45":{},"48":{},"50":{},"51":{},"52":{},"62":{},"63":{},"66":{},"68":{},"69":{},"70":{},"80":{},"81":{},"84":{},"86":{},"87":{},"88":{},"95":{},"102":{},"103":{},"106":{},"108":{},"109":{},"110":{},"124":{},"128":{},"131":{}},"component":{}}],["typic",{"_index":856,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"116":{}},"component":{}}],["tz",{"_index":2434,"title":{},"name":{},"text":{"116":{}},"component":{}}],["u",{"_index":1265,"title":{},"name":{},"text":{"11":{},"19":{},"30":{},"37":{},"48":{},"56":{},"66":{},"84":{},"106":{},"113":{}},"component":{}}],["ubuntu",{"_index":2394,"title":{},"name":{},"text":{"114":{},"129":{}},"component":{}}],["udev",{"_index":120,"title":{"2-3":{},"3-3":{},"3-4":{},"3-5":{},"3-6":{},"5-4":{},"21-3":{},"22-3":{},"22-4":{},"22-5":{},"22-6":{},"24-4":{},"39-3":{},"40-3":{},"40-4":{},"40-5":{},"40-6":{},"42-4":{},"58-3":{},"59-3":{},"59-4":{},"59-5":{},"59-6":{},"76-3":{},"77-3":{},"77-4":{},"77-5":{},"77-6":{},"97-3":{},"98-3":{},"98-4":{},"98-5":{},"98-6":{},"100-4":{}},"name":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"text":{"2":{},"3":{},"5":{},"15":{},"17":{},"21":{},"22":{},"24":{},"34":{},"36":{},"39":{},"40":{},"42":{},"52":{},"54":{},"58":{},"59":{},"70":{},"73":{},"76":{},"77":{},"88":{},"91":{},"97":{},"98":{},"100":{},"110":{},"112":{},"131":{},"135":{}},"component":{}}],["udevadm",{"_index":446,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"112":{}},"component":{}}],["udevd",{"_index":401,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["udevd_network",{"_index":2514,"title":{},"name":{},"text":{"120":{},"134":{}},"component":{}}],["udp",{"_index":501,"title":{},"name":{},"text":{"4":{},"8":{},"10":{},"13":{},"23":{},"27":{},"29":{},"32":{},"41":{},"45":{},"47":{},"50":{},"60":{},"63":{},"65":{},"68":{},"78":{},"81":{},"83":{},"86":{},"99":{},"103":{},"105":{},"108":{}},"component":{}}],["udp/tcp",{"_index":523,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["uhid",{"_index":594,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["ui",{"_index":2238,"title":{"133-2":{}},"name":{},"text":{"70":{},"88":{},"124":{},"133":{}},"component":{}}],["uid",{"_index":2430,"title":{},"name":{},"text":{"116":{}},"component":{}}],["uinput",{"_index":593,"title":{"123-4":{},"129-1":{},"129-7":{}},"name":{},"text":{"5":{},"17":{},"24":{},"36":{},"42":{},"54":{},"73":{},"91":{},"100":{},"112":{},"115":{},"129":{},"134":{},"136":{}},"component":{}}],["uinput/uhid",{"_index":2076,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["unabl",{"_index":810,"title":{"19-4":{},"37-4":{},"56-4":{},"74-4":{},"92-4":{},"113-4":{}},"name":{},"text":{"6":{},"19":{},"25":{},"37":{},"43":{},"56":{},"61":{},"74":{},"79":{},"92":{},"101":{},"113":{}},"component":{}}],["unattend",{"_index":2788,"title":{},"name":{},"text":{"129":{}},"component":{}}],["uncom",{"_index":2496,"title":{},"name":{},"text":{"119":{}},"component":{}}],["under",{"_index":251,"title":{},"name":{},"text":{"2":{},"3":{},"6":{},"15":{},"17":{},"21":{},"22":{},"25":{},"36":{},"39":{},"40":{},"43":{},"52":{},"54":{},"58":{},"59":{},"61":{},"70":{},"72":{},"73":{},"76":{},"77":{},"79":{},"88":{},"90":{},"91":{},"97":{},"98":{},"101":{},"110":{},"112":{},"125":{},"126":{}},"component":{}}],["underli",{"_index":2805,"title":{},"name":{},"text":{"131":{}},"component":{}}],["understand",{"_index":1738,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"118":{},"130":{}},"component":{}}],["undesir",{"_index":2655,"title":{},"name":{},"text":{"125":{}},"component":{}}],["unencrypt",{"_index":1086,"title":{},"name":{},"text":{"9":{},"10":{},"28":{},"29":{},"46":{},"47":{},"64":{},"65":{},"82":{},"83":{},"104":{},"105":{}},"component":{}}],["unfortun",{"_index":357,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"59":{},"73":{},"77":{},"91":{},"98":{},"112":{},"120":{},"128":{},"136":{}},"component":{}}],["unifi",{"_index":2284,"title":{},"name":{},"text":{"95":{}},"component":{}}],["uniqu",{"_index":1739,"title":{},"name":{},"text":{"13":{},"15":{},"32":{},"34":{},"50":{},"52":{},"68":{},"86":{},"108":{},"110":{}},"component":{}}],["unit",{"_index":249,"title":{"13-7":{},"32-7":{},"50-7":{},"68-7":{},"86-7":{},"108-7":{}},"name":{},"text":{"2":{},"13":{},"21":{},"32":{},"39":{},"50":{},"58":{},"68":{},"76":{},"86":{},"97":{},"108":{}},"component":{}}],["unknown",{"_index":1365,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["unless",{"_index":1987,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["unlik",{"_index":1781,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["unlock",{"_index":2869,"title":{},"name":{},"text":{"134":{}},"component":{}}],["unplug",{"_index":279,"title":{},"name":{},"text":{"3":{},"11":{},"22":{},"30":{},"40":{},"48":{},"59":{},"66":{},"77":{},"84":{},"98":{},"106":{},"125":{}},"component":{}}],["unprivileg",{"_index":2075,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{}},"component":{}}],["unraid",{"_index":2427,"title":{},"name":{},"text":{"116":{},"129":{},"132":{}},"component":{}}],["unsign",{"_index":988,"title":{},"name":{},"text":{"8":{},"27":{},"45":{},"63":{},"81":{},"103":{}},"component":{}}],["unstructur",{"_index":1758,"title":{},"name":{},"text":{"14":{},"33":{},"51":{},"69":{},"87":{},"109":{}},"component":{}}],["unsur",{"_index":2750,"title":{},"name":{},"text":{"127":{},"132":{}},"component":{}}],["until",{"_index":837,"title":{},"name":{},"text":{"7":{},"8":{},"26":{},"27":{},"44":{},"45":{},"62":{},"63":{},"80":{},"81":{},"102":{},"103":{},"116":{}},"component":{}}],["untouch",{"_index":2802,"title":{},"name":{},"text":{"131":{}},"component":{}}],["untrust",{"_index":1053,"title":{},"name":{},"text":{"9":{},"28":{},"46":{},"64":{},"82":{},"104":{}},"component":{}}],["up",{"_index":27,"title":{"95-4":{},"95-6":{}},"name":{},"text":{"1":{},"3":{},"6":{},"7":{},"10":{},"11":{},"17":{},"20":{},"22":{},"25":{},"26":{},"29":{},"30":{},"36":{},"38":{},"40":{},"43":{},"44":{},"47":{},"48":{},"54":{},"57":{},"59":{},"61":{},"62":{},"65":{},"66":{},"70":{},"73":{},"75":{},"77":{},"79":{},"80":{},"83":{},"84":{},"88":{},"91":{},"93":{},"95":{},"98":{},"101":{},"102":{},"105":{},"106":{},"112":{},"116":{},"117":{},"119":{},"124":{},"125":{},"126":{},"128":{},"129":{},"131":{},"132":{}},"component":{}}],["updat",{"_index":877,"title":{},"name":{},"text":{"7":{},"17":{},"19":{},"26":{},"36":{},"37":{},"44":{},"54":{},"56":{},"62":{},"73":{},"74":{},"80":{},"91":{},"92":{},"102":{},"112":{},"113":{},"114":{},"116":{},"123":{},"134":{},"135":{}},"component":{}}],["upon",{"_index":2578,"title":{},"name":{},"text":{"124":{}},"component":{}}],["upstream",{"_index":818,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["url",{"_index":1934,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["us",{"_index":49,"title":{"120":{},"3-3":{},"19-3":{},"22-3":{},"37-3":{},"40-3":{},"56-3":{},"59-3":{},"74-3":{},"77-3":{},"92-3":{},"98-3":{},"113-3":{},"120-1":{},"124-7":{},"124-14":{},"125-2":{},"125-3":{},"126-1":{},"134-3":{}},"name":{"120":{}},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"91":{},"92":{},"93":{},"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{},"119":{},"120":{},"121":{},"123":{},"124":{},"125":{},"126":{},"127":{},"128":{},"129":{},"130":{},"131":{},"132":{},"133":{},"134":{},"135":{}},"component":{}}],["usabl",{"_index":173,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{},"115":{}},"component":{}}],["usag",{"_index":2803,"title":{},"name":{},"text":{"131":{}},"component":{}}],["use_sway=1",{"_index":2565,"title":{},"name":{},"text":{"124":{}},"component":{}}],["usedisplaydevic",{"_index":2684,"title":{},"name":{},"text":{"125":{}},"component":{}}],["user",{"_index":31,"title":{"116-3":{},"129-4":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"7":{},"9":{},"10":{},"11":{},"14":{},"17":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"28":{},"29":{},"30":{},"33":{},"36":{},"38":{},"39":{},"40":{},"41":{},"42":{},"44":{},"46":{},"47":{},"48":{},"51":{},"54":{},"57":{},"58":{},"59":{},"60":{},"62":{},"64":{},"65":{},"66":{},"69":{},"70":{},"72":{},"73":{},"75":{},"76":{},"77":{},"78":{},"80":{},"82":{},"83":{},"84":{},"87":{},"88":{},"90":{},"91":{},"93":{},"97":{},"98":{},"99":{},"100":{},"102":{},"104":{},"105":{},"106":{},"109":{},"112":{},"115":{},"116":{},"124":{},"129":{},"130":{},"134":{}},"component":{}}],["user+group",{"_index":2131,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["user.env",{"_index":2436,"title":{},"name":{},"text":{"116":{},"134":{}},"component":{}}],["user:quickstart.adoc#_virtual_devices_support",{"_index":607,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["usermod",{"_index":2100,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["usernam",{"_index":2454,"title":{},"name":{},"text":{"117":{},"123":{}},"component":{}}],["userspac",{"_index":379,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"44":{},"59":{},"62":{},"77":{},"80":{},"98":{},"102":{}},"component":{}}],["usr/bin/myapp",{"_index":2393,"title":{},"name":{},"text":{"114":{}},"component":{}}],["usual",{"_index":912,"title":{},"name":{},"text":{"7":{},"12":{},"13":{},"17":{},"26":{},"31":{},"32":{},"36":{},"44":{},"49":{},"50":{},"54":{},"62":{},"67":{},"68":{},"73":{},"80":{},"85":{},"86":{},"91":{},"102":{},"107":{},"108":{},"112":{},"124":{},"133":{}},"component":{}}],["utf8_text",{"_index":1152,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["util",{"_index":172,"title":{},"name":{},"text":{"2":{},"3":{},"21":{},"22":{},"39":{},"40":{},"58":{},"59":{},"76":{},"77":{},"97":{},"98":{}},"component":{}}],["uuid",{"_index":2232,"title":{},"name":{},"text":{"70":{},"88":{},"126":{}},"component":{}}],["uvm",{"_index":2034,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["v",{"_index":1267,"title":{},"name":{},"text":{"11":{},"16":{},"17":{},"30":{},"35":{},"36":{},"48":{},"53":{},"54":{},"66":{},"71":{},"73":{},"84":{},"89":{},"91":{},"106":{},"111":{},"112":{}},"component":{}}],["v0.6.3.glibc2.29",{"_index":2629,"title":{},"name":{},"text":{"124":{}},"component":{}}],["va",{"_index":2422,"title":{},"name":{},"text":{"115":{}},"component":{}}],["vaapi",{"_index":625,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{},"115":{}},"component":{}}],["vaapi:x11=dis",{"_index":742,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["valid",{"_index":431,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"22":{},"23":{},"28":{},"40":{},"41":{},"46":{},"59":{},"60":{},"64":{},"77":{},"78":{},"82":{},"98":{},"99":{},"104":{},"117":{},"123":{}},"component":{}}],["valu",{"_index":1040,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"14":{},"15":{},"27":{},"30":{},"32":{},"33":{},"34":{},"45":{},"48":{},"50":{},"51":{},"52":{},"63":{},"66":{},"68":{},"69":{},"81":{},"84":{},"86":{},"87":{},"103":{},"106":{},"108":{},"109":{},"110":{},"116":{},"123":{},"125":{},"131":{}},"component":{}}],["var/lib/docker/volum",{"_index":2589,"title":{},"name":{},"text":{"124":{}},"component":{}}],["var/log/xorg.0.log",{"_index":2862,"title":{},"name":{},"text":{"134":{}},"component":{}}],["var/lutri",{"_index":2562,"title":{},"name":{},"text":{"124":{}},"component":{}}],["var/lutris/gam",{"_index":2577,"title":{},"name":{},"text":{"124":{}},"component":{}}],["var/run/docker.sock",{"_index":1817,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["var/run/docker.sock:/var/run/docker.sock:rw",{"_index":1974,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["vari",{"_index":1120,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{},"125":{}},"component":{}}],["variabl",{"_index":745,"title":{"15-1":{},"34-1":{},"52-1":{},"70-1":{},"88-1":{},"110-1":{}},"name":{},"text":{"6":{},"14":{},"15":{},"18":{},"19":{},"25":{},"33":{},"34":{},"37":{},"43":{},"51":{},"52":{},"55":{},"56":{},"61":{},"69":{},"70":{},"74":{},"79":{},"87":{},"88":{},"92":{},"96":{},"101":{},"109":{},"110":{},"113":{},"114":{},"116":{},"119":{},"120":{},"124":{},"125":{},"126":{}},"component":{}}],["varibl",{"_index":2811,"title":{},"name":{},"text":{"131":{}},"component":{}}],["varieti",{"_index":2555,"title":{},"name":{},"text":{"124":{}},"component":{}}],["variou",{"_index":898,"title":{},"name":{},"text":{"7":{},"12":{},"26":{},"31":{},"44":{},"49":{},"62":{},"67":{},"80":{},"85":{},"95":{},"102":{},"107":{}},"component":{}}],["varyi",{"_index":907,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["vendor",{"_index":909,"title":{"19-4":{},"37-4":{},"56-4":{},"74-4":{},"92-4":{},"113-4":{}},"name":{},"text":{"7":{},"17":{},"19":{},"26":{},"36":{},"37":{},"44":{},"54":{},"56":{},"62":{},"73":{},"74":{},"80":{},"91":{},"92":{},"102":{},"112":{},"113":{}},"component":{}}],["vendor/product",{"_index":2128,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["veri",{"_index":844,"title":{},"name":{},"text":{"7":{},"13":{},"17":{},"19":{},"26":{},"32":{},"36":{},"37":{},"44":{},"50":{},"54":{},"56":{},"62":{},"68":{},"74":{},"80":{},"86":{},"92":{},"102":{},"108":{},"112":{},"113":{},"114":{},"115":{},"120":{},"127":{},"129":{},"131":{},"136":{}},"component":{}}],["verif",{"_index":2050,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["verifi",{"_index":1082,"title":{},"name":{},"text":{"9":{},"19":{},"28":{},"37":{},"46":{},"56":{},"64":{},"82":{},"104":{},"113":{},"129":{},"133":{}},"component":{}}],["version",{"_index":657,"title":{},"name":{},"text":{"6":{},"17":{},"25":{},"36":{},"43":{},"54":{},"61":{},"70":{},"73":{},"79":{},"88":{},"91":{},"101":{},"112":{},"114":{},"123":{},"124":{},"126":{},"129":{}},"component":{}}],["vga",{"_index":2059,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["via",{"_index":402,"title":{"12":{},"13":{},"31":{},"32":{},"49":{},"50":{},"67":{},"68":{},"85":{},"86":{},"107":{},"108":{},"5-4":{},"24-4":{},"42-4":{},"100-4":{}},"name":{},"text":{"3":{},"5":{},"7":{},"8":{},"11":{},"12":{},"13":{},"15":{},"22":{},"24":{},"26":{},"27":{},"30":{},"31":{},"32":{},"34":{},"40":{},"42":{},"44":{},"45":{},"48":{},"49":{},"50":{},"52":{},"59":{},"62":{},"63":{},"66":{},"67":{},"68":{},"70":{},"77":{},"80":{},"81":{},"84":{},"85":{},"86":{},"88":{},"98":{},"100":{},"102":{},"103":{},"106":{},"107":{},"108":{},"110":{},"124":{},"133":{},"135":{}},"component":{}}],["video",{"_index":60,"title":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"13-4":{},"15-14":{},"16-5":{},"32-4":{},"34-13":{},"35-5":{},"50-4":{},"52-14":{},"53-5":{},"68-4":{},"70-9":{},"71-5":{},"86-4":{},"88-9":{},"89-5":{},"108-4":{},"110-14":{},"111-5":{}},"name":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"text":{"1":{},"4":{},"5":{},"7":{},"10":{},"13":{},"14":{},"15":{},"16":{},"17":{},"19":{},"20":{},"23":{},"24":{},"26":{},"29":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"41":{},"42":{},"44":{},"47":{},"50":{},"51":{},"52":{},"53":{},"54":{},"56":{},"57":{},"60":{},"62":{},"65":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"78":{},"80":{},"83":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{},"95":{},"99":{},"100":{},"102":{},"105":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"115":{},"120":{},"126":{},"127":{}},"component":{}}],["video.hpp",{"_index":565,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["video/audio",{"_index":541,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["video/x",{"_index":1865,"title":{},"name":{},"text":{"15":{},"16":{},"19":{},"35":{},"37":{},"52":{},"53":{},"56":{},"70":{},"71":{},"88":{},"89":{},"110":{},"111":{},"113":{}},"component":{}}],["video_param",{"_index":1868,"title":{},"name":{},"text":{"15":{},"16":{},"35":{},"52":{},"53":{},"71":{},"89":{},"110":{},"111":{}},"component":{}}],["videoconvert",{"_index":1956,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["videoencod",{"_index":2205,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["videogam",{"_index":23,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{},"124":{}},"component":{}}],["videor",{"_index":1947,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["videoscal",{"_index":1946,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["videotestsrc",{"_index":1861,"title":{},"name":{},"text":{"15":{},"16":{},"35":{},"52":{},"53":{},"70":{},"71":{},"88":{},"89":{},"110":{},"111":{}},"component":{}}],["view",{"_index":849,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["viewport",{"_index":1160,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["violat",{"_index":1735,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["virtual",{"_index":38,"title":{"3-1":{},"5-1":{},"5-2":{},"5-3":{},"17-3":{},"22-1":{},"24-1":{},"24-2":{},"24-3":{},"36-3":{},"40-1":{},"42-1":{},"42-2":{},"42-3":{},"54-3":{},"59-1":{},"73-3":{},"77-1":{},"91-3":{},"98-1":{},"100-1":{},"100-2":{},"100-3":{},"112-3":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"52":{},"54":{},"56":{},"57":{},"58":{},"59":{},"60":{},"70":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"88":{},"91":{},"92":{},"93":{},"97":{},"98":{},"99":{},"100":{},"110":{},"112":{},"113":{},"123":{},"129":{},"136":{}},"component":{}}],["visibl",{"_index":595,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{},"124":{}},"component":{}}],["vkcreatedevic",{"_index":2173,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["vkresult",{"_index":2174,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["vm",{"_index":2198,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"74":{},"92":{},"113":{}},"component":{}}],["vol",{"_index":1819,"title":{},"name":{},"text":{"15":{},"17":{},"19":{},"34":{},"36":{},"37":{},"52":{},"54":{},"56":{},"70":{},"73":{},"74":{},"88":{},"91":{},"92":{},"110":{},"112":{},"113":{}},"component":{}}],["vol,destination=/usr/nvidia",{"_index":2013,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["vol:/usr/nvidia:rw",{"_index":2032,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["volum",{"_index":1821,"title":{},"name":{},"text":{"15":{},"17":{},"19":{},"34":{},"36":{},"37":{},"52":{},"54":{},"56":{},"70":{},"73":{},"74":{},"88":{},"91":{},"92":{},"110":{},"112":{},"113":{},"124":{},"125":{},"128":{}},"component":{}}],["vulkan",{"_index":2135,"title":{"18-3":{},"19-2":{},"37-2":{},"55-3":{},"56-2":{},"74-2":{},"92-2":{},"96-3":{},"113-2":{}},"name":{},"text":{"18":{},"19":{},"37":{},"55":{},"56":{},"74":{},"92":{},"96":{},"113":{}},"component":{}}],["w",{"_index":1269,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["want",{"_index":283,"title":{},"name":{},"text":{"3":{},"7":{},"15":{},"18":{},"22":{},"26":{},"34":{},"40":{},"44":{},"52":{},"55":{},"59":{},"62":{},"70":{},"77":{},"80":{},"88":{},"96":{},"98":{},"102":{},"110":{},"114":{},"115":{},"116":{},"119":{},"124":{},"125":{},"126":{},"128":{},"129":{},"130":{},"131":{},"135":{}},"component":{}}],["warn",{"_index":809,"title":{},"name":{},"text":{"6":{},"15":{},"19":{},"25":{},"34":{},"37":{},"43":{},"52":{},"56":{},"61":{},"70":{},"74":{},"79":{},"88":{},"92":{},"101":{},"110":{},"113":{}},"component":{}}],["wasn’t",{"_index":2015,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"120":{}},"component":{}}],["watch",{"_index":2356,"title":{},"name":{},"text":{"95":{}},"component":{}}],["wave=tick",{"_index":2243,"title":{},"name":{},"text":{"70":{},"88":{}},"component":{}}],["wavescop",{"_index":1904,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["way",{"_index":373,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"8":{},"14":{},"15":{},"17":{},"18":{},"22":{},"24":{},"26":{},"27":{},"33":{},"36":{},"40":{},"42":{},"44":{},"45":{},"51":{},"52":{},"54":{},"55":{},"59":{},"62":{},"63":{},"69":{},"73":{},"77":{},"80":{},"81":{},"87":{},"91":{},"96":{},"98":{},"100":{},"102":{},"103":{},"109":{},"110":{},"112":{},"114":{},"116":{},"118":{},"120":{},"125":{},"127":{},"134":{}},"component":{}}],["wayland",{"_index":195,"title":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"6-4":{},"7-1":{},"7-2":{},"7-3":{},"25-4":{},"26-1":{},"26-2":{},"26-3":{},"43-4":{},"44-1":{},"44-2":{},"44-3":{},"61-4":{},"62-1":{},"62-2":{},"62-3":{},"79-4":{},"80-1":{},"80-2":{},"80-3":{},"101-4":{},"102-1":{},"102-2":{},"102-3":{}},"name":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"text":{"2":{},"5":{},"6":{},"7":{},"16":{},"21":{},"24":{},"25":{},"26":{},"35":{},"39":{},"42":{},"43":{},"44":{},"53":{},"58":{},"61":{},"62":{},"70":{},"71":{},"76":{},"79":{},"80":{},"88":{},"89":{},"97":{},"100":{},"101":{},"102":{},"111":{}},"component":{}}],["wc",{"_index":2057,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["we'll",{"_index":707,"title":{},"name":{},"text":{"6":{},"25":{},"43":{},"61":{},"79":{},"101":{}},"component":{}}],["web",{"_index":2452,"title":{},"name":{},"text":{"117":{},"119":{},"123":{},"127":{}},"component":{}}],["websit",{"_index":2559,"title":{},"name":{},"text":{"124":{}},"component":{}}],["webview",{"_index":2834,"title":{},"name":{},"text":{"133":{}},"component":{}}],["well",{"_index":831,"title":{},"name":{},"text":{"7":{},"12":{},"17":{},"26":{},"31":{},"36":{},"44":{},"49":{},"54":{},"62":{},"67":{},"73":{},"80":{},"85":{},"91":{},"102":{},"107":{},"112":{},"120":{},"124":{},"126":{},"127":{},"131":{}},"component":{}}],["we’d",{"_index":2784,"title":{},"name":{},"text":{"129":{}},"component":{}}],["we’ll",{"_index":419,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"22":{},"23":{},"26":{},"28":{},"40":{},"41":{},"44":{},"46":{},"59":{},"60":{},"62":{},"64":{},"77":{},"78":{},"80":{},"82":{},"98":{},"99":{},"102":{},"104":{},"135":{}},"component":{}}],["we’r",{"_index":599,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{},"125":{},"130":{},"136":{}},"component":{}}],["we’v",{"_index":319,"title":{},"name":{},"text":{"3":{},"5":{},"22":{},"24":{},"40":{},"42":{},"59":{},"77":{},"98":{},"100":{},"120":{},"121":{},"124":{},"125":{},"127":{},"130":{},"131":{}},"component":{}}],["whale",{"_index":70,"title":{"121":{}},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{},"115":{},"120":{},"122":{},"123":{},"127":{},"131":{},"135":{},"136":{}},"component":{}}],["whales/gow",{"_index":621,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["whales/gow.git",{"_index":2528,"title":{},"name":{},"text":{"122":{}},"component":{}}],["whales/gow/master/images/nvidia",{"_index":2002,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["whales/gst",{"_index":194,"title":{},"name":{},"text":{"2":{},"6":{},"21":{},"25":{},"39":{},"43":{},"58":{},"61":{},"76":{},"79":{},"97":{},"101":{}},"component":{}}],["whales/lutri",{"_index":2554,"title":{},"name":{},"text":{"124":{}},"component":{}}],["whales/pegasus:edg",{"_index":2333,"title":{},"name":{},"text":{"95":{}},"component":{}}],["whales/pulseaudio:mast",{"_index":1809,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["whales/steam:edg",{"_index":1848,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["whales/wolf:st",{"_index":1981,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["whatev",{"_index":2667,"title":{},"name":{},"text":{"125":{}},"component":{}}],["what’",{"_index":1170,"title":{},"name":{},"text":{"11":{},"12":{},"30":{},"31":{},"48":{},"49":{},"66":{},"67":{},"84":{},"85":{},"106":{},"107":{},"120":{},"131":{}},"component":{}}],["wherev",{"_index":2503,"title":{},"name":{},"text":{"120":{}},"component":{}}],["whether",{"_index":1731,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{},"131":{}},"component":{}}],["whilst",{"_index":55,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"20":{},"22":{},"24":{},"38":{},"40":{},"42":{},"57":{},"59":{},"75":{},"77":{},"93":{},"98":{},"100":{}},"component":{}}],["wider",{"_index":306,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"59":{},"77":{},"98":{}},"component":{}}],["width",{"_index":1158,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["width=(int)1280",{"_index":2209,"title":{},"name":{},"text":{"19":{},"37":{},"56":{},"113":{}},"component":{}}],["width=(int)640",{"_index":1948,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["width={width",{"_index":1957,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"111":{}},"component":{}}],["wildli",{"_index":2668,"title":{},"name":{},"text":{"125":{}},"component":{}}],["window",{"_index":839,"title":{"136":{},"133-2":{},"133-3":{}},"name":{"136":{}},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"124":{},"127":{},"136":{}},"component":{}}],["wipe",{"_index":2266,"title":{},"name":{},"text":{"72":{},"90":{}},"component":{}}],["wire",{"_index":1443,"title":{},"name":{},"text":{"12":{},"31":{},"49":{},"67":{},"85":{},"107":{}},"component":{}}],["within",{"_index":2329,"title":{},"name":{},"text":{"95":{}},"component":{}}],["without",{"_index":43,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"7":{},"11":{},"17":{},"20":{},"21":{},"22":{},"24":{},"26":{},"30":{},"36":{},"38":{},"39":{},"40":{},"42":{},"44":{},"48":{},"54":{},"57":{},"58":{},"59":{},"62":{},"66":{},"75":{},"76":{},"77":{},"80":{},"84":{},"93":{},"97":{},"98":{},"100":{},"102":{},"106":{},"112":{},"115":{},"122":{},"125":{},"131":{}},"component":{}}],["wolf",{"_index":1,"title":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{},"6-2":{},"6-5":{},"6-6":{},"25-2":{},"25-5":{},"25-6":{},"43-2":{},"43-5":{},"43-6":{},"61-2":{},"61-5":{},"61-6":{},"79-2":{},"79-5":{},"79-6":{},"101-2":{},"101-5":{},"101-6":{},"124-7":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"9":{},"12":{},"13":{},"15":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"28":{},"31":{},"32":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"42":{},"43":{},"46":{},"49":{},"50":{},"52":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"61":{},"64":{},"67":{},"68":{},"70":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"79":{},"82":{},"85":{},"86":{},"88":{},"90":{},"91":{},"92":{},"93":{},"94":{},"96":{},"97":{},"98":{},"100":{},"101":{},"104":{},"107":{},"108":{},"110":{},"112":{},"113":{},"115":{},"121":{},"124":{},"127":{},"131":{}},"component":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{}}}],["wolf_cfg_fil",{"_index":1795,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["wolf_docker_fake_udev_path",{"_index":1827,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["wolf_docker_socket",{"_index":1816,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["wolf_encoder_nod",{"_index":1826,"title":{},"name":{},"text":{"15":{},"52":{},"110":{}},"component":{}}],["wolf_log_level",{"_index":1792,"title":{},"name":{},"text":{"15":{},"19":{},"34":{},"37":{},"52":{},"56":{},"70":{},"74":{},"88":{},"92":{},"110":{},"113":{}},"component":{}}],["wolf_private_cert_fil",{"_index":1801,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["wolf_private_key_fil",{"_index":1798,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["wolf_pulse_imag",{"_index":1807,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["wolf_render_nod",{"_index":1824,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["wolf_stop_container_on_exit",{"_index":1810,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["wolfemul",{"_index":2332,"title":{},"name":{},"text":{"95":{}},"component":{}}],["wolflutri",{"_index":2585,"title":{},"name":{},"text":{"124":{}},"component":{}}],["wolfsteam",{"_index":1847,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["wolfsupertux",{"_index":2614,"title":{},"name":{},"text":{"124":{}},"component":{}}],["wonder",{"_index":2883,"title":{},"name":{},"text":{"136":{}},"component":{}}],["won’t",{"_index":2130,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{},"128":{},"131":{}},"component":{}}],["work",{"_index":288,"title":{"5":{},"24":{},"42":{},"100":{},"72-1":{},"90-1":{},"127-1":{},"134-3":{}},"name":{"5":{},"24":{},"42":{},"100":{}},"text":{"3":{},"5":{},"6":{},"7":{},"15":{},"16":{},"17":{},"18":{},"19":{},"22":{},"24":{},"25":{},"26":{},"35":{},"36":{},"37":{},"40":{},"42":{},"43":{},"44":{},"52":{},"53":{},"54":{},"55":{},"56":{},"59":{},"61":{},"62":{},"70":{},"71":{},"73":{},"74":{},"77":{},"79":{},"80":{},"88":{},"89":{},"91":{},"92":{},"96":{},"98":{},"100":{},"101":{},"102":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"117":{},"118":{},"120":{},"123":{},"124":{},"127":{},"130":{},"131":{},"134":{}},"component":{}}],["worker",{"_index":2535,"title":{},"name":{},"text":{"123":{}},"component":{}}],["worri",{"_index":919,"title":{},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{}},"component":{}}],["wrap",{"_index":2403,"title":{},"name":{},"text":{"115":{}},"component":{}}],["writabl",{"_index":2429,"title":{},"name":{},"text":{"116":{}},"component":{}}],["write",{"_index":233,"title":{},"name":{},"text":{"2":{},"5":{},"7":{},"21":{},"24":{},"26":{},"39":{},"42":{},"44":{},"58":{},"62":{},"76":{},"80":{},"97":{},"100":{},"102":{},"116":{}},"component":{}}],["write’",{"_index":552,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"60":{},"78":{},"99":{}},"component":{}}],["written",{"_index":126,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["wrong",{"_index":2764,"title":{"133-4":{}},"name":{},"text":{"128":{},"129":{}},"component":{}}],["wsl2",{"_index":1969,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"112":{},"136":{}},"component":{}}],["x",{"_index":842,"title":{},"name":{},"text":{"7":{},"11":{},"14":{},"17":{},"26":{},"30":{},"33":{},"36":{},"44":{},"48":{},"51":{},"54":{},"62":{},"66":{},"69":{},"73":{},"80":{},"84":{},"87":{},"91":{},"102":{},"106":{},"109":{},"112":{},"126":{},"131":{}},"component":{}}],["x,i",{"_index":1161,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["x11",{"_index":821,"title":{},"name":{},"text":{"7":{},"16":{},"26":{},"35":{},"44":{},"53":{},"62":{},"71":{},"80":{},"89":{},"102":{},"111":{},"117":{},"120":{},"123":{}},"component":{}}],["x11docker",{"_index":2881,"title":{},"name":{},"text":{"135":{}},"component":{}}],["x509",{"_index":811,"title":{},"name":{},"text":{"6":{},"9":{},"25":{},"28":{},"43":{},"46":{},"61":{},"64":{},"79":{},"82":{},"101":{},"104":{}},"component":{}}],["x6b",{"_index":1293,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["x86_64.appimag",{"_index":2630,"title":{},"name":{},"text":{"124":{}},"component":{}}],["xbox",{"_index":1367,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["xdg_runtime_dir",{"_index":1804,"title":{},"name":{},"text":{"15":{},"34":{},"52":{},"70":{},"88":{},"110":{}},"component":{}}],["xdg_runtime_dir=/tmp/socket",{"_index":1970,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"73":{},"91":{},"112":{}},"component":{}}],["xemu",{"_index":2344,"title":{},"name":{},"text":{"95":{}},"component":{}}],["ximagesrc",{"_index":819,"title":{},"name":{},"text":{"7":{},"16":{},"26":{},"35":{},"44":{},"53":{},"62":{},"71":{},"80":{},"89":{},"102":{},"111":{}},"component":{}}],["xorg",{"_index":822,"title":{"115-2":{},"125-3":{},"125-5":{},"126-3":{},"134-5":{},"134-6":{}},"name":{},"text":{"7":{},"26":{},"44":{},"62":{},"80":{},"102":{},"115":{},"119":{},"120":{},"123":{},"125":{},"126":{},"127":{},"128":{},"131":{},"134":{},"135":{},"136":{}},"component":{}}],["xorg.0.log",{"_index":2866,"title":{},"name":{},"text":{"134":{}},"component":{}}],["xorg.99.log",{"_index":2865,"title":{},"name":{},"text":{"134":{}},"component":{}}],["xorg.conf",{"_index":2767,"title":{},"name":{},"text":{"128":{}},"component":{}}],["xorg_display",{"_index":2446,"title":{},"name":{},"text":{"116":{}},"component":{}}],["xorg_display_port",{"_index":2697,"title":{},"name":{},"text":{"125":{}},"component":{}}],["xr",{"_index":2721,"title":{},"name":{},"text":{"126":{}},"component":{}}],["xvfb",{"_index":2416,"title":{},"name":{},"text":{"115":{}},"component":{}}],["xwayland",{"_index":582,"title":{},"name":{},"text":{"5":{},"24":{},"42":{},"100":{}},"component":{}}],["y",{"_index":659,"title":{},"name":{},"text":{"6":{},"11":{},"17":{},"19":{},"25":{},"30":{},"36":{},"37":{},"43":{},"48":{},"54":{},"56":{},"61":{},"66":{},"73":{},"74":{},"79":{},"84":{},"91":{},"92":{},"101":{},"106":{},"112":{},"113":{}},"component":{}}],["yaml",{"_index":2495,"title":{},"name":{},"text":{"119":{},"124":{}},"component":{}}],["ye",{"_index":2772,"title":{},"name":{},"text":{"128":{}},"component":{}}],["year",{"_index":2639,"title":{},"name":{},"text":{"124":{}},"component":{}}],["yhirose/cpp",{"_index":231,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"58":{},"76":{},"97":{}},"component":{}}],["yml",{"_index":2810,"title":{},"name":{},"text":{"131":{}},"component":{}}],["yourself",{"_index":2487,"title":{},"name":{},"text":{"119":{},"128":{}},"component":{}}],["youtub",{"_index":1932,"title":{},"name":{},"text":{"16":{},"35":{},"53":{},"71":{},"89":{},"95":{},"111":{},"127":{}},"component":{}}],["you’d",{"_index":2808,"title":{},"name":{},"text":{"131":{}},"component":{}}],["you’ll",{"_index":978,"title":{},"name":{},"text":{"8":{},"17":{},"19":{},"27":{},"36":{},"37":{},"45":{},"54":{},"56":{},"63":{},"73":{},"74":{},"81":{},"91":{},"92":{},"103":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{},"119":{},"120":{},"125":{},"126":{},"127":{},"129":{},"131":{}},"component":{}}],["you’r",{"_index":2414,"title":{},"name":{},"text":{"115":{},"116":{},"126":{},"127":{},"129":{},"131":{},"132":{},"134":{},"135":{}},"component":{}}],["you’v",{"_index":2457,"title":{},"name":{},"text":{"117":{},"119":{},"129":{},"131":{},"132":{}},"component":{}}],["yumichan.net",{"_index":1478,"title":{},"name":{},"text":{"13":{},"32":{},"50":{},"68":{},"86":{},"108":{}},"component":{}}],["z",{"_index":1273,"title":{},"name":{},"text":{"11":{},"30":{},"48":{},"66":{},"84":{},"106":{}},"component":{}}],["zb140",{"_index":96,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"57":{},"75":{},"93":{}},"component":{}}],["zero",{"_index":953,"title":{},"name":{},"text":{"7":{},"13":{},"14":{},"26":{},"32":{},"33":{},"44":{},"50":{},"51":{},"62":{},"68":{},"69":{},"80":{},"86":{},"87":{},"102":{},"108":{},"109":{}},"component":{}}],["zone",{"_index":2424,"title":{"116-2":{}},"name":{},"text":{"116":{}},"component":{}}]],"pipeline":["stemmer"]},"store":{"documents":{"1":{"id":1,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"dev-backend-api","name":"index","url":"/wolf/dev-backend-api/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"2":{"id":2,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: a simple abstraction on top of libpulse to create and control virtual audio devices. A little standalone CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. In order to keep modules decoupled most of the logic revolves around reacting to events in a shared event bus (implemented using DeveloperPaul123/eventbus). Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"dev-backend-api","name":"code-structure","url":"/wolf/dev-backend-api/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"3":{"id":3,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"dev-backend-api","name":"fake-udev","url":"/wolf/dev-backend-api/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"4":{"id":4,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"dev-backend-api","name":"gstreamer","url":"/wolf/dev-backend-api/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"5":{"id":5,"text":"Wolf is composed of a few independent components that, when used together, allow us to run and stream multiple graphical applications on the same server without any overlap between them. In order to create virtual desktops on-demand, we’ve created a custom (micro) Wayland compositor: gst-wayland-display. It’s based on Smithay, coded in Rust and exposes both a standalone GStreamer plugin and an easy-to-use C API. The main benefit of this solution is that our compositor will then expose the raw framebuffer so that Wolf can feed that directly to the video encoding pipeline. You can read more about it in Headless Wayland. To keep things simple, our Wayland compositor doesn’t support XWayland, for containers that need it (like Steam) we use Gamescope which can be run as a Wayland client, and it’ll provide XWayland support to the downstream app. Audio doesn’t need any HW acceleration, it’s fairly trivial to run PulseAudio as a standalone container and use libpulse in order to create virtual audio sink on-demand. Creating and managing virtual devices is handled by inputtino: a small library that abstracts away the complexities of managing uinput (and uhid) to create virtual input devices. Virtual devices created by inputtino will be visible on the host system and can potentially break the host isolation that we’re trying to achieve. In order to avoid this, we encourage users to install a set of udev rules that will restrict access to these devices to a specific group (e.g. input) and move mouse and keyboard to a different seat (see user:quickstart.adoc#_virtual_devices_support). You can read a more detailed explanation into why we’ve added uhid and how gyro/acceleration is achieved here Some devices like mouse and keyboard are always present and will be automatically created and setup before starting the application. Other devices can be hotplugged whilst the streaming is running; for example, a gamepad can be plugged in after the game has started. Special care is needed in order to safely mount these new devices in the app container and to make them available to the running application, there’s an in-depth article about it here: Hotplug in Docker We run applications in a containerised environment, this way we can ensure that the application will not interfere with the host system (and with other running apps) and that it will have access only to the virtual devices that we’ve created. We have a set of pre-built containers that are optimised to work with our flow in games-on-whales/gow. Generally, though, most of the GUI applications should work inside a container that can then be streamed via Wolf. We use GStreamer to encode the video and audio streams and send them to the client. We have automatic support for HW acceleration using CUDA, QuickSync and VAAPI but thanks to GStreamer we can easily add more encoders into the mix, without having to write a single line of code! The full encoding pipeline is described in a string that can be overridden by users just by changing the config.toml file. We’ve implemented a couple of custom GStreamer plugins in order to properly split, RTP encode and add FEC to the resulting buffers into the format that Moonlight expects; they live in here: src/moonlight-server/gst-plugin.","title":"How does it work?","component":"wolf","version":"dev-backend-api","name":"how-it-works","url":"/wolf/dev-backend-api/dev/how-it-works.html","titles":[{"text":"Virtual desktop","hash":"_virtual_desktop","id":1},{"text":"Virtual audio","hash":"_virtual_audio","id":2},{"text":"Virtual input devices","hash":"_virtual_input_devices","id":3},{"text":"Support hotplug via fake-udev","hash":"_support_hotplug_via_fake_udev","id":4},{"text":"Running applications/games","hash":"_running_applicationsgames","id":5},{"text":"Streaming","hash":"_streaming","id":6}]},"6":{"id":6,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxing-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.24.6 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev libboost-container-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"dev-backend-api","name":"manual_build","url":"/wolf/dev-backend-api/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"7":{"id":7,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"dev-backend-api","name":"wayland","url":"/wolf/dev-backend-api/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"8":{"id":8,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"dev-backend-api","name":"control-specs","url":"/wolf/dev-backend-api/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"9":{"id":9,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"dev-backend-api","name":"http-pairing","url":"/wolf/dev-backend-api/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"10":{"id":10,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"dev-backend-api","name":"index","url":"/wolf/dev-backend-api/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"11":{"id":11,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"dev-backend-api","name":"input-data","url":"/wolf/dev-backend-api/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"12":{"id":12,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"dev-backend-api","name":"rtp-opus","url":"/wolf/dev-backend-api/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"13":{"id":13,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"dev-backend-api","name":"rtp-video","url":"/wolf/dev-backend-api/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"14":{"id":14,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"dev-backend-api","name":"rtsp","url":"/wolf/dev-backend-api/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"15":{"id":15,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_ENCODER_NODE $WOLF_RENDER_NODE The default render node used for the Gstreamer pipelines; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools Since Wolf supports multiple streaming sessions at the same time and each session can run a different app, we need to make sure that each app has its own folder where it can store permanent data. To achieve this, for each running app, Wolf will create a folder structure like this: ${HOST_APPS_STATE_FOLDER}/${app_state_folder}/${app_title} and then mount that as the home (/home/retro) for the docker container that will run the selected app. These 3 variables are defined as follows: HOST_APPS_STATE_FOLDER: defaults to /etc/wolf, can be changed via ENV app_state_folder: defaults to a unique identifier for each client so that every Moonlight session will have its own folder. Can be changed in the config.toml file app_title: the title of the app as defined in the config.toml file This will break isolation, if you want to connect with multiple clients at the same time you should not share the home folder. You can follow development of that feature here By default, Wolf will create a new home folder for each client, but if you want to share the same home folder with multiple clients, you can set the app_state_folder to the same value for each paired client; example: [[paired_clients]] app_state_folder = \"common\" # ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\" The easy way to control this is to just edit the env variable WOLF_ENCODER_NODE (defaults to match WOLF_RENDER_NODE in order to use the same GPU for both), this will set the default render node used for the Gstreamer pipelines. The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used. If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either: Delete the nvcodec entries under gstreamer.video.hevc_encoders Cut the qsv entry and paste it above the nvcodec entry On top of that, each single apps entry support overriding the default streaming pipeline; for example: [[apps]] title = \"Test ball\" # More options here, removed for brevity... [apps.video] source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the video_params with the corresponding encoder plugin; see: gstreamer/issues/1167. This has been moved to the Steam page.","title":"Configuration","component":"wolf","version":"dev-backend-api","name":"configuration","url":"/wolf/dev-backend-api/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"Where apps will store permanent data?","hash":"data_setup","id":2},{"text":"Share home folder with multiple clients","hash":"_share_home_folder_with_multiple_clients","id":3},{"text":"Change the HOST_APPS_STATE_FOLDER","hash":"_change_the_host_apps_state_folder","id":4},{"text":"TOML file","hash":"_toml_file","id":5},{"text":"Defining apps","hash":"_defining_apps","id":6},{"text":"Override the default joypad mapping","hash":"_override_the_default_joypad_mapping","id":7},{"text":"App Runner","hash":"_app_runner","id":8},{"text":"Process","hash":"_process","id":9},{"text":"Docker","hash":"_docker","id":10},{"text":"Gstreamer","hash":"_gstreamer","id":11},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":12},{"text":"App render node","hash":"_app_render_node","id":13},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":14},{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":15}]},"16":{"id":16,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"dev-backend-api","name":"gstreamer","url":"/wolf/dev-backend-api/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"17":{"id":17,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia (Container Toolkit) Nvidia (Manual) WSL2 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid network_mode: host restart: unless-stopped Make sure that the version of the Nvidia container toolkit is >= 1.16.0 and that your driver version is >= 530.30.02 (you can check the driver version with nvidia-smi). sudo nvidia-container-cli -V cli-version: 1.16.0 lib-version: 1.16.0 build date: 2024-07-15T13:41+00:00 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ -e NVIDIA_DRIVER_CAPABILITIES=all \\ -e NVIDIA_VISIBLE_DEVICES=all \\ --gpus=all \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf - NVIDIA_DRIVER_CAPABILITIES=all - NVIDIA_VISIBLE_DEVICES=all volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid runtime: nvidia deploy: resources: reservations: devices: - capabilities: [gpu] network_mode: host restart: unless-stopped Unfortunately, on Nvidia, things are a little bit more complex.. Make sure that your driver version is >= 530.30.02 First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/uhid - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Running Wolf in WSL2 hasn’t been properly tested. You can run Wolf in a very unprivileged setting without uinput/uhid, unfortunately this means that you’ll be restricted to only using mouse and keyboard. For Nvidia users, follow the Nvidia instructions above. This should work for AMD/Intel users. docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ ghcr.io/games-on-whales/wolf:stable Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users, you can open more ports if needed) EXPOSE 48100-48110/udp # Audio (up to 10 users, you can open more ports if needed) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Allows Wolf to access /dev/uhid KERNEL==\"uhid\", TAG+=\"uaccess\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"dev-backend-api","name":"quickstart","url":"/wolf/dev-backend-api/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"18":{"id":18,"text":"One of the pre-installed applications in the default Wolf configuration is Steam. Getting Steam to work in a headless container took some work, so this page lists some limitations and tips to get the most out of Steam. In order to directly launch a Steam game from Moonlight you can just copy the existing entry for Steam, change the name and just add the Steam app ID as env variable; example: [[apps]] title = \"Elden Ring\" start_virtual_compositor = true [apps.runner] env = [ \"PROTON_LOG=1\", \"RUN_SWAY=true\", \"GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*\", \"STEAM_STARTUP_FLAGS=steam://rungameid/1245620\" ] # COPY EVERYTHING ELSE ... You can get the app ID from https://steamdb.info/ (Thanks to @nathanle1406 for the tip) The steam overlay currently does not work in our headless container. So if you want to see FPS and other stats you can use FlightlessMango’s excellent MangoHud. It’s already installed and enabled in the default steam image for all Vulkan games (including Proton games). See below for how to activate it in game. While mangohud is already installed, there’s no way to globally enable it for all OpenGL games. You can still enable it on a per-game basis by adding mangohud %command% to the game’s launch options in Steam. In a game, you can press Right Shift + F12 to make the overlay appear and disappear. You can also press Right Shift + F11 to change the position of the overlay on screen.","title":"Steam","component":"wolf","version":"dev-backend-api","name":"steam","url":"/wolf/dev-backend-api/user/steam.html","titles":[{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":1},{"text":"MangoHud","hash":"_mangohud","id":2},{"text":"Proton (Steam Play) and other Vulkan games","hash":"_proton_steam_play_and_other_vulkan_games","id":3},{"text":"OpenGL (Native Linux) games","hash":"_opengl_native_linux_games","id":4},{"text":"Activation and configuration","hash":"_activation_and_configuration","id":5}]},"19":{"id":19,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page Example log line: 0:01:31.983118812 1 0x7f1d50000b70 ERROR qsvencoder gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_session: MFXVideoENCODE::Query failed -3 (MFX_ERR_UNSUPPORTED) 0:01:31.983243805 1 0x7f1d50000b70 WARN videoencoder gstvideoencoder.c:771:gst_video_encoder_setcaps: rejected caps video/x-raw(memory:VAMemory), width=(int)1280, height=(int)720, framerate=(fraction)60/1, format=(string)NV12, chroma-site=(string)mpeg2, colorimetry=(string)bt601 Follow the steps outlined in here: sudo apt install --reinstall linux-firmware Add i915.enable_guc=2 in /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash i915.force_probe=* i915.enable_guc=2\" sudo update-initramfs –u sudo update-grub Reboot the system. After reboot, execute the command: dmesg | grep guc Verify the logs for guc information. Note: If output doesn’t contain guc details, then install the latest guc/huc firmware. Copy the firmware to /lib/firmware/i915/, and reboot the system.","title":"Troubleshooting","component":"wolf","version":"dev-backend-api","name":"troubleshooting","url":"/wolf/dev-backend-api/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4},{"text":"Intel: MFX_ERR_UNSUPPORTED","hash":"_intel_mfx_err_unsupported","id":5}]},"20":{"id":20,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"dev-fake-uinput","name":"index","url":"/wolf/dev-fake-uinput/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"21":{"id":21,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: a simple abstraction on top of libpulse to create and control virtual audio devices. A little standalone CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. In order to keep modules decoupled most of the logic revolves around reacting to events in a shared event bus (implemented using DeveloperPaul123/eventbus). Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"dev-fake-uinput","name":"code-structure","url":"/wolf/dev-fake-uinput/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"22":{"id":22,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"dev-fake-uinput","name":"fake-udev","url":"/wolf/dev-fake-uinput/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"23":{"id":23,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"dev-fake-uinput","name":"gstreamer","url":"/wolf/dev-fake-uinput/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"24":{"id":24,"text":"Wolf is composed of a few independent components that, when used together, allow us to run and stream multiple graphical applications on the same server without any overlap between them. In order to create virtual desktops on-demand, we’ve created a custom (micro) Wayland compositor: gst-wayland-display. It’s based on Smithay, coded in Rust and exposes both a standalone GStreamer plugin and an easy-to-use C API. The main benefit of this solution is that our compositor will then expose the raw framebuffer so that Wolf can feed that directly to the video encoding pipeline. You can read more about it in Headless Wayland. To keep things simple, our Wayland compositor doesn’t support XWayland, for containers that need it (like Steam) we use Gamescope which can be run as a Wayland client, and it’ll provide XWayland support to the downstream app. Audio doesn’t need any HW acceleration, it’s fairly trivial to run PulseAudio as a standalone container and use libpulse in order to create virtual audio sink on-demand. Creating and managing virtual devices is handled by inputtino: a small library that abstracts away the complexities of managing uinput (and uhid) to create virtual input devices. Virtual devices created by inputtino will be visible on the host system and can potentially break the host isolation that we’re trying to achieve. In order to avoid this, we encourage users to install a set of udev rules that will restrict access to these devices to a specific group (e.g. input) and move mouse and keyboard to a different seat (see user:quickstart.adoc#_virtual_devices_support). You can read a more detailed explanation into why we’ve added uhid and how gyro/acceleration is achieved here Some devices like mouse and keyboard are always present and will be automatically created and setup before starting the application. Other devices can be hotplugged whilst the streaming is running; for example, a gamepad can be plugged in after the game has started. Special care is needed in order to safely mount these new devices in the app container and to make them available to the running application, there’s an in-depth article about it here: Hotplug in Docker We run applications in a containerised environment, this way we can ensure that the application will not interfere with the host system (and with other running apps) and that it will have access only to the virtual devices that we’ve created. We have a set of pre-built containers that are optimised to work with our flow in games-on-whales/gow. Generally, though, most of the GUI applications should work inside a container that can then be streamed via Wolf. We use GStreamer to encode the video and audio streams and send them to the client. We have automatic support for HW acceleration using CUDA, QuickSync and VAAPI but thanks to GStreamer we can easily add more encoders into the mix, without having to write a single line of code! The full encoding pipeline is described in a string that can be overridden by users just by changing the config.toml file. We’ve implemented a couple of custom GStreamer plugins in order to properly split, RTP encode and add FEC to the resulting buffers into the format that Moonlight expects; they live in here: src/moonlight-server/gst-plugin.","title":"How does it work?","component":"wolf","version":"dev-fake-uinput","name":"how-it-works","url":"/wolf/dev-fake-uinput/dev/how-it-works.html","titles":[{"text":"Virtual desktop","hash":"_virtual_desktop","id":1},{"text":"Virtual audio","hash":"_virtual_audio","id":2},{"text":"Virtual input devices","hash":"_virtual_input_devices","id":3},{"text":"Support hotplug via fake-udev","hash":"_support_hotplug_via_fake_udev","id":4},{"text":"Running applications/games","hash":"_running_applicationsgames","id":5},{"text":"Streaming","hash":"_streaming","id":6}]},"25":{"id":25,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxing-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.22.7 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev libboost-container-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"dev-fake-uinput","name":"manual_build","url":"/wolf/dev-fake-uinput/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"26":{"id":26,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"dev-fake-uinput","name":"wayland","url":"/wolf/dev-fake-uinput/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"27":{"id":27,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"dev-fake-uinput","name":"control-specs","url":"/wolf/dev-fake-uinput/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"28":{"id":28,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"dev-fake-uinput","name":"http-pairing","url":"/wolf/dev-fake-uinput/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"29":{"id":29,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"dev-fake-uinput","name":"index","url":"/wolf/dev-fake-uinput/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"30":{"id":30,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"dev-fake-uinput","name":"input-data","url":"/wolf/dev-fake-uinput/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"31":{"id":31,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"dev-fake-uinput","name":"rtp-opus","url":"/wolf/dev-fake-uinput/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"32":{"id":32,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"dev-fake-uinput","name":"rtp-video","url":"/wolf/dev-fake-uinput/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"33":{"id":33,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"dev-fake-uinput","name":"rtsp","url":"/wolf/dev-fake-uinput/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"34":{"id":34,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools Since Wolf supports multiple streaming sessions at the same time and each session can run a different app, we need to make sure that each app has its own folder where it can store permanent data. To achieve this, for each running app, Wolf will create a folder structure like this: ${HOST_APPS_STATE_FOLDER}/${app_state_folder}/${app_title} and then mount that as the home (/home/retro) for the docker container that will run the selected app. These 3 variables are defined as follows: HOST_APPS_STATE_FOLDER: defaults to /etc/wolf, can be changed via ENV app_state_folder: defaults to a unique identifier for each client so that every Moonlight session will have its own folder. Can be changed in the config.toml file app_title: the title of the app as defined in the config.toml file By default, Wolf will create a new home folder for each client, but if you want to share the same home folder with multiple clients, you can set the app_state_folder to the same value for each paired client; example: [[paired_clients]] app_state_folder = \"common\" # ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\" In order to directly launch a Steam game from Moonlight you can just copy the existing entry for Steam, change the name and just add the Steam app ID as env variable; example: [[apps]] title = \"Elden Ring\" start_virtual_compositor = true [apps.runner] env = [ \"PROTON_LOG=1\", \"RUN_SWAY=true\", \"GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*\", \"STEAM_STARTUP_FLAGS=steam://rungameid/1245620\" ] # COPY EVERYTHING ELSE ... You can get the app ID from https://steamdb.info/ (Thanks to @nathanle1406 for the tip)","title":"Configuration","component":"wolf","version":"dev-fake-uinput","name":"configuration","url":"/wolf/dev-fake-uinput/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"Where apps will store permanent data?","hash":"data_setup","id":2},{"text":"Share home folder with multiple clients","hash":"_share_home_folder_with_multiple_clients","id":3},{"text":"Change the HOST_APPS_STATE_FOLDER","hash":"_change_the_host_apps_state_folder","id":4},{"text":"TOML file","hash":"_toml_file","id":5},{"text":"Defining apps","hash":"_defining_apps","id":6},{"text":"Override the default joypad mapping","hash":"_override_the_default_joypad_mapping","id":7},{"text":"App Runner","hash":"_app_runner","id":8},{"text":"Process","hash":"_process","id":9},{"text":"Docker","hash":"_docker","id":10},{"text":"Gstreamer","hash":"_gstreamer","id":11},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":12},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":13},{"text":"App render node","hash":"_app_render_node","id":14},{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":15}]},"35":{"id":35,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"dev-fake-uinput","name":"gstreamer","url":"/wolf/dev-fake-uinput/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"36":{"id":36,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia (Container Toolkit) Nvidia (Manual) WSL2 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid network_mode: host restart: unless-stopped Make sure that the version of the Nvidia container toolkit is >= 1.16.0 and that your driver version is >= 530.30.02 (you can check the driver version with nvidia-smi). sudo nvidia-container-cli -V cli-version: 1.16.0 lib-version: 1.16.0 build date: 2024-07-15T13:41+00:00 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --gpus=all \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid runtime: nvidia deploy: resources: reservations: devices: - capabilities: [gpu] network_mode: host restart: unless-stopped Unfortunately, on Nvidia, things are a little bit more complex.. Make sure that your driver version is >= 530.30.02 First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/uhid - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Running Wolf in WSL2 hasn’t been properly tested. You can run Wolf in a very unprivileged setting without uinput/uhid, unfortunately this means that you’ll be restricted to only using mouse and keyboard. For Nvidia users, follow the Nvidia instructions above. This should work for AMD/Intel users. docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ ghcr.io/games-on-whales/wolf:stable Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users, you can open more ports if needed) EXPOSE 48100-48110/udp # Audio (up to 10 users, you can open more ports if needed) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Allows Wolf to access /dev/uhid KERNEL==\"uhid\", TAG+=\"uaccess\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"dev-fake-uinput","name":"quickstart","url":"/wolf/dev-fake-uinput/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"37":{"id":37,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page Example log line: 0:01:31.983118812 1 0x7f1d50000b70 ERROR qsvencoder gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_session: MFXVideoENCODE::Query failed -3 (MFX_ERR_UNSUPPORTED) 0:01:31.983243805 1 0x7f1d50000b70 WARN videoencoder gstvideoencoder.c:771:gst_video_encoder_setcaps: rejected caps video/x-raw(memory:VAMemory), width=(int)1280, height=(int)720, framerate=(fraction)60/1, format=(string)NV12, chroma-site=(string)mpeg2, colorimetry=(string)bt601 Follow the steps outlined in here: sudo apt install --reinstall linux-firmware Add i915.enable_guc=2 in /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash i915.force_probe=* i915.enable_guc=2\" sudo update-initramfs –u sudo update-grub Reboot the system. After reboot, execute the command: dmesg | grep guc Verify the logs for guc information. Note: If output doesn’t contain guc details, then install the latest guc/huc firmware. Copy the firmware to /lib/firmware/i915/, and reboot the system.","title":"Troubleshooting","component":"wolf","version":"dev-fake-uinput","name":"troubleshooting","url":"/wolf/dev-fake-uinput/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4},{"text":"Intel: MFX_ERR_UNSUPPORTED","hash":"_intel_mfx_err_unsupported","id":5}]},"38":{"id":38,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"dev-fix-109","name":"index","url":"/wolf/dev-fix-109/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"39":{"id":39,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: a simple abstraction on top of libpulse to create and control virtual audio devices. A little standalone CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. In order to keep modules decoupled most of the logic revolves around reacting to events in a shared event bus (implemented using DeveloperPaul123/eventbus). Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"dev-fix-109","name":"code-structure","url":"/wolf/dev-fix-109/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"40":{"id":40,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"dev-fix-109","name":"fake-udev","url":"/wolf/dev-fix-109/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"41":{"id":41,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"dev-fix-109","name":"gstreamer","url":"/wolf/dev-fix-109/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"42":{"id":42,"text":"Wolf is composed of a few independent components that, when used together, allow us to run and stream multiple graphical applications on the same server without any overlap between them. In order to create virtual desktops on-demand, we’ve created a custom (micro) Wayland compositor: gst-wayland-display. It’s based on Smithay, coded in Rust and exposes both a standalone GStreamer plugin and an easy-to-use C API. The main benefit of this solution is that our compositor will then expose the raw framebuffer so that Wolf can feed that directly to the video encoding pipeline. You can read more about it in Headless Wayland. To keep things simple, our Wayland compositor doesn’t support XWayland, for containers that need it (like Steam) we use Gamescope which can be run as a Wayland client, and it’ll provide XWayland support to the downstream app. Audio doesn’t need any HW acceleration, it’s fairly trivial to run PulseAudio as a standalone container and use libpulse in order to create virtual audio sink on-demand. Creating and managing virtual devices is handled by inputtino: a small library that abstracts away the complexities of managing uinput (and uhid) to create virtual input devices. Virtual devices created by inputtino will be visible on the host system and can potentially break the host isolation that we’re trying to achieve. In order to avoid this, we encourage users to install a set of udev rules that will restrict access to these devices to a specific group (e.g. input) and move mouse and keyboard to a different seat (see user:quickstart.adoc#_virtual_devices_support). You can read a more detailed explanation into why we’ve added uhid and how gyro/acceleration is achieved here Some devices like mouse and keyboard are always present and will be automatically created and setup before starting the application. Other devices can be hotplugged whilst the streaming is running; for example, a gamepad can be plugged in after the game has started. Special care is needed in order to safely mount these new devices in the app container and to make them available to the running application, there’s an in-depth article about it here: Hotplug in Docker We run applications in a containerised environment, this way we can ensure that the application will not interfere with the host system (and with other running apps) and that it will have access only to the virtual devices that we’ve created. We have a set of pre-built containers that are optimised to work with our flow in games-on-whales/gow. Generally, though, most of the GUI applications should work inside a container that can then be streamed via Wolf. We use GStreamer to encode the video and audio streams and send them to the client. We have automatic support for HW acceleration using CUDA, QuickSync and VAAPI but thanks to GStreamer we can easily add more encoders into the mix, without having to write a single line of code! The full encoding pipeline is described in a string that can be overridden by users just by changing the config.toml file. We’ve implemented a couple of custom GStreamer plugins in order to properly split, RTP encode and add FEC to the resulting buffers into the format that Moonlight expects; they live in here: src/moonlight-server/gst-plugin.","title":"How does it work?","component":"wolf","version":"dev-fix-109","name":"how-it-works","url":"/wolf/dev-fix-109/dev/how-it-works.html","titles":[{"text":"Virtual desktop","hash":"_virtual_desktop","id":1},{"text":"Virtual audio","hash":"_virtual_audio","id":2},{"text":"Virtual input devices","hash":"_virtual_input_devices","id":3},{"text":"Support hotplug via fake-udev","hash":"_support_hotplug_via_fake_udev","id":4},{"text":"Running applications/games","hash":"_running_applicationsgames","id":5},{"text":"Streaming","hash":"_streaming","id":6}]},"43":{"id":43,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxing-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.24.6 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev libboost-container-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"dev-fix-109","name":"manual_build","url":"/wolf/dev-fix-109/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"44":{"id":44,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"dev-fix-109","name":"wayland","url":"/wolf/dev-fix-109/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"45":{"id":45,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"dev-fix-109","name":"control-specs","url":"/wolf/dev-fix-109/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"46":{"id":46,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"dev-fix-109","name":"http-pairing","url":"/wolf/dev-fix-109/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"47":{"id":47,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"dev-fix-109","name":"index","url":"/wolf/dev-fix-109/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"48":{"id":48,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"dev-fix-109","name":"input-data","url":"/wolf/dev-fix-109/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"49":{"id":49,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"dev-fix-109","name":"rtp-opus","url":"/wolf/dev-fix-109/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"50":{"id":50,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"dev-fix-109","name":"rtp-video","url":"/wolf/dev-fix-109/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"51":{"id":51,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"dev-fix-109","name":"rtsp","url":"/wolf/dev-fix-109/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"52":{"id":52,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_ENCODER_NODE $WOLF_RENDER_NODE The default render node used for the Gstreamer pipelines; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools Since Wolf supports multiple streaming sessions at the same time and each session can run a different app, we need to make sure that each app has its own folder where it can store permanent data. To achieve this, for each running app, Wolf will create a folder structure like this: ${HOST_APPS_STATE_FOLDER}/${app_state_folder}/${app_title} and then mount that as the home (/home/retro) for the docker container that will run the selected app. These 3 variables are defined as follows: HOST_APPS_STATE_FOLDER: defaults to /etc/wolf, can be changed via ENV app_state_folder: defaults to a unique identifier for each client so that every Moonlight session will have its own folder. Can be changed in the config.toml file app_title: the title of the app as defined in the config.toml file This will break isolation, if you want to connect with multiple clients at the same time you should not share the home folder. You can follow development of that feature here By default, Wolf will create a new home folder for each client, but if you want to share the same home folder with multiple clients, you can set the app_state_folder to the same value for each paired client; example: [[paired_clients]] app_state_folder = \"common\" # ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\" The easy way to control this is to just edit the env variable WOLF_ENCODER_NODE (defaults to match WOLF_RENDER_NODE in order to use the same GPU for both), this will set the default render node used for the Gstreamer pipelines. The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used. If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either: Delete the nvcodec entries under gstreamer.video.hevc_encoders Cut the qsv entry and paste it above the nvcodec entry On top of that, each single apps entry support overriding the default streaming pipeline; for example: [[apps]] title = \"Test ball\" # More options here, removed for brevity... [apps.video] source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the video_params with the corresponding encoder plugin; see: gstreamer/issues/1167. This has been moved to the Steam page.","title":"Configuration","component":"wolf","version":"dev-fix-109","name":"configuration","url":"/wolf/dev-fix-109/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"Where apps will store permanent data?","hash":"data_setup","id":2},{"text":"Share home folder with multiple clients","hash":"_share_home_folder_with_multiple_clients","id":3},{"text":"Change the HOST_APPS_STATE_FOLDER","hash":"_change_the_host_apps_state_folder","id":4},{"text":"TOML file","hash":"_toml_file","id":5},{"text":"Defining apps","hash":"_defining_apps","id":6},{"text":"Override the default joypad mapping","hash":"_override_the_default_joypad_mapping","id":7},{"text":"App Runner","hash":"_app_runner","id":8},{"text":"Process","hash":"_process","id":9},{"text":"Docker","hash":"_docker","id":10},{"text":"Gstreamer","hash":"_gstreamer","id":11},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":12},{"text":"App render node","hash":"_app_render_node","id":13},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":14},{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":15}]},"53":{"id":53,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"dev-fix-109","name":"gstreamer","url":"/wolf/dev-fix-109/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"54":{"id":54,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia (Container Toolkit) Nvidia (Manual) WSL2 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid network_mode: host restart: unless-stopped Make sure that the version of the Nvidia container toolkit is >= 1.16.0 and that your driver version is >= 530.30.02 (you can check the driver version with nvidia-smi). sudo nvidia-container-cli -V cli-version: 1.16.0 lib-version: 1.16.0 build date: 2024-07-15T13:41+00:00 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ -e NVIDIA_DRIVER_CAPABILITIES=all \\ -e NVIDIA_VISIBLE_DEVICES=all \\ --gpus=all \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf - NVIDIA_DRIVER_CAPABILITIES=all - NVIDIA_VISIBLE_DEVICES=all volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid runtime: nvidia deploy: resources: reservations: devices: - capabilities: [gpu] network_mode: host restart: unless-stopped Unfortunately, on Nvidia, things are a little bit more complex.. Make sure that your driver version is >= 530.30.02 First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/uhid - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Running Wolf in WSL2 hasn’t been properly tested. You can run Wolf in a very unprivileged setting without uinput/uhid, unfortunately this means that you’ll be restricted to only using mouse and keyboard. For Nvidia users, follow the Nvidia instructions above. This should work for AMD/Intel users. docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ ghcr.io/games-on-whales/wolf:stable Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users, you can open more ports if needed) EXPOSE 48100-48110/udp # Audio (up to 10 users, you can open more ports if needed) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Allows Wolf to access /dev/uhid KERNEL==\"uhid\", TAG+=\"uaccess\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"dev-fix-109","name":"quickstart","url":"/wolf/dev-fix-109/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"55":{"id":55,"text":"One of the pre-installed applications in the default Wolf configuration is Steam. Getting Steam to work in a headless container took some work, so this page lists some limitations and tips to get the most out of Steam. In order to directly launch a Steam game from Moonlight you can just copy the existing entry for Steam, change the name and just add the Steam app ID as env variable; example: [[apps]] title = \"Elden Ring\" start_virtual_compositor = true [apps.runner] env = [ \"PROTON_LOG=1\", \"RUN_SWAY=true\", \"GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*\", \"STEAM_STARTUP_FLAGS=steam://rungameid/1245620\" ] # COPY EVERYTHING ELSE ... You can get the app ID from https://steamdb.info/ (Thanks to @nathanle1406 for the tip) The steam overlay currently does not work in our headless container. So if you want to see FPS and other stats you can use FlightlessMango’s excellent MangoHud. It’s already installed and enabled in the default steam image for all Vulkan games (including Proton games). See below for how to activate it in game. While mangohud is already installed, there’s no way to globally enable it for all OpenGL games. You can still enable it on a per-game basis by adding mangohud %command% to the game’s launch options in Steam. In a game, you can press Right Shift + F12 to make the overlay appear and disappear. You can also press Right Shift + F11 to change the position of the overlay on screen.","title":"Steam","component":"wolf","version":"dev-fix-109","name":"steam","url":"/wolf/dev-fix-109/user/steam.html","titles":[{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":1},{"text":"MangoHud","hash":"_mangohud","id":2},{"text":"Proton (Steam Play) and other Vulkan games","hash":"_proton_steam_play_and_other_vulkan_games","id":3},{"text":"OpenGL (Native Linux) games","hash":"_opengl_native_linux_games","id":4},{"text":"Activation and configuration","hash":"_activation_and_configuration","id":5}]},"56":{"id":56,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page Example log line: 0:01:31.983118812 1 0x7f1d50000b70 ERROR qsvencoder gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_session: MFXVideoENCODE::Query failed -3 (MFX_ERR_UNSUPPORTED) 0:01:31.983243805 1 0x7f1d50000b70 WARN videoencoder gstvideoencoder.c:771:gst_video_encoder_setcaps: rejected caps video/x-raw(memory:VAMemory), width=(int)1280, height=(int)720, framerate=(fraction)60/1, format=(string)NV12, chroma-site=(string)mpeg2, colorimetry=(string)bt601 Follow the steps outlined in here: sudo apt install --reinstall linux-firmware Add i915.enable_guc=2 in /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash i915.force_probe=* i915.enable_guc=2\" sudo update-initramfs –u sudo update-grub Reboot the system. After reboot, execute the command: dmesg | grep guc Verify the logs for guc information. Note: If output doesn’t contain guc details, then install the latest guc/huc firmware. Copy the firmware to /lib/firmware/i915/, and reboot the system.","title":"Troubleshooting","component":"wolf","version":"dev-fix-109","name":"troubleshooting","url":"/wolf/dev-fix-109/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4},{"text":"Intel: MFX_ERR_UNSUPPORTED","hash":"_intel_mfx_err_unsupported","id":5}]},"57":{"id":57,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"dev-nix","name":"index","url":"/wolf/dev-nix/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"58":{"id":58,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: virtual audio library A little CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"dev-nix","name":"code-structure","url":"/wolf/dev-nix/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"59":{"id":59,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"dev-nix","name":"fake-udev","url":"/wolf/dev-nix/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"60":{"id":60,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"dev-nix","name":"gstreamer","url":"/wolf/dev-nix/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"61":{"id":61,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxingcore-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.22.7 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"dev-nix","name":"manual_build","url":"/wolf/dev-nix/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"62":{"id":62,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"dev-nix","name":"wayland","url":"/wolf/dev-nix/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"63":{"id":63,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"dev-nix","name":"control-specs","url":"/wolf/dev-nix/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"64":{"id":64,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"dev-nix","name":"http-pairing","url":"/wolf/dev-nix/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"65":{"id":65,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"dev-nix","name":"index","url":"/wolf/dev-nix/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"66":{"id":66,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"dev-nix","name":"input-data","url":"/wolf/dev-nix/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"67":{"id":67,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"dev-nix","name":"rtp-opus","url":"/wolf/dev-nix/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"68":{"id":68,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"dev-nix","name":"rtp-video","url":"/wolf/dev-nix/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"69":{"id":69,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"dev-nix","name":"rtsp","url":"/wolf/dev-nix/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"70":{"id":70,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools The TOML configuration file is read only once at startup (or created if not present) and it’ll be modified by Wolf only when a new user is successfully paired. Default TOML configuration file hostname = \"wolf\" (1) support_hevc = true (2) config_version = 2 (3) uuid = \"0f75f4d1-e28e-410a-b318-c0579f18f8d1\" (4) paired_clients = [] (5) apps = [] (6) gstreamer = {} (7) 1 hostname: this is the name that will be displayed in the list of hosts in the Moonlight UI 2 support_hevc: when set to false will disable support for HEVC in Moonlight 3 config_version: The version of this config file 4 uuid: a randomly generated UUID, it’s used by Moonlight to know if the current host has already been paired 5 paired_clients: a list of all the Moonlight clients that have succesfully completed the pairing process; it’ll be populated by Wolf and saved to this file. 6 apps: a list of apps, see: Defining apps 7 gstreamer audio/video pipeline definitions, see Gstreamer Apps defined here will be shown in Moonlight after successfully pairing with Wolf. You can re-define parts of the Gstreamer pipeline easily, ex: [[apps]] title = \"Test ball\" (1) start_virtual_compositor = false (2) [apps.runner] (3) type = \"process\" run_cmd = \"sh -c \\\"while :; do echo 'running...'; sleep 10; done\\\"\" [apps.video] (4) source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" [apps.audio] (5) source = \"audiotestsrc wave=ticks is-live=true\" 1 title: this is the name that will be displayed in Moonlight 2 start_virtual_compositor: set to True if this app needs our custom virtual compositor (TODO: document this better) 3 runner: the type of process to run in order to start this app, see: App Runner 4 video: here it’s possible to override the default video pipeline variables defined in: Gstreamer 5 audio: here it’s possible to override the default audio pipeline variables defined in: Gstreamer See more examples in the Gstreamer page. There are currently two types of runner supported: docker and process Example: [apps.runner] type = \"process\" run_cmd = \"sh -c \\\"while :; do echo 'running...'; sleep 10; done\\\"\" Example: type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" mounts = [ \"/run/udev:/run/udev:ro\" ] env = [ \"PROTON_LOG=1\", \"RUN_GAMESCOPE=true\", \"ENABLE_VKBASALT=1\" ] devices = [] ports = [] base_create_json = \"\"\" (1) { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false } } \\ \"\"\" 1 base_create_json: here you can re-define any property that’s defined in the docker API JSON format, see: docs.docker.com/engine/api/v1.40 In here we define the default pipeline for both video and audio streaming to Moonlight. In order to automatically pick up the right encoder at runtime based on the user HW we run in order the list of encoders at gstreamer.video.hevc_encoders (and gstreamer.video.h264_encoders); the first set of plugins that can be correctly initialised by Gstreamer will be the selected encoder for all the pipelines. You can read more about gstreamer and custom pipelines in the Gstreamer page. When you have multiple GPUs installed in your host, you might want to have better control over which one is used by Wolf and how. There are two main separated parts that make use of HW acceleration in Wolf: Gstreamer video encoding: this will use HW acceleration in order to efficiently encode the video stream with H.264 or HEVC. App render node: this will use HW acceleration in order to create virtual Wayland desktops and run the chosen app (ex: Firefox, Steam, …​) They can be configured separately, and ideally you could even use two GPUs at the same time for different jobs; a common setup would be to use the integrated GPU just for the streaming part and use a powerful GPU to play apps/games. The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used. If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either: Delete the nvcodec entries under gstreamer.video.hevc_encoders Cut the qsv entry and paste it above the nvcodec entry On top of that, each single apps entry support overriding the default streaming pipeline; for example: [[apps]] title = \"Test ball\" # More options here, removed for brevity... [apps.video] source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the encoder_pipeline with the corresponding encoder plugin; see: gstreamer/issues/1167. Each application that Wolf will start will have access only to a specific render node even if the host has multiple GPUs connected. By default, Wolf will use the env variable WOLF_RENDER_NODE which defaults to /dev/dri/renderD128 If you don’t know which render node is associated with which GPU you can use the following command: ls -l /sys/class/drm/renderD*/device/driver /sys/class/drm/renderD128/device/driver -> ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\"","title":"Configuration","component":"wolf","version":"dev-nix","name":"configuration","url":"/wolf/dev-nix/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"TOML file","hash":"_toml_file","id":2},{"text":"Defining apps","hash":"_defining_apps","id":3},{"text":"App Runner","hash":"_app_runner","id":4},{"text":"Process","hash":"_process","id":5},{"text":"Docker","hash":"_docker","id":6},{"text":"Gstreamer","hash":"_gstreamer","id":7},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":8},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":9},{"text":"App render node","hash":"_app_render_node","id":10}]},"71":{"id":71,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"dev-nix","name":"gstreamer","url":"/wolf/dev-nix/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"72":{"id":72,"text":"Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to stream video and audio with low latency Wolf runs as a Docker container that will start and stop automatically new containers on-demand. This has a few major advantages: Each remote client will run in a separate and isolated container. Input devices (mouse, keyboard, joypads) are completely isolated between multiple users. Nothing is permanently installed on the host; wiping down the Docker images and the permanent storage folder is all you need to completely clean your server. If you are curious to look under the hood of Wolf we have some high-level docs under the Developer guide, and you can always take a look at the actual code since everything is open source.","title":"Overview","component":"wolf","version":"dev-nix","name":"overview","url":"/wolf/dev-nix/user/overview.html","titles":[{"text":"How it works","hash":"_how_it_works","id":1}]},"73":{"id":73,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ -v /dev/shm:/dev/shm:rw \\ -v /dev/input:/dev/input:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3.8\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/shm:/dev/shm:rw - /dev/input:/dev/input:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput network_mode: host restart: unless-stopped Unfortunately, on Nvidia, things are a little bit more complex: Your driver version must be >= 530.30.02 --gpus and the Nvidia Docker Toolkit seems to not work (to be investigated) First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ -v /dev/shm:/dev/shm:rw \\ -v /dev/input:/dev/input:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3.8\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/shm:/dev/shm:rw - /dev/input:/dev/input:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users) EXPOSE 48100-48110/udp # Audio (up to 10 users) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"dev-nix","name":"quickstart","url":"/wolf/dev-nix/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"74":{"id":74,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page","title":"Troubleshooting","component":"wolf","version":"dev-nix","name":"troubleshooting","url":"/wolf/dev-nix/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4}]},"75":{"id":75,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"dev-tracy","name":"index","url":"/wolf/dev-tracy/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"76":{"id":76,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: virtual audio library A little CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"dev-tracy","name":"code-structure","url":"/wolf/dev-tracy/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"77":{"id":77,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"dev-tracy","name":"fake-udev","url":"/wolf/dev-tracy/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"78":{"id":78,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"dev-tracy","name":"gstreamer","url":"/wolf/dev-tracy/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"79":{"id":79,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxingcore-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.22.7 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"dev-tracy","name":"manual_build","url":"/wolf/dev-tracy/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"80":{"id":80,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"dev-tracy","name":"wayland","url":"/wolf/dev-tracy/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"81":{"id":81,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"dev-tracy","name":"control-specs","url":"/wolf/dev-tracy/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"82":{"id":82,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"dev-tracy","name":"http-pairing","url":"/wolf/dev-tracy/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"83":{"id":83,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"dev-tracy","name":"index","url":"/wolf/dev-tracy/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"84":{"id":84,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"dev-tracy","name":"input-data","url":"/wolf/dev-tracy/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"85":{"id":85,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"dev-tracy","name":"rtp-opus","url":"/wolf/dev-tracy/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"86":{"id":86,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"dev-tracy","name":"rtp-video","url":"/wolf/dev-tracy/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"87":{"id":87,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"dev-tracy","name":"rtsp","url":"/wolf/dev-tracy/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"88":{"id":88,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools The TOML configuration file is read only once at startup (or created if not present) and it’ll be modified by Wolf only when a new user is successfully paired. Default TOML configuration file hostname = \"wolf\" (1) support_hevc = true (2) config_version = 2 (3) uuid = \"0f75f4d1-e28e-410a-b318-c0579f18f8d1\" (4) paired_clients = [] (5) apps = [] (6) gstreamer = {} (7) 1 hostname: this is the name that will be displayed in the list of hosts in the Moonlight UI 2 support_hevc: when set to false will disable support for HEVC in Moonlight 3 config_version: The version of this config file 4 uuid: a randomly generated UUID, it’s used by Moonlight to know if the current host has already been paired 5 paired_clients: a list of all the Moonlight clients that have succesfully completed the pairing process; it’ll be populated by Wolf and saved to this file. 6 apps: a list of apps, see: Defining apps 7 gstreamer audio/video pipeline definitions, see Gstreamer Apps defined here will be shown in Moonlight after successfully pairing with Wolf. You can re-define parts of the Gstreamer pipeline easily, ex: [[apps]] title = \"Test ball\" (1) start_virtual_compositor = false (2) [apps.runner] (3) type = \"process\" run_cmd = \"sh -c \\\"while :; do echo 'running...'; sleep 10; done\\\"\" [apps.video] (4) source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" [apps.audio] (5) source = \"audiotestsrc wave=ticks is-live=true\" 1 title: this is the name that will be displayed in Moonlight 2 start_virtual_compositor: set to True if this app needs our custom virtual compositor (TODO: document this better) 3 runner: the type of process to run in order to start this app, see: App Runner 4 video: here it’s possible to override the default video pipeline variables defined in: Gstreamer 5 audio: here it’s possible to override the default audio pipeline variables defined in: Gstreamer See more examples in the Gstreamer page. There are currently two types of runner supported: docker and process Example: [apps.runner] type = \"process\" run_cmd = \"sh -c \\\"while :; do echo 'running...'; sleep 10; done\\\"\" Example: type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" mounts = [ \"/run/udev:/run/udev:ro\" ] env = [ \"PROTON_LOG=1\", \"RUN_GAMESCOPE=true\", \"ENABLE_VKBASALT=1\" ] devices = [] ports = [] base_create_json = \"\"\" (1) { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false } } \\ \"\"\" 1 base_create_json: here you can re-define any property that’s defined in the docker API JSON format, see: docs.docker.com/engine/api/v1.40 In here we define the default pipeline for both video and audio streaming to Moonlight. In order to automatically pick up the right encoder at runtime based on the user HW we run in order the list of encoders at gstreamer.video.hevc_encoders (and gstreamer.video.h264_encoders); the first set of plugins that can be correctly initialised by Gstreamer will be the selected encoder for all the pipelines. You can read more about gstreamer and custom pipelines in the Gstreamer page. When you have multiple GPUs installed in your host, you might want to have better control over which one is used by Wolf and how. There are two main separated parts that make use of HW acceleration in Wolf: Gstreamer video encoding: this will use HW acceleration in order to efficiently encode the video stream with H.264 or HEVC. App render node: this will use HW acceleration in order to create virtual Wayland desktops and run the chosen app (ex: Firefox, Steam, …​) They can be configured separately, and ideally you could even use two GPUs at the same time for different jobs; a common setup would be to use the integrated GPU just for the streaming part and use a powerful GPU to play apps/games. The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used. If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either: Delete the nvcodec entries under gstreamer.video.hevc_encoders Cut the qsv entry and paste it above the nvcodec entry On top of that, each single apps entry support overriding the default streaming pipeline; for example: [[apps]] title = \"Test ball\" # More options here, removed for brevity... [apps.video] source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the encoder_pipeline with the corresponding encoder plugin; see: gstreamer/issues/1167. Each application that Wolf will start will have access only to a specific render node even if the host has multiple GPUs connected. By default, Wolf will use the env variable WOLF_RENDER_NODE which defaults to /dev/dri/renderD128 If you don’t know which render node is associated with which GPU you can use the following command: ls -l /sys/class/drm/renderD*/device/driver /sys/class/drm/renderD128/device/driver -> ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\"","title":"Configuration","component":"wolf","version":"dev-tracy","name":"configuration","url":"/wolf/dev-tracy/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"TOML file","hash":"_toml_file","id":2},{"text":"Defining apps","hash":"_defining_apps","id":3},{"text":"App Runner","hash":"_app_runner","id":4},{"text":"Process","hash":"_process","id":5},{"text":"Docker","hash":"_docker","id":6},{"text":"Gstreamer","hash":"_gstreamer","id":7},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":8},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":9},{"text":"App render node","hash":"_app_render_node","id":10}]},"89":{"id":89,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"dev-tracy","name":"gstreamer","url":"/wolf/dev-tracy/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"90":{"id":90,"text":"Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to stream video and audio with low latency Wolf runs as a Docker container that will start and stop automatically new containers on-demand. This has a few major advantages: Each remote client will run in a separate and isolated container. Input devices (mouse, keyboard, joypads) are completely isolated between multiple users. Nothing is permanently installed on the host; wiping down the Docker images and the permanent storage folder is all you need to completely clean your server. If you are curious to look under the hood of Wolf we have some high-level docs under the Developer guide, and you can always take a look at the actual code since everything is open source.","title":"Overview","component":"wolf","version":"dev-tracy","name":"overview","url":"/wolf/dev-tracy/user/overview.html","titles":[{"text":"How it works","hash":"_how_it_works","id":1}]},"91":{"id":91,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ -v /dev/shm:/dev/shm:rw \\ -v /dev/input:/dev/input:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3.8\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/shm:/dev/shm:rw - /dev/input:/dev/input:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput network_mode: host restart: unless-stopped Unfortunately, on Nvidia, things are a little bit more complex: Your driver version must be >= 530.30.02 --gpus and the Nvidia Docker Toolkit seems to not work (to be investigated) First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ -v /dev/shm:/dev/shm:rw \\ -v /dev/input:/dev/input:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3.8\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/shm:/dev/shm:rw - /dev/input:/dev/input:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users) EXPOSE 48100-48110/udp # Audio (up to 10 users) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"dev-tracy","name":"quickstart","url":"/wolf/dev-tracy/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"92":{"id":92,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page","title":"Troubleshooting","component":"wolf","version":"dev-tracy","name":"troubleshooting","url":"/wolf/dev-tracy/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4}]},"93":{"id":93,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"stable","name":"index","url":"/wolf/stable/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"94":{"id":94,"text":"Wolf will start different Docker containers that are preconfigured for different apps such as Steam, Pegasus or Firefox. Once the container is launched, Wolf streams the output to the connected Moonlight client. See each subpage for further details and additional configuration steps.","title":"Apps","component":"wolf","version":"stable","name":"index","url":"/wolf/stable/apps/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"95":{"id":95,"text":"Table of Contents Introduction Getting Started ROM Directory Structure Setting Up ROM Directories Configuration Setting Up Bind Mounts for ROMs Example Configuration Emulators Customization Theming Troubleshooting and Additional Resources Pegasus is a powerful and flexible frontend for launching games, similar to EmulationStation. It provides a unified interface for interacting with various emulators, eliminating the need to manage multiple emulator interfaces separately. By default, Pegasus is configured to look for ROMs in the /ROMs directory, with subdirectories for each platform. You can either create the ROM directories in the format below or edit Pegasus to use your preferred location. /ROMs/3do /ROMs/amiga /ROMs/amigacd32 /ROMs/arcade /ROMs/atari2600 /ROMs/atari5200 /ROMs/atari7800 /ROMs/atarijaguar /ROMs/atarijaguarcd /ROMs/atarilynx /ROMs/atarist /ROMs/gb /ROMs/gba /ROMs/gbc /ROMs/gc /ROMs/genesis /ROMs/megacd /ROMs/model2 /ROMs/model3 /ROMs/n64 /ROMs/naomi /ROMs/neogeo /ROMs/nes /ROMs/ngp /ROMs/ngpc /ROMs/ps2 /ROMs/ps3 /ROMs/psp /ROMs/psx /ROMs/saturn /ROMs/sega32x /ROMs/segacd /ROMs/snes /ROMs/snes_widescreen /ROMs/switch /ROMs/virtualboy /ROMs/wii /ROMs/wiiu /ROMs/wonderswan /ROMs/wonderswancolor /ROMs/xbox To make your roms accessible to Pegasus within the container, you need to create a bind mount that maps your host ROM folder to the /ROMs directory in the container. This is done by editing the config.toml file. To create a bind mount for your ROMs, add the following line to the \"HostConfig\" section of your config.toml: \"Binds\": [ \"/path/to/roms:/ROMs\" ] Replace /path/to/roms with the actual path to your ROM directory on the host system. Here’s an example of how the Pegasus configuration might look in your config.toml file: [[apps]] title = \"Pegasus\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfEmulators\" image = \"ghcr.io/games-on-whales/pegasus:edge\" mounts = [] env = [ \"RUN_SWAY=1\", \"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\", ] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"Binds\": [ \"/path/to/roms:/ROMs\" ], \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\"] } } \"\"\" Pegasus is preconfigured with several popular emulators. Each emulator is designed to run games for specific platforms. For detailed information on configuring and using these emulators, please refer to their respective documentation: RetroArch: https://docs.libretro.com/ PCSX2: https://pcsx2.net/docs/ Xemu: https://xemu.app/docs/ RPCS3: https://rpcs3.net/quickstart CEMU: https://cemu.cfw.guide/ Dolphin: https://dolphin-emu.org/docs/guides/ Pegasus supports extensive customization through themes. You can change the look and feel of your frontend to suit your preferences. For a demonstration of different themes, watch this YouTube video. Browse and download themes from the official Pegasus Themes Gallery. To install a theme, you need to launch the Pegasus app at least once, then download the theme and place in: /Pegasus/.config/pegasus-frontend/themes On the next Pegasus launch, you will be able to select the theme from within the settings. If you encounter any issues or need more information, consider the following resources: Official Pegasus Documentation: https://pegasus-frontend.org/docs/ Pegasus FAQ: https://pegasus-frontend.org/docs/faq/ Community Forums: https://pegasus-frontend.org/community/ For specific issues related to this container or its configuration, please refer to the project’s issue tracker or community support channels.","title":"Pegasus Frontend Configuration","component":"wolf","version":"stable","name":"pegasus","url":"/wolf/stable/apps/pegasus.html","titles":[{"text":"Introduction","hash":"_introduction","id":1},{"text":"Getting Started","hash":"_getting_started","id":2},{"text":"ROM Directory Structure","hash":"_rom_directory_structure","id":3},{"text":"Setting Up ROM Directories","hash":"_setting_up_rom_directories","id":4},{"text":"Configuration","hash":"_configuration","id":5},{"text":"Setting Up Bind Mounts for ROMs","hash":"_setting_up_bind_mounts_for_roms","id":6},{"text":"Example Configuration","hash":"_example_configuration","id":7},{"text":"Emulators","hash":"_emulators","id":8},{"text":"Customization","hash":"_customization","id":9},{"text":"Theming","hash":"_theming","id":10},{"text":"Troubleshooting and Additional Resources","hash":"_troubleshooting_and_additional_resources","id":11}]},"96":{"id":96,"text":"One of the pre-installed applications in the default Wolf configuration is Steam. Getting Steam to work in a headless container took some work, so this page lists some limitations and tips to get the most out of Steam. In order to directly launch a Steam game from Moonlight you can just copy the existing entry for Steam, change the name and just add the Steam app ID as env variable; example: [[apps]] title = \"Elden Ring\" start_virtual_compositor = true [apps.runner] env = [ \"PROTON_LOG=1\", \"RUN_SWAY=true\", \"GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*\", \"STEAM_STARTUP_FLAGS=steam://rungameid/1245620\" ] # COPY EVERYTHING ELSE ... You can get the app ID from https://steamdb.info/ (Thanks to @nathanle1406 for the tip) The steam overlay currently does not work in our headless container. So if you want to see FPS and other stats you can use FlightlessMango’s excellent MangoHud. It’s already installed and enabled in the default steam image for all Vulkan games (including Proton games). See below for how to activate it in game. While mangohud is already installed, there’s no way to globally enable it for all OpenGL games. You can still enable it on a per-game basis by adding mangohud %command% to the game’s launch options in Steam. In a game, you can press Right Shift + F12 to make the overlay appear and disappear. You can also press Right Shift + F11 to change the position of the overlay on screen.","title":"Steam","component":"wolf","version":"stable","name":"steam","url":"/wolf/stable/apps/steam.html","titles":[{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":1},{"text":"MangoHud","hash":"_mangohud","id":2},{"text":"Proton (Steam Play) and other Vulkan games","hash":"_proton_steam_play_and_other_vulkan_games","id":3},{"text":"OpenGL (Native Linux) games","hash":"_opengl_native_linux_games","id":4},{"text":"Activation and configuration","hash":"_activation_and_configuration","id":5}]},"97":{"id":97,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: a simple abstraction on top of libpulse to create and control virtual audio devices. A little standalone CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. In order to keep modules decoupled most of the logic revolves around reacting to events in a shared event bus (implemented using DeveloperPaul123/eventbus). Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"stable","name":"code-structure","url":"/wolf/stable/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"98":{"id":98,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"stable","name":"fake-udev","url":"/wolf/stable/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"99":{"id":99,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"stable","name":"gstreamer","url":"/wolf/stable/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"100":{"id":100,"text":"Wolf is composed of a few independent components that, when used together, allow us to run and stream multiple graphical applications on the same server without any overlap between them. In order to create virtual desktops on-demand, we’ve created a custom (micro) Wayland compositor: gst-wayland-display. It’s based on Smithay, coded in Rust and exposes both a standalone GStreamer plugin and an easy-to-use C API. The main benefit of this solution is that our compositor will then expose the raw framebuffer so that Wolf can feed that directly to the video encoding pipeline. You can read more about it in Headless Wayland. To keep things simple, our Wayland compositor doesn’t support XWayland, for containers that need it (like Steam) we use Gamescope which can be run as a Wayland client, and it’ll provide XWayland support to the downstream app. Audio doesn’t need any HW acceleration, it’s fairly trivial to run PulseAudio as a standalone container and use libpulse in order to create virtual audio sink on-demand. Creating and managing virtual devices is handled by inputtino: a small library that abstracts away the complexities of managing uinput (and uhid) to create virtual input devices. Virtual devices created by inputtino will be visible on the host system and can potentially break the host isolation that we’re trying to achieve. In order to avoid this, we encourage users to install a set of udev rules that will restrict access to these devices to a specific group (e.g. input) and move mouse and keyboard to a different seat (see user:quickstart.adoc#_virtual_devices_support). You can read a more detailed explanation into why we’ve added uhid and how gyro/acceleration is achieved here Some devices like mouse and keyboard are always present and will be automatically created and setup before starting the application. Other devices can be hotplugged whilst the streaming is running; for example, a gamepad can be plugged in after the game has started. Special care is needed in order to safely mount these new devices in the app container and to make them available to the running application, there’s an in-depth article about it here: Hotplug in Docker We run applications in a containerised environment, this way we can ensure that the application will not interfere with the host system (and with other running apps) and that it will have access only to the virtual devices that we’ve created. We have a set of pre-built containers that are optimised to work with our flow in games-on-whales/gow. Generally, though, most of the GUI applications should work inside a container that can then be streamed via Wolf. We use GStreamer to encode the video and audio streams and send them to the client. We have automatic support for HW acceleration using CUDA, QuickSync and VAAPI but thanks to GStreamer we can easily add more encoders into the mix, without having to write a single line of code! The full encoding pipeline is described in a string that can be overridden by users just by changing the config.toml file. We’ve implemented a couple of custom GStreamer plugins in order to properly split, RTP encode and add FEC to the resulting buffers into the format that Moonlight expects; they live in here: src/moonlight-server/gst-plugin.","title":"How does it work?","component":"wolf","version":"stable","name":"how-it-works","url":"/wolf/stable/dev/how-it-works.html","titles":[{"text":"Virtual desktop","hash":"_virtual_desktop","id":1},{"text":"Virtual audio","hash":"_virtual_audio","id":2},{"text":"Virtual input devices","hash":"_virtual_input_devices","id":3},{"text":"Support hotplug via fake-udev","hash":"_support_hotplug_via_fake_udev","id":4},{"text":"Running applications/games","hash":"_running_applicationsgames","id":5},{"text":"Streaming","hash":"_streaming","id":6}]},"101":{"id":101,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxing-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.24.6 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev libboost-container-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"stable","name":"manual_build","url":"/wolf/stable/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"102":{"id":102,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"stable","name":"wayland","url":"/wolf/stable/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"103":{"id":103,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"stable","name":"control-specs","url":"/wolf/stable/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"104":{"id":104,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"stable","name":"http-pairing","url":"/wolf/stable/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"105":{"id":105,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"stable","name":"index","url":"/wolf/stable/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"106":{"id":106,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"stable","name":"input-data","url":"/wolf/stable/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"107":{"id":107,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"stable","name":"rtp-opus","url":"/wolf/stable/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"108":{"id":108,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"stable","name":"rtp-video","url":"/wolf/stable/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"109":{"id":109,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"stable","name":"rtsp","url":"/wolf/stable/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"110":{"id":110,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_ENCODER_NODE $WOLF_RENDER_NODE The default render node used for the Gstreamer pipelines; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools Since Wolf supports multiple streaming sessions at the same time and each session can run a different app, we need to make sure that each app has its own folder where it can store permanent data. To achieve this, for each running app, Wolf will create a folder structure like this: ${HOST_APPS_STATE_FOLDER}/${app_state_folder}/${app_title} and then mount that as the home (/home/retro) for the docker container that will run the selected app. These 3 variables are defined as follows: HOST_APPS_STATE_FOLDER: defaults to /etc/wolf, can be changed via ENV app_state_folder: defaults to a unique identifier for each client so that every Moonlight session will have its own folder. Can be changed in the config.toml file app_title: the title of the app as defined in the config.toml file This will break isolation, if you want to connect with multiple clients at the same time you should not share the home folder. You can follow development of that feature here By default, Wolf will create a new home folder for each client, but if you want to share the same home folder with multiple clients, you can set the app_state_folder to the same value for each paired client; example: [[paired_clients]] app_state_folder = \"common\" # ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\" The easy way to control this is to just edit the env variable WOLF_ENCODER_NODE (defaults to match WOLF_RENDER_NODE in order to use the same GPU for both), this will set the default render node used for the Gstreamer pipelines. The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used. If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either: Delete the nvcodec entries under gstreamer.video.hevc_encoders Cut the qsv entry and paste it above the nvcodec entry On top of that, each single apps entry support overriding the default streaming pipeline; for example: [[apps]] title = \"Test ball\" # More options here, removed for brevity... [apps.video] source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the video_params with the corresponding encoder plugin; see: gstreamer/issues/1167. This has been moved to the steam.adoc page.","title":"Configuration","component":"wolf","version":"stable","name":"configuration","url":"/wolf/stable/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"Where apps will store permanent data?","hash":"data_setup","id":2},{"text":"Share home folder with multiple clients","hash":"_share_home_folder_with_multiple_clients","id":3},{"text":"Change the HOST_APPS_STATE_FOLDER","hash":"_change_the_host_apps_state_folder","id":4},{"text":"TOML file","hash":"_toml_file","id":5},{"text":"Defining apps","hash":"_defining_apps","id":6},{"text":"Override the default joypad mapping","hash":"_override_the_default_joypad_mapping","id":7},{"text":"App Runner","hash":"_app_runner","id":8},{"text":"Process","hash":"_process","id":9},{"text":"Docker","hash":"_docker","id":10},{"text":"Gstreamer","hash":"_gstreamer","id":11},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":12},{"text":"App render node","hash":"_app_render_node","id":13},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":14},{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":15}]},"111":{"id":111,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"stable","name":"gstreamer","url":"/wolf/stable/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"112":{"id":112,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia (Container Toolkit) Nvidia (Manual) WSL2 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid network_mode: host restart: unless-stopped Make sure that the version of the Nvidia container toolkit is >= 1.16.0 and that your driver version is >= 530.30.02 (you can check the driver version with nvidia-smi). sudo nvidia-container-cli -V cli-version: 1.16.0 lib-version: 1.16.0 build date: 2024-07-15T13:41+00:00 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ -e NVIDIA_DRIVER_CAPABILITIES=all \\ -e NVIDIA_VISIBLE_DEVICES=all \\ --gpus=all \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf - NVIDIA_DRIVER_CAPABILITIES=all - NVIDIA_VISIBLE_DEVICES=all volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid runtime: nvidia deploy: resources: reservations: devices: - capabilities: [gpu] network_mode: host restart: unless-stopped One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. Unfortunately, on Nvidia, things are a little bit more complex.. Make sure that your driver version is >= 530.30.02 First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/uhid - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Running Wolf in WSL2 hasn’t been properly tested. You can run Wolf in a very unprivileged setting without uinput/uhid, unfortunately this means that you’ll be restricted to only using mouse and keyboard. For Nvidia users, follow the Nvidia instructions above. This should work for AMD/Intel users. docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ ghcr.io/games-on-whales/wolf:stable Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users, you can open more ports if needed) EXPOSE 48100-48110/udp # Audio (up to 10 users, you can open more ports if needed) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Allows Wolf to access /dev/uhid KERNEL==\"uhid\", TAG+=\"uaccess\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"stable","name":"quickstart","url":"/wolf/stable/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"113":{"id":113,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page Example log line: 0:01:31.983118812 1 0x7f1d50000b70 ERROR qsvencoder gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_session: MFXVideoENCODE::Query failed -3 (MFX_ERR_UNSUPPORTED) 0:01:31.983243805 1 0x7f1d50000b70 WARN videoencoder gstvideoencoder.c:771:gst_video_encoder_setcaps: rejected caps video/x-raw(memory:VAMemory), width=(int)1280, height=(int)720, framerate=(fraction)60/1, format=(string)NV12, chroma-site=(string)mpeg2, colorimetry=(string)bt601 Follow the steps outlined in here: sudo apt install --reinstall linux-firmware Add i915.enable_guc=2 in /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash i915.force_probe=* i915.enable_guc=2\" sudo update-initramfs –u sudo update-grub Reboot the system. After reboot, execute the command: dmesg | grep guc Verify the logs for guc information. Note: If output doesn’t contain guc details, then install the latest guc/huc firmware. Copy the firmware to /lib/firmware/i915/, and reboot the system.","title":"Troubleshooting","component":"wolf","version":"stable","name":"troubleshooting","url":"/wolf/stable/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4},{"text":"Intel: MFX_ERR_UNSUPPORTED","hash":"_intel_mfx_err_unsupported","id":5}]},"114":{"id":114,"text":"Adding a new app to the GoW system is a very straightforward process. The easiest way is to follow the examples that already exist; one particularly good option is the RetroArch app that is bundled with GoW. Once you have your app working as you like it, consider submitting a pull request to add it to the official repo! First you’ll need a Docker container for your app. It’s possible that one may already exist, but if not, creating one is pretty easy. Copy the images/retroarch directory and all of its contents to a new directory for your app; let’s call it images/myapp. Inside the configs directory, you can put default versions of any configuration files that may be needed by your app. If there aren’t any, you can simply delete the configs directory. In the scripts directory, edit the startup.sh script. Here’s an example of a minimal startup.sh script; you can modify it for your app as much as necessary. #!/bin/bash set -e source /opt/gow/bash-lib/utils.sh gow_log \"Starting myapp\" exec /usr/bin/myapp Our Docker images are based on the latest Ubuntu LTS release, and you should be able to easily repurpose the RetroArch Dockerfile for your application as long as it can be installed on Ubuntu. Here are a few specifics that you’ll definitely want to update: Be sure to update the REQUIRED_PACKAGES variable to include all of the packages your app will need to have installed when it’s running. You can use the add-apt-repository tool in your RUN command to add any extra package repositories you might need to install from. Be sure to change the line that installs the configuration file to install the files required by your app. In the compose/apps directory, copy retroarch.yml to myapp.yml. Make sure the build context is pointing to images/myapp, and also be sure to set the image: appropriately.","title":"Adding an App","component":"gow","version":"","name":"adding-an-app","url":"/gow/adding-an-app.html","titles":[{"text":"The Container","hash":"_the_container","id":1},{"text":"Configuration","hash":"_configuration","id":2},{"text":"Scripts","hash":"_scripts","id":3},{"text":"Dockerfile","hash":"_dockerfile","id":4},{"text":"REQUIRED_PACKAGES","hash":"_required_packages","id":5},{"text":"add-apt-repository","hash":"_add_apt_repository","id":6},{"text":"COPY","hash":"_copy","id":7},{"text":"The Compose file","hash":"_the_compose_file","id":8}]},"115":{"id":115,"text":"Make sure to read the overview section before continuing, to get a grasp on core concept behind GOW. GOW is a composition of Docker containers that enable users to stream graphical applications to Moonlight clients. We wrapped each individual piece of software with the necessary dependencies into its own Docker image and use docker-compose in order to manage the composition of all the necessary pieces. The streaming host is the heart of this system; it’s in charge of: Encoding the graphical environment (Xorg) and audio (PulseAudio) into a video that will be streamed to Moonlight clients This process can be hardware accelerated using VAAPI or CUDA depending on your GPU hardware Translating remote input devices into local input devices (eg: keyboards, mice, gamepads) This is achieved by using the uinput kernel module. Games on Whales currently has support for two streaming hosts: Sunshine (more mature, and the default), and Wolf (still in alpha, but very usable). These two components are in charge of Display and Audio, respectively. If your OS comes with a desktop environment already, you will most likely want to use that instead of trying to run it in a container. If you’re running a headless system you’ll need to run them in order to run graphical applications. You can use our Docker images for that. While PulseAudio runs just fine without a real sound device, for best results Xorg should be hardware accelerated using a GPU. That’s the main reason why we choose the full Xorg server over Xvfb. While it’s more complicated to run the full Xorg server, the benefits of having hardware acceleration are too great to be dismissed. Graphical applications can run easily on top of Xorg and PulseAudio — that’s how most desktop environments work! Sharing sockets between containers is the mechanism that enables us to have proper isolation. Instead of having a big single Docker image which installs and runs all the individual pieces of software together, we can decouple them and share only a communication channel. This means that it’s very simple to make a Docker container of any given GUI application and that same container will work both on GOW or on a normal Desktop Environment, enabling users to have a high degree of freedom on how to use them. A GPU is not required to run any of this, but it’s highly recommended for best results. Sharing a GPU across Docker containers is generally done by sharing the DRM devices (/dev/dri/cardX). This should work as long as your GPU supports VA-API. Notably, NVIDIA cards don’t; instead we provide specific instructions for them.","title":"Components Overview","component":"gow","version":"","name":"components-overview","url":"/gow/components-overview.html","titles":[{"text":"Streaming host","hash":"_streaming_host","id":1},{"text":"Xorg & PulseAudio","hash":"_xorg_pulseaudio","id":2},{"text":"GUIs","hash":"_guis","id":3},{"text":"GPU","hash":"_gpu","id":4}]},"116":{"id":116,"text":"Before launching GoW for the first time, you’ll want to set up your environment to your tastes. GoW is set up to use a directory of your choice from your host system as a place to store anything that needs to persist when you stop and restart containers. Because this same directory is (typically) mapped into each container, it can also be a way to share data between multiple containers. Before you launch GoW for the first time, create a new directory and update the LOCAL_STATE variable in your User environment to match. On unRAID, the local_state folder you just created will likely be owned by root, and it may not be writable from the containers launched by GoW, which mostly do not run as root. Until GoW has support for changing the UID inside the containers, you may need to chmod 777 local_state to make sure anyone can write to it. In order to make the time zone inside your container match your actual local time zone, you’ll need to update the TIME_ZONE variable in your User environment. If you’re not sure what to set it to, check out this list of tz database time zones. Your user environment is typically stored in the user.env file in the directory you cloned GoW into. It contains a simple list of environment variables, one per line. Comments and blank lines are allowed, but variable substitutions are not. If it’s more convenient to store your user environment outside the git directory, you can also put it in $HOME/.config/gow/user.env instead. If both files exist, the one in $HOME/.config will be preferred. Host Desktop Headless Configuration values that are specific to running with the host desktop can be found in the env/host-desktop.env file. You might need to tweak the socket locations or XORG_DISPLAY based on your system. Configuration values that are specific to running in headless mode can be found in the env/headless.env file. Most of those values will already be set correctly, but you may want to tweak the resolution, frame rate, and display port to suit your preferences. Now it’s time to launch GoW!","title":"Configuration","component":"gow","version":"","name":"configuration","url":"/gow/configuration.html","titles":[{"text":"Local state","hash":"_local_state","id":1},{"text":"Time zone","hash":"_time_zone","id":2},{"text":"User environment","hash":"_user_environment","id":3},{"text":"Platform environment","hash":"_platform_environment","id":4}]},"117":{"id":117,"text":"Once the containers are up and running, connect to your server using Moonlight. You may need to manually specify the IP address of your host system if it isn’t automatically discovered. If this is your first time connecting, you’ll need to pair your client and server. Moonlight will prompt you with a PIN to enter on the server side. To validate the PIN you can use the Sunshine web interface (at https://:47990/ default username: admin, password: admin) or you can directly call: curl :47989/pin/. After you’ve completed the pairing step, you can click your host in Moonlight, then open the Desktop app. At this point you should be able to see your X11 apps running! Check out the troubleshooting guide if anything isn’t working quite right Play some games!","title":"Connecting","component":"gow","version":"","name":"connecting","url":"/gow/connecting.html","titles":[{"text":"Next steps","hash":"_next_steps","id":1}]},"118":{"id":118,"text":"🎉 First off, thanks for taking the time to contribute! 🎉 There are many ways to contribute to this project! Just by running it and reporting issues (or even letting us know that everything works out of the box) you are helping us! You don’t have to code or understand all the little details of how everything work. Helping us maintain and expand the documentation is another great way to help. Asking questions in the public discussion board is another great way to share knowledge with others. Feel free to join our discord server if you have any question, if you need any help, or you would like to join us on our journey!","title":"How can I help?","component":"gow","version":"","name":"contributing","url":"/gow/contributing.html","titles":[]},"119":{"id":119,"text":"So you don’t trust downloading Docker images from the web, eh? You are right! No one should trust the internet! Our images are built and pushed using Github Actions. You can manually check if the images are being tampered with by doing the following: Head over to the Actions section on Github and open up the build that you want to check For each generated Docker image there’s a step called Image digest – this is the sha256 checksum of the image generated on Github Head over to the Docker hub and check that the sha256 checksum for the image and the sha256 checksum for the commit are the same as it’s displayed in Github Here’s an example from the commit 98e5080 The associated Github Action for the xorg image reports: xorg > sha256:6b8555260ed07c7ed466e0b821922a3cedf4ee27b9d6b8fea9d6aa2995b75f61 The image layer details on the Docker Hub reports: gameonwhales/xorg:sha-98e5080 Digest:sha256:6b8555260ed07c7ed466e0b821922a3cedf4ee27b9d6b8fea9d6aa2995b75f61 You sure can! Here’s what you’ll need to know. We have two images that are only used as the base for our other images; they aren’t ever launched by themselves and therefore they don’t appear in the compose files. Since they don’t appear in the compose files, docker compose can’t automatically build them. Instead, you must specify which images to use as environment variables, found in env/build.env. If you want to build the base images yourself too, that’s no problem. First build the base image: sudo DOCKER_BUILDKIT=1 docker build -t my-gow-base images/base Then the base-app image, passing the base image you just built as a build arg: sudo DOCKER_BUILDKIT=1 docker build --build-arg BASE_IMAGE=my-gow-base -t my-gow-base-app images/base-app Lastly, edit env/build.env to specify your newly built images to be used for future compose builds: BUILD_BASE_IMAGE=my-gow-base BUILD_BASE_APP_IMAGE=my-gow-base-app You can, of course, choose any tags you like instead of my-gow-base and my-gow-base-app. Any of the app or system images described in the compose files can be easily built using the run-gow script. First, edit the appropriate compose YAML files and uncomment the build: section, to let docker compose know you want to build those images rather than pulling it from a registry. You may also want to comment out the image: lines to make sure there’s no confusion. Then, build the images you’ve chosen by running run-gow: sudo run-gow [options] build You should call run-gow with the same options you plan to run apps with; specifically, be sure to use the right combination of --gpu, --platform, --streamer, and --app.","title":"Docker builds","component":"gow","version":"","name":"docker-build","url":"/gow/docker-build.html","titles":[{"text":"Example","hash":"_example","id":1},{"text":"I don’t trust you, can’t I just build the images myself?","hash":"_i_dont_trust_you_cant_i_just_build_the_images_myself","id":2},{"text":"Base Images","hash":"_base_images","id":3},{"text":"App and System Images","hash":"_app_and_system_images","id":4}]},"120":{"id":120,"text":"One of the earliest use cases for Games on Whales was to be able to host retro video games on a central server running RetroArch and stream them to clients wherever they happened to be. Absolutely! Streaming games works very well, but GoW can do so much more! Out of the box, GoW provides a platform for running just about any graphical applications you like. In fact, despite the name, you can think of GoW as a low-latency remote desktop solution. Often the focus is on a single full-screen application, but this does not necessarily have to be the case. You should be able to run any Graphical Application on top of the basic combination of Xorg + PulseAudio + Sunshine. We supply the necessary configuration files for steam, retroarch, and firefox by default, but you can use them as templates to create your own. See Adding an App for more details. GoW is even often capable of running containers provided by third parties; as long as the container can accept a DISPLAY environment variable to specify the Xorg display, it can be made to work. For example, this Firefox container (andrewmackrodt/firefox-x11) is an open-source Dockerfile and image. It’s a great example of running a container which wasn’t built with GOW in mind. This container doesn’t need to be run any special privileges or network mode , because mouse and keyboard events are handled by Xorg and passing the X11 socket is enough to have display and inputs. This increases security for non trusted containers by restricting what’s accessible inside the container. Unfortunately, the same cannot be said for gamepads; if your container requires gamepad support you’ll need to use privileged: true and network_mode: ${UDEVD_NETWORK} just like in the RetroArch example. This is required because the device files for the gamepad do not exist at the time the container is launched (they’re only created once a client connects) and so far the only way we’ve found for a running container to see a newly created device file is using the privileged setting. Heres a blog post with a few GUI docker containers like: Chrome Spotify Gparted Skype 🚀 The sky is the limit! 🚀","title":"How can I use GOW?","component":"gow","version":"","name":"how-to-use","url":"/gow/how-to-use.html","titles":[{"text":"Can I use it for something else?","hash":"_can_i_use_it_for_something_else","id":1}]},"121":{"id":121,"text":"A collection of Docker images ready to be used by Wolf in order to run games and apps on a remote host! Historically, this was the first attempt that we’ve made at running games in Docker. Wolf has now completely replaced the simple bash script present in this repo.","title":"GOW - Games on Whales","component":"gow","version":"","name":"index","url":"/gow/index.html","titles":[]},"122":{"id":122,"text":"Make sure to check out the Overview and Requirements first. You can easily run Steam and many other apps in Docker without having to install a single package on your computer! We all know how catastrophic that can be. Installing Games on Whales is as simple as git clone: git clone https://github.com/games-on-whales/gow.git cd gow Next, read about configuring GoW.","title":"Installation","component":"gow","version":"","name":"installation","url":"/gow/installation.html","titles":[]},"123":{"id":123,"text":"Make sure to checkout the Overview first. At least version 1.18 is required. If you are considering a cluster for multiple home applications then this template might be a good start. This is a required kernel module in order for Sunshine to manage and create virtual devices (mouse, joypad, etc.). Make sure that /dev/uinput is present in the Kubernetes nodes where you intend to run. ls -la /dev/uinput crw------- 1 root root 10, 223 Jul 15 11:46 /dev/uinput You need to have a graphic card supporting HW acceleration in Xorg. If you run your Kubernetes workers into a Virtual Machine ensure you pass it a graphic card. You can use PCI passthrough for this. helm repo add angelnu https://angelnu.github.io/helm-charts helm repo update helm install games-on-whales angelnu/games-on-whales Connect over Moonlight by manually adding the IP address of the worker node running the Helm chart pod. To validate the PIN you can use the Sunshine web interface (at https://:47990/ username: admin, password is admin (at least you changed them in your Helm instance values) or directly calling: curl :47989/pin/. From Moonlight open the Desktop app, from there you should be able to see your X11 apps running! Adjust your Helm chart settings - see the instructions Checkout the troubleshooting page if anything is not working on your side Check out how to configure and use your GPU in order to get HW acceleration (if you have one)","title":"","component":"gow","version":"","name":"kubernetes","url":"/gow/kubernetes.html","titles":[{"text":"Kubernetes instructions","hash":"_kubernetes_instructions","id":1},{"text":"Requirement","hash":"_requirement","id":2},{"text":"Kubernetes","hash":"_kubernetes","id":3},{"text":"uinput","hash":"_uinput","id":4},{"text":"Graphic card","hash":"_graphic_card","id":5},{"text":"Quickstart","hash":"_quickstart","id":6},{"text":"Next steps","hash":"_next_steps","id":7}]},"124":{"id":124,"text":"The gameonwhales/lutris (or ghcr.io/games-on-whales/lutris) image can be used to run a variety of applications. Lutris refers to its self as a \"preservation platform\", and provides scripts for installing many pieces of software on Linux, from games to productivity software. The software you want to run may already have an entry on the Lutris website, in which case, you can either install the software from the Lutris UI directly or extend the image to create a bespoke image. On first run, the startup scripts for this image will configure Lutris to store game installation files and installation meta-data in the /var/lutris directory. By mounting a volume at this directory, multiple instances of the image will share videogame installations. Most applications will save user-specific data in the home directory, which remains exclusively visible to the individual user. Lutris is a desktop application that launches other windows, and as such, it requires a window manager to run; we recommend enabling Sway (set the env variable USE_SWAY=1). The following documents the file-format for images in GOW in general, as well as a couple of peculiar specific to the Lutris Image. The Lutris image consists of the following files; images +- lutris +- Dockerfile +- scripts | +- startup.sh | +- startup-10-create-dirs.sh +- configs +- lutris-system.yml +- lutris-lutris.yml At a basic level, all images based on the base image will feature a Dockerfile and startup.sh script. The Dockerfile will stage the startup.sh script at /opt/gow/startup.sh, overwriting the version provided by the base-app script. The Dockerfile will also copy all the assets for the container (usually to /opt/gow/), and install any additional dependencies. The startup.sh script will launch at the start of every container. It must first prepare the home directory, which will be empty on first-run, and then launch the application. The Lutris image also features a /opt/gow/startup.d directory. Scripts placed in this directory will be sourced by the startup.sh script prior to launching Lutris. startup-10-create-dirs.sh is copied by the Dockerfile to /opt/gow/startup.d. It configures Lutris to install games in /var/lutris/Games by default, and allow multiple instances of the Lutris container to share installation files. These instructions are applicable to any image based on the GoW base image, and are useful if you want to make changes to the image. When making changes to images upon which other images are based, it is naturally required to build all dependent images to propergate the changes. docker build -t gow/base images/base docker build -t gow/base-app --build-arg BASE_IMAGE=gow/base images/base-app docker build -t gow/lutris --build-arg BASE_APP_IMAGE=gow/base-app images/lutris Place the following in /etc/wolf/cfg/config.toml [[apps]] title = \"Lutris\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfLutris\" image = \"gow/lutris\" mounts = [\"lutris-games:/var/lutris/:rw\"] env = [\"RUN_SWAY=1\",\"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\"] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\", \"c 244:* rmw\"] } } \\ \"\"\" This configuration creates a docker named-volume called lutris-games and mounts it at /var/lutris. Since this is where the games will be installed, this may need a lot of storage space. By default, docker will store volumes in /var/lib/docker/volumes. In the above example, you can change lutris-games to any arbitrary path on the host you like, and the game data will be saved there instead. Lutris supports launching games directly, skipping its UI, by passing the correct command line arguments to the lutris binary. Lutris uses this feature to add launchers to menus and desktop shortcuts. We can use it to create a custom container image which uses Lutris' installation scripts, but features a single program. Consider the following structure: images +- lutris-app +- Dockerfile +- scripts +- startup-20-configure-lutris.sh The Dockerfile would copy startup-20-configure-lutris.sh to /opt/gow/startup.d/20-configure-lutris.sh, which in turn would be picked up by the Lutris image’s startup.sh script, and would adjust Lutris commandline args to run the application. Super Tux is a Linux native game which is distributed via AppImage. It also happens to have a Lutris install script. To create a Super Tux image based on the Lutris image, replicate the above structure with the following file contents; ARG BASE_APP_IMAGE FROM ${BASE_APP_IMAGE} COPY --chmod=777 scripts/startup-20-launch-supertux.sh /opt/gow/startup.d/20-launch-supertux.sh ARG IMAGE_SOURCE LABEL org.opencontainers.image.source $IMAGE_SOURCE #!/bin/bash -e source /opt/gow/bash-lib/utils.sh gow_log \"[start-launch-supertux] Begin\" if $LUTRIS -lo 2>/dev/null | grep \"supertux\" then gow_log \"[start-launch-supertux] Super Tux is already installed! Launching.\" LUTRIS_ARGS=(\"lutris:rungame/supertux\") else gow_log \"[start-launch-supertux] Super Tux is not installed! Installing.\" LUTRIS_ARGS=(\"lutris:supertux\") fi gow_log \"[start-launch-supertux] End\" Build the image based on the Lutris image with the following command; docker build -t lutris-supertux --build-arg BASE_APP_IMAGE=gow/lutris images/lutris-supertux Finally, add the appropreate entry to /etc/wolf/cfg/config.toml to add it to wolf. [[apps]] title = \"Super Tux\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfSupertux\" image = \"lutris-supertux\" mounts = [\"lutris-games:/var/lutris/:rw\"] env = [\"APPIMAGE_EXTRACT_AND_RUN=1\",\"RUN_SWAY=1\",\"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\"] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\", \"c 244:* rmw\"] } } \\ \"\"\" This will work. But when you run the image in wolf, you will find the game open by default in windowed mode. Also, because Super Tux runs from an Appimage in docker, it requires the APPIMAGE_EXTRACT_AND_RUN environment variable to be set. These things can be configured in Lutris, and we can achieve the changes we desire by providing a customised version of a Lutris installation script. All we need to do is add the customised script to the scripts directory, have the Dockerfile copy it into the image, and change the startup script to install from the provided script. images +- lutris-app +- Dockerfile +- scripts +- startup-20-configure-lutris.sh +- supertux-appimage.yaml This customised installation script sets APPIMAGE_EXTRACT_AND_RUN as an environment variable, and passes --fullscreen as a commandline argument. description: '' game_slug: supertux gogslug: '' humblestoreid: '' installer_slug: supertux-appimage name: SuperTux notes: 'Arch-based systems might need to install the following dependencies: \"physfs glew1.10 libcurl-gnutls\"' runner: linux script: files: - appimg: https://github.com/SuperTux/supertux/releases/download/v0.6.3/SuperTux-v0.6.3.glibc2.29-x86_64.AppImage game: exe: SuperTux-v0.6.3.glibc2.29-x86_64.AppImage args: --fullscreen installer: - chmodx: appimg - move: dst: $GAMEDIR src: appimg system: env: APPIMAGELAUNCHER_DISABLE: true APPIMAGE_EXTRACT_AND_RUN: true slug: supertux-appimage steamid: null version: AppImage year: 2003 The startup script is mostly the same as the previous version, except the installation command now points to the custom install script. #!/bin/bash -e source /opt/gow/bash-lib/utils.sh gow_log \"[start-launch-supertux] Begin\" if $LUTRIS -lo 2>/dev/null | grep \"supertux\" then gow_log \"[start-launch-supertux] Super Tux is already installed! Launching.\" LUTRIS_ARGS=(\"lutris:rungame/supertux\") else gow_log \"[start-launch-supertux] Super Tux is not installed! Installing.\" LUTRIS_ARGS=(\"-i\" \"/opt/gow/supertux-appimage.yaml\") fi gow_log \"[start-launch-supertux] End\" The Dockerfile needs to be modified to copy the installation script to the right place. ARG BASE_APP_IMAGE # hadolint ignore=DL3006 FROM ${BASE_APP_IMAGE} COPY --chmod=777 scripts/startup-20-launch-supertux.sh /opt/gow/startup.d/20-launch-supertux.sh COPY scripts/supertux-appimage.yaml /opt/gow/supertux-appimage.yaml ARG IMAGE_SOURCE LABEL org.opencontainers.image.source $IMAGE_SOURCE The build command is exactly the same as it was in the previous example. docker build -t lutris-supertux --build-arg BASE_APP_IMAGE=gow/lutris images/lutris-supertux Finally, the appropriate entry in /etc/wolf/cfg/config.toml can be changed to remove the now superfluous environment variable. [[apps]] title = \"Super Tux\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfSupertux\" image = \"lutris-supertux\" mounts = [\"lutris-games:/var/lutris/:rw\"] env = [\"RUN_SWAY=1\",\"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\"] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\"] } } \\ \"\"\" Because the installation script is now correctly setting the environment, we no longer have to set APPIMAGE_EXTRACT_AND_RUN in config.toml. [[apps]] title = \"Super Tux\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfSupertux\" image = \"lutris-supertux\" mounts = [\"lutris-games:/var/lutris/:rw\"] env = [\"RUN_SWAY=1\",\"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\"] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\", \"c 244:* rmw\"] } } \\ \"\"\" Now, when you select the \"Super Tux\" entry in Moonlight, Super Tux will install from the yaml script we’ve defined, and the game will run in fullscreen mode by default.","title":"Lutris","component":"gow","version":"","name":"lutris","url":"/gow/lutris.html","titles":[{"text":"Internal Layout","hash":"_internal_layout","id":1},{"text":"Folder Format","hash":"_folder_format","id":2},{"text":"Building the Lutris Image","hash":"_building_the_lutris_image","id":3},{"text":"Step 1. Build the base image","hash":"_step_1_build_the_base_image","id":4},{"text":"Step 2. Build the base-app image","hash":"_step_2_build_the_base_app_image","id":5},{"text":"Step 3. Build the lutris image","hash":"_step_3_build_the_lutris_image","id":6},{"text":"Step 4. Configure Wolf to use the container","hash":"_step_4_configure_wolf_to_use_the_container","id":7},{"text":"Extending the Lutris Image","hash":"_extending_the_lutris_image","id":8},{"text":"A Practical Example","hash":"_a_practical_example","id":9},{"text":"Dockerfile","hash":"_dockerfile","id":10},{"text":"scripts/startup-20-launch-supertux.sh","hash":"_scriptsstartup_20_launch_supertux_sh","id":11},{"text":"Build the image","hash":"_build_the_image","id":12},{"text":"config.toml","hash":"_config_toml","id":13},{"text":"Use a custom install script.","hash":"_use_a_custom_install_script","id":14},{"text":"Structure","hash":"_structure","id":15},{"text":"supertux-appimage.yaml","hash":"_supertux_appimage_yaml","id":16},{"text":"startup-20-configure-lutris.sh","hash":"_startup_20_configure_lutris_sh","id":17},{"text":"Dockerfile","hash":"_dockerfile_2","id":18},{"text":"Build the image","hash":"_build_the_image_2","id":19},{"text":"config.toml","hash":"_config_toml_2","id":20},{"text":"config.toml","hash":"_config_toml_3","id":21}]},"125":{"id":125,"text":"Xorg will fail to launch if it doesn’t believe you have a monitor attached. There are a couple of ways to handle this situaion. Nothing more to say, really. If you have an actual monitor, and you can get it physically close to your server, you can just use that. The Xorg desktop will show on the monitor, though, which may be undesirable. You can get dummy plugs for HDMI and DisplayPort that pretend to be a monitor by returning built-in EDID data when plugged in. They’re relatively inexpensive, and they don’t take up much space, so this is a popular option. You can also unplug the dummy and plug in a monitor as needed, which may or may not be a benefit depending on your situation. By setting up some custom configuration, you can force Xorg to behave as though a monitor is plugged in even when nothing is. This sounds like a slam-dunk for \"best overall option\" but the configuration is significantly more complex than simply plugging in a dummy, so it’s not necessarily the best option for everyone. Below is a summary of the changes you’ll need to make. EDID data is how Xorg determines what resolutions and timings your monitor supports without having to be explicitly configured for it. In the headless case we’re setting up, that means that the EDID file you supply needs to declare support for whatever resolution you want to run at. The exact steps for creating an EDID file will vary wildly depending on your setup and goals, so it’s a bit beyond the scope of this guide. Having said that, here are some pointers. The EDID file can either be a .bin binary file containing the exact 256 bytes of EDID data, or it can be a .txt file where each byte is represented as 2 hexadecimal characters, with the bytes separated by spaces. For example, this file, which has support for several resolutions up to 1920x1080. If that file doesn’t meet your needs, you still have options. One possibility is to read in the EDID from a connected monitor and use that. Alternatively, you can try to generate your own file using a tool like edid-generator, but that’s not something we’ve tested before. Create a new file somewhere called xorg-screen.conf. In it, put this configuration: Section \"Screen\" Identifier \"Screen0\" Device \"Device0\" Monitor \"Monitor0\" DefaultDepth 24 Option \"AllowEmptyInitialConfiguration\" \"True\" Option \"UseDisplayDevice\" \"DP-0\" Option \"CustomEDID\" \"DP-0:/home/retro/edid.txt\" Option \"ConnectedMonitor\" \"DP-0\" SubSection \"Display\" Depth 24 EndSubSection EndSection Next, make sure Docker knows how to find your new configuration and EDID files. Add lines like these to the volumes section under xorg in your compose/headless.yml to mount them into the Xorg image. services: xorg: # ... volumes: # START ADDING HERE - /path/to/edid.txt:/home/retro/edid.txt:ro - /path/to/xorg-screen.conf:/usr/share/X11/xorg.conf.d/01-xorg-screen.conf:ro # END ADDING HERE Last but not least, make sure the XORG_DISPLAY_PORT variable in env/headless.env is set to the same value as the UseDisplayDevice option in your xorg-screen.conf file. If you copied the snippet above, the correct value should be DP-0. Now you should be able to launch GOW as normal, without any monitor-related issues.","title":"Monitor requirements","component":"gow","version":"","name":"monitor","url":"/gow/monitor.html","titles":[{"text":"1. Attach an actual monitor","hash":"_attach_an_actual_monitor","id":1},{"text":"2. Use a dummy plug","hash":"_use_a_dummy_plug","id":2},{"text":"3. Force Xorg to use a custom EDID","hash":"_force_xorg_to_use_a_custom_edid","id":3},{"text":"3.1. Obtaining an EDID file","hash":"_obtaining_an_edid_file","id":4},{"text":"3.2. Xorg screen configuration","hash":"_xorg_screen_configuration","id":5},{"text":"3.3. Docker configuration","hash":"_docker_configuration","id":6},{"text":"3.4. Environment","hash":"_environment","id":7}]},"126":{"id":126,"text":"You can see if your host is using the proprietary driver using lshw: $ lshw -class video | grep -i driver configuration: driver=nvidia latency=0 In order to make use of your GPU inside a docker container, you’ll need to set up the NVIDIA Container Toolkit. If you have more than one NVIDIA GPU, you may want to set the GPU_UUID variable in env/nvidia.env to indicate which card to use. To get the correct UUID for your GPU, use the nvidia-container-cli command: $ sudo nvidia-container-cli --load-kmods info NVRM version: [version] CUDA version: 11.3 Device Index: 0 Device Minor: 0 Model: NVIDIA GeForce [model] Brand: GeForce GPU UUID: GPU-[uuid] Bus Location: 00000000:0a:00.0 Architecture: 7.5 Older NVIDIA GPUs data might not appear in nvidia-smi, but there is a patch that will fix the issue. For more information, see https://github.com/CFSworks/nvml_fix Although the NVIDIA Container Toolkit automatically provides most of the drivers needed to use the GPU inside a container, Xorg is not officially supported. This means that the runtime will not automatically map in the specific drivers needed by Xorg. The run-gow script attempts to automatically handle this situation for you, if you tell it you’re using an NVIDIA GPU, but under rare circumstances it may not be able to. If you run into trouble, come chat with us on Discord. You will need to pass the --gpu nvidia flag any time you run a run-gow command. It should be possible to use the nouveau driver, but be aware that this path is significantly less well-tested than using the proprietary driver. Make sure that the host doesn’t use proprietary drivers but that it’s using the open source nouveau drivers. sudo lshw -class video | grep driver= configuration: driver=nouveau latency=0 Double check that the GPU card is correctly listed under /dev/dri/: ls -la /dev/dri/ total 0 drwxr-xr-x 3 root root 100 Jun 20 09:47 . drwxr-xr-x 17 root root 3100 Jun 20 10:33 .. drwxr-xr-x 2 root root 80 Jun 20 09:47 by-path crw-rw---- 1 root video 226, 0 Jun 20 09:47 card0 crw-rw---- 1 root render 226, 128 Jun 20 09:47 renderD128 Because the nouveau driver implements standard APIs, you will need to make sure you do not pass --gpu nvidia when using run-gow.","title":"NVIDIA GPUs","component":"gow","version":"","name":"nvidia","url":"/gow/nvidia.html","titles":[{"text":"Using proprietary drivers","hash":"_using_proprietary_drivers","id":1},{"text":"Older NVIDIA GPUs","hash":"_older_nvidia_gpus","id":2},{"text":"Xorg drivers","hash":"_xorg_drivers","id":3},{"text":"NVIDIA GPUs with nouveau drivers","hash":"_nvidia_gpus_with_nouveau_drivers","id":4}]},"127":{"id":127,"text":"Historically, this was the first attempt that we’ve made at running games in Docker. Wolf has now completely replaced the simple bash script present in this repo. Games on Whales (GOW) lets you stream games (and other graphical applications) running in Docker containers with hardware acceleration and low latency. The goal is to allow a server to stream games to clients the same way you play a video on YouTube. A server is not necessarily a gigantic beast of a machine; in fact, GoW will probably run on hardware you already have, such as a laptop or desktop computer, or even something smaller and compact like a Raspberry Pi (in theory). Generally, you should be able to pick any OS that supports Docker and start using GoW, but testing and development are focused on Linux-based systems. We bring together a few different components: Platform Most of the software in the Games on Whales system runs in Docker containers. Containers are software packages that are designed to make installation and configuration easy by providing a consistent platform everywhere the package is run. You can choose to run GoW in either Host Desktop mode, or Headless mode. In Headless mode, we run a few platform containers for you: Xorg: The famous windowing system for managing and displaying graphical applications (GUI) PulseAudio: A sound server that can manage audio coming from multiple sources (apps). In Host Desktop mode, we expect the host server to provide those pieces. Streaming Server GoW streams running apps to clients using NVIDIA’s GameStream protocol. We provide a choice of two open-source server implementations. Although NVIDIA has announced that they are ending support for GameStream in early 2023, these open-source implementations (and thus GoW itself) do not rely on any NVIDIA support or infrastructure and will continue to work even after that date. Sunshine: The original open-source GameStream host, and still the most well-tested. Use this if you’re unsure which one to pick. Wolf: A new GameStream host, still in alpha. Client Moonlight is an open-source GameStream protocol client. Moonlight runs on many platforms, including: mobile phones, laptops, desktops, Steam Deck, and even the Nintendo Switch! Moonlight is not distributed with GoW. You’ll need to install it on each device you plan to use as a client for playing games. Applications The GoW system aims to be compatible with as many GUI app containers as possible. Here’s a selection of the ones we provide, though adding more is a very straightforward process. RetroArch: An open source, cross-platform frontend for emulators, game engines, and more! Steam: The popular game store and launcher, now sandboxed in a container Firefox: A modern web browser Head over to the components overview if you are interested in how these pieces of software are tied together by GOW","title":"Overview","component":"gow","version":"","name":"overview","url":"/gow/overview.html","titles":[{"text":"How does it work?","hash":"_how_does_it_work","id":1}]},"128":{"id":128,"text":"If you have more than one GPU in your system, which can frequently happen if you have both a dedicated GPU and an iGPU, you may find yourself in a situation where Xorg won’t start because it’s trying to use the wrong GPU. Unfortunately, the run-gow script is currently not smart enough to set up this configuration for you, but it is possible to manually tell Xorg which GPU to use. The PrimaryGPU option in the OutputClass section of xorg.conf can be used to specify which GPU to use based on which driver it uses. First, create a file somewhere on your host called xorg-primary-gpu.conf. Set the contents based on what type of GPU you want to use as primary: NVIDIA AMD Intel Section \"OutputClass\" Identifier \"nvidia\" MatchDriver \"nvidia-drm\" Driver \"nvidia\" Option \"AllowEmptyInitialConfiguration\" ModulePath \"/nvidia/xorg\" Option \"PrimaryGPU\" \"yes\" EndSection Section \"OutputClass\" Identifier \"amd\" MatchDriver \"amdgpu\" Driver \"amdgpu\" Option \"AllowEmptyInitialConfiguration\" Option \"PrimaryGPU\" \"yes\" EndSection Section \"OutputClass\" Identifier \"intel\" MatchDriver \"i915\" # change this to the correct driver for your iGPU Driver \"i915\" # change this to the correct driver for your iGPU Option \"AllowEmptyInitialConfiguration\" Option \"PrimaryGPU\" \"yes\" EndSection Then, open config/platforms/headless.yml and add a line to the volumes for the xorg container to use this new configuration: - /path/to/xorg-primary-gpu.conf:/usr/share/X11/xorg.conf.d/01-primary-gpu.conf:ro","title":"Primary GPU","component":"gow","version":"","name":"primary-gpu","url":"/gow/primary-gpu.html","titles":[{"text":"The PrimaryGPU option","hash":"_the_primarygpu_option","id":1}]},"129":{"id":129,"text":"uinput is a required kernel module allows software running on Linux systems to create virtual input devices. It’s required by the streaming host and it’s the only hard requirement that we need in the host machine’s kernel. Most Linux distributions, such as Ubuntu and Debian, already ship with it. You can easily verify that it’s installed by checking for the /dev/uinput device on your host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jul 15 11:46 /dev/uinput If it’s not there by default, consult your distro’s documentation for adding kernel modules. If you’re using unRAID, see our unRAID instructions. If you’re using some other platform and you’re having difficulty with this step, come chat with us about it on Discord; we’d be happy to try to help you get on the right track. If you have issues with inputs (mouse, gamepad, etc) while streaming with GOW, it’s very likely that something is wrong with uinput. Host Desktop Headless unRAID You must have a monitor connected, or alternatively a dummy plug. You must have a user logged in. To make this easier for unattended systems, you might want to enable autologin. You must meet the monitor requirements detailed here: Monitor requirements. You must meet the monitor requirements detailed here: Monitor requirements. unRAID before version 6.11.0-rc3 is missing the required uinput kernel module out of the box. If you are using an older version, we recommend installing the uinput plugin unRAID doesn’t come with docker-compose, but you can easily install it by installing the docker-compose-manager plugin. If you have an NVIDIA GPU you’ll also have to install the nvidia-driver plugin After you’ve set up your host, you can install GoW.","title":"Requirements","component":"gow","version":"","name":"requirements","url":"/gow/requirements.html","titles":[{"text":"uinput","hash":"_uinput","id":1},{"text":"Platform-specific requirements","hash":"_platform_specific_requirements","id":2},{"text":"Monitor","hash":"_monitor","id":3},{"text":"User","hash":"_user","id":4},{"text":"Monitor","hash":"_monitor_2","id":5},{"text":"Monitor","hash":"_monitor_3","id":6},{"text":"uinput","hash":"_uinput_2","id":7},{"text":"docker-compose","hash":"_docker_compose","id":8},{"text":"NVIDIA GPU","hash":"_nvidia_gpu","id":9}]},"130":{"id":130,"text":"GoW is used by many people to play games and run other graphical applications every day, including hardware accelerated graphics. But we’ve got many more features and improvements in the pipeline! Here’s a peek at some things we’re working on: Expand our list of curated docker containers for popular GUI applications like: Firefox, Steam, RetroArch, etc. Support as many platforms as we can Create great documentation so that anybody can understand and learn from this project Make a ``launcher app'' that will let users start/stop other GUI containers easily Much more! Do you want to contribute to this project?","title":"Roadmap","component":"gow","version":"","name":"roadmap","url":"/gow/roadmap.html","titles":[]},"131":{"id":131,"text":"Historically, this was the first attempt that we’ve made at running games in Docker. Wolf has now completely replaced the simple bash script present in this repo. Games on Whales ties together several different components, with support for many host OSes and hardware configurations. In order to make it easier to manage all that, and even make most of it automatic, we’ve provided a Bash script to handle the details for you. You can think of run-gow as a frontend for docker-compose; it takes some of its own arguments at the beginning, but passes everything else on untouched. The complete usage description is below, but first let’s talk about a few of the options you’re definitely going to want to set. The --platform option is used to specify whether the underlying Xorg and Pulse platform is provided by the host computer, or if GoW should launch containers for those components. Use --platform host to use the host’s platform, or --platform headless to launch the platform in containers. The default is --platform host. Some GPUs require extra configuration, so the --gpu option is available to tell run-gow which GPU you plan on using. Possible values are nvidia and intel. Notably, AMD GPUs are reported to be working well without any additional configuration, so you won’t need this option if you’re using AMD. If you’re running headless and you have more than one GPU, including if you have a dedicated GPU and an iGPU, you may need to manually tell Xorg which GPU to use. See here for details on how to do that. You should set the --gpu option appropriately for the GPU you plan to use. By default, if you launch GoW and connect with Moonlight, you’ll only see a basic desktop. However, it’s likely that you have at least one application in mind that you’d like to launch, and you can use the --app argument to specify that. Supported apps can be found in the compose/apps directory; just leave off the .yml: $ ./run-gow --app steam You can specify --app [app name] as many times as you like, if you want to launch multiple applications. run-gow Usage Launch the Games on Whales system Usage: run-gow [options] [compose commands] Arguments after the last option will be passed directly to 'docker compose'. For example, to launch the containers in the background, try: $ run-gow --app retroarch up -d Options: -h, --help Print this help text. -a, --app Specify an application to launch. Can be used multiple times. -d, --debug Print some extra debugging information before running Docker commands. -e, --env-file Specify an additional file of environment varibles to load before launching 'docker compose'. -g, --gpu Use this option to specify what type of GPU to use with Games on Whales. Not all GPU types require this option (notably, AMD does not). Possible types: nvidia, intel -p, --platform Use this option to specify whether system services like Xorg should be containerized or not. Possible values: headless - run xorg, udev, and pulse in containers host - use system services already running on the host server [default] -q, --quiet If set, this script will not produce any output of its own. This will not affect output from 'docker compose'. -s, --streamer Use this option to specify which streaming server should be used to connect with Moonlight. Possible values: sunshine - the original, more stable option [default] wolf - the bleeding edge option. still in beta. -x, --headless DEPRECATED. If set, has the same effect as '--platform headless' -- Signifies the end of options. Once you’ve got your system set up how you like it, you’ll find that many of the options you provide to run-gow won’t actually change very frequently, if at all. In order to cut down on the repetitiveness of always having to type those arguments every time you use run-gow, we’ve provided a mechanism to supply a set of \"default arguments\". You can do that by creating a file called $HOME/.config/gow/run-gow-rc that contains the defaults you’d like to use. The script will use the first non-empty, non-commented line as defaults each time you run, and any extra arugments you provide on the command line will override what’s in the run-gow-rc file. For example, if you set your run-gow-rc to this: --platform headless --gpu nvidia and run: $ ./run-gow --app steam up run-gow will launch Steam in headless mode with NVIDIA GPU.","title":"run-gow","component":"gow","version":"","name":"run-gow","url":"/gow/run-gow.html","titles":[{"text":"--platform","hash":"_platform","id":1},{"text":"--gpu","hash":"_gpu","id":2},{"text":"--app","hash":"_app","id":3},{"text":"run-gow-rc","hash":"_run_gow_rc","id":4}]},"132":{"id":132,"text":"Now that you’ve got your system set up, and GoW installed and configured, you’re ready to launch the system. Launching GoW is done with the aptly named run-gow script in the install directory. If you’re unsure about what any of the examples on this page mean, this deep dive guide should help to explain things. Also, if you’re using a GPU for hardware acceleration (and you should!) you may need to provide a --gpu option. See the deep dive for details. Now it’s time to download the pre-built container images: Host Desktop Headless (incl. unRAID) run-gow --app [appname] pull run-gow --platform headless --app [appname] pull Currently supported appnames can be found in our GitHub repo, or you can always add your own. This may take a minute or two to complete, since it has to download the container images. Next, you can launch the system: Host Desktop Headless (incl. unRAID) run-gow --app [appname] up run-gow --platform headless --app [appname] up Next up, connecting!","title":"Running","component":"gow","version":"","name":"running","url":"/gow/running.html","titles":[{"text":"Pulling containers","hash":"_pulling_containers","id":1},{"text":"Launching","hash":"_launching","id":2}]},"133":{"id":133,"text":"You can use the gameonwhales/steam image to play Steam games on GOW. It’s highly recommended to use a GPU in order to run Steam games. The Steam client and many Steam games are 32-bit applications and therefore require 32-bit drivers for your GPU. If the multilib drivers are not automatically installed on your host, please make sure you have installed both the 64-bit and the 32-bit drivers installed. Here are a few frequently asked questions related to Steam support; if you run into any other issues, feel free to file an issue on GitHub or reach out in Discord. You can look at Steam’s 'System Information' to verify that your GPU is detected. Many parts of the Steam client’s UI are rendered using an integrated webview, which can be sensitive to the size of /dev/shm. You can check the size in your container like this: $ docker exec -it gow-steam-1 df -h | grep shm If it is at least 500MB, you may be experiencing a different issue. Check the logs at local_state/.steam/debian-installation/error.log for more info on the specific issue. Surprisingly, you can! And it’s fairly easy to do it using proton which is integrated in Steam via Steam Play. In order to enable it: Steam > Settings - Steam Play [✓] Enable Steam Play for supported titles (optional) [✓] Enable Steam Play for all other titles There are a lot of different places for logs; for example, each game logs in a different folder. Here are a few hints on where to look local_state/.steam/debian-installation/error.log This is where most of the issues with the Steam client are logged local_state/.config/ This is where games usually put log and config files. For example, local_state/.config/unity3d/NoBrakesGames/Human/Player.log is the log file for Human Fall Flat local_state/Steam/logs/bootstrap_log.txt This is the log file related to starting/updating the steam client","title":"Steam","component":"gow","version":"","name":"steam","url":"/gow/steam.html","titles":[{"text":"Can Steam see my GPU?","hash":"_can_steam_see_my_gpu","id":1},{"text":"UI: Why are all the Steam windows black?","hash":"_ui_why_are_all_the_steam_windows_black","id":2},{"text":"Can I run Windows games?","hash":"_can_i_run_windows_games","id":3},{"text":"Something is wrong! Where are the logs?","hash":"_something_is_wrong_where_are_the_logs","id":4}]},"134":{"id":134,"text":"Here’s a list of common problems and their solutions. If you’re having trouble with something and you don’t see it mentioned, or if you need more help solving your problem, feel free to open an issue or reach out on Discord! In order to be able to stream your desktop, you must meet the Monitor requirements. You can see more stats in Moonlight during the streaming if you press Ctrl+Alt+Shift+S (see: all keyboard options). This means that your local_state folder as defined in the user.env file is not owned by user 1000. You can fix this by: sudo chown -R 1000:1000 local_state If keyboard and mouse are working it means that uinput, Xorg and Sunshine are correctly working. Gamepad devices are created by Sunshine on connection, only if the client has one attached. Gamepads are not handled by Xorg as input devices; instead they are directly accessed by the app that wants to use them. That’s why on containers that use gamepads have to run in privileged mode. network_mode: ${UDEVD_NETWORK} privileged: true Using the keyboard you can move using the arrows and get back to the previous menu by pressing backspace From the Main Menu > Online Updater select: Update Core Info Files Update assets Press F to toggle fullscreen if you need to. Xorg is logging more than what you can see from the command line; you can get the full log file at /var/log/Xorg.0.log from inside the Docker container. Running the following should copy it to your current directory, even if the container is no longer running: docker cp gow-xorg-1:/var/log/Xorg.0.log . If you’re running in headless mode, it’s likely that the file will be called Xorg.99.log instead of Xorg.0.log. I’m still not sure about this one, it happened to me when trying to start GOW on a Desktop system when the screen was locked. Unlocking the screen first and then running GOW solved the issue for me. Disabling modesetting might be another way to get around it.","title":"Troubleshooting","component":"gow","version":"","name":"troubleshooting","url":"/gow/troubleshooting.html","titles":[{"text":"Lag, slow, missing frames","hash":"_lag_slow_missing_frames","id":1},{"text":"mkdir: cannot create directory `/home/retro/sunshine/': Permission denied","hash":"_mkdir_cannot_create_directory_homeretrosunshine_permission_denied","id":2},{"text":"I can use my mouse and keyboard but my gamepad doesn’t work","hash":"_i_can_use_my_mouse_and_keyboard_but_my_gamepad_doesnt_work","id":3},{"text":"RetroArch is missing icons!","hash":"_retroarch_is_missing_icons","id":4},{"text":"How can I get the full logs of Xorg?","hash":"_how_can_i_get_the_full_logs_of_xorg","id":5},{"text":"Xorg: Failed to acquire modesetting permission","hash":"_xorg_failed_to_acquire_modesetting_permission","id":6}]},"135":{"id":135,"text":"In the Games on Whales system, the \"platform\" is the component that provides system-level services like Xorg, PulseAudio, and udev. We provide two options; \"Host Desktop\", which uses the services already provided on the host system, and \"Headless\", which launches those services in Docker containers. The goal of this page is to help you choose which one is best for your situation. Before we get to analyzing the pros and cons of each approach, we should first address the \"elephant in the room\" (as it were): it can be tricky, or even impossible, to run two separate instances of Xorg on the same computer. So, if you’re looking to host GoW on a system that already has a desktop, and therefore a running Xorg server, it may be that your only option is to run in \"Host Desktop\" mode. In this mode, only the streaming server and the applications are containerized. That may seem like a big loss, but there are still many benefits of containerizing applications as much as possible: It’s easy to control how much CPU and memory to allocate to each app that runs via Docker You don’t have to manage installation scripts, dependency conflicts, or updates — we’ll handle all of that for you You can easily delete all files created by the application simply by removing the container It’s easier to backup configuration files and state You may also want to check out x11docker: a project focused on running GUI apps on top of your existing desktop environment. This is where GoW really shines! We’ll take care of running and configuring: A desktop environment With audio Inside Docker That can support HW acceleration And with a streaming solution that: Is low latency Supports keyboard, mouse and gamepads Can be hardware accelerated !!! On top of that foundation layer you can run most of the GUI applications out there and even games!","title":"Platforms","component":"gow","version":"","name":"which-platform","url":"/gow/which-platform.html","titles":[{"text":"The Decision May be Made For You","hash":"_the_decision_may_be_made_for_you","id":1},{"text":"Host Desktop mode","hash":"_host_desktop_mode","id":2},{"text":"Headless mode","hash":"_headless_mode","id":3}]},"136":{"id":136,"text":"Given the popularity of Windows as a desktop OS, it’s natural to wonder if the Games on Whales system can be run on Windows. Unfortunately, as of right now, the answer is \"no, not really\". There are a couple of reasons why: Windows as a Server OS Although Windows is popular as a desktop OS, and there are certainly many server solutions built on top of Windows, it really isn’t a very common server OS in home/hobbyist setups. Docker on Windows Docker on Windows requires an extra layer of virtualization that can slow things down, and even cause extra headaches, particularly when networking is involved. WSL2 WSL2 is missing the uinput kernel module, and although we have been able to build the module ourselves, Xorg still fails to launch after doing so. That should be a solvable problem, but it will require some investigation to get going. For those reasons, we believe that on Windows, your best bet is to just install Sunshine and other applications like you normally would, even though it means foregoing the benefits of containerization. Having said that, we’re open to the idea that that may not always be the case, and we’re open to new ideas and efforts to make progress on running GoW on Windows. You can follow the current status here","title":"Windows","component":"gow","version":"","name":"windows","url":"/gow/windows.html","titles":[]}},"components":{},"componentVersions":{"wolf/stable":{"displayVersion":"stable","title":"wolf","version":"stable","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/stable/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Quickstart","url":"/wolf/stable/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/stable/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/stable/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/stable/user/troubleshooting.html","urlType":"internal"},{"content":"Apps:index.adoc","url":"#Apps:index.adoc","urlType":"internal","unresolved":true,"items":[{"content":"Apps:steam.adoc","url":"#Apps:steam.adoc","urlType":"internal","unresolved":true},{"content":"Apps:pegasus.adoc","url":"#Apps:pegasus.adoc","urlType":"internal","unresolved":true}]}]},{"content":"Developer guide","items":[{"content":"How does it work?","url":"/wolf/stable/dev/how-it-works.html","urlType":"internal"},{"content":"Dev environment setup","url":"/wolf/stable/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/stable/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/stable/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/stable/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/stable/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/stable/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/stable/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/stable/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/stable/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/stable/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/stable/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/stable/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"wolf/dev-tracy":{"displayVersion":"dev-tracy","title":"wolf","version":"dev-tracy","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/dev-tracy/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Overview","url":"/wolf/dev-tracy/user/overview.html","urlType":"internal"},{"content":"Quickstart","url":"/wolf/dev-tracy/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/dev-tracy/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/dev-tracy/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/dev-tracy/user/troubleshooting.html","urlType":"internal"}]},{"content":"Developer guide","items":[{"content":"Dev environment setup","url":"/wolf/dev-tracy/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/dev-tracy/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/dev-tracy/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/dev-tracy/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/dev-tracy/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/dev-tracy/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/dev-tracy/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/dev-tracy/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/dev-tracy/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/dev-tracy/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/dev-tracy/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/dev-tracy/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"wolf/dev-nix":{"displayVersion":"dev-nix","title":"wolf","version":"dev-nix","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/dev-nix/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Overview","url":"/wolf/dev-nix/user/overview.html","urlType":"internal"},{"content":"Quickstart","url":"/wolf/dev-nix/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/dev-nix/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/dev-nix/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/dev-nix/user/troubleshooting.html","urlType":"internal"}]},{"content":"Developer guide","items":[{"content":"Dev environment setup","url":"/wolf/dev-nix/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/dev-nix/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/dev-nix/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/dev-nix/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/dev-nix/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/dev-nix/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/dev-nix/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/dev-nix/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/dev-nix/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/dev-nix/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/dev-nix/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/dev-nix/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"wolf/dev-fix-109":{"displayVersion":"dev-fix-109","title":"wolf","version":"dev-fix-109","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/dev-fix-109/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Quickstart","url":"/wolf/dev-fix-109/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/dev-fix-109/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/dev-fix-109/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/dev-fix-109/user/troubleshooting.html","urlType":"internal"},{"content":"Steam","url":"/wolf/dev-fix-109/user/steam.html","urlType":"internal"}]},{"content":"Developer guide","items":[{"content":"How does it work?","url":"/wolf/dev-fix-109/dev/how-it-works.html","urlType":"internal"},{"content":"Dev environment setup","url":"/wolf/dev-fix-109/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/dev-fix-109/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/dev-fix-109/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/dev-fix-109/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/dev-fix-109/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/dev-fix-109/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/dev-fix-109/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/dev-fix-109/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/dev-fix-109/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/dev-fix-109/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/dev-fix-109/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/dev-fix-109/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"wolf/dev-fake-uinput":{"displayVersion":"dev-fake-uinput","title":"wolf","version":"dev-fake-uinput","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/dev-fake-uinput/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Quickstart","url":"/wolf/dev-fake-uinput/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/dev-fake-uinput/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/dev-fake-uinput/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/dev-fake-uinput/user/troubleshooting.html","urlType":"internal"}]},{"content":"Developer guide","items":[{"content":"How does it work?","url":"/wolf/dev-fake-uinput/dev/how-it-works.html","urlType":"internal"},{"content":"Dev environment setup","url":"/wolf/dev-fake-uinput/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/dev-fake-uinput/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/dev-fake-uinput/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/dev-fake-uinput/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/dev-fake-uinput/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/dev-fake-uinput/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/dev-fake-uinput/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/dev-fake-uinput/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/dev-fake-uinput/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/dev-fake-uinput/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/dev-fake-uinput/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/dev-fake-uinput/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"wolf/dev-backend-api":{"displayVersion":"dev-backend-api","title":"wolf","version":"dev-backend-api","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/dev-backend-api/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Quickstart","url":"/wolf/dev-backend-api/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/dev-backend-api/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/dev-backend-api/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/dev-backend-api/user/troubleshooting.html","urlType":"internal"},{"content":"Steam","url":"/wolf/dev-backend-api/user/steam.html","urlType":"internal"}]},{"content":"Developer guide","items":[{"content":"How does it work?","url":"/wolf/dev-backend-api/dev/how-it-works.html","urlType":"internal"},{"content":"Dev environment setup","url":"/wolf/dev-backend-api/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/dev-backend-api/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/dev-backend-api/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/dev-backend-api/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/dev-backend-api/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/dev-backend-api/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/dev-backend-api/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/dev-backend-api/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/dev-backend-api/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/dev-backend-api/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/dev-backend-api/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/dev-backend-api/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"gow/":{"displayVersion":"default","title":"gow","version":"","name":"gow","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/gow/index.html","navigation":[{"items":[{"content":"Home","url":"/gow/index.html","urlType":"internal","items":[{"content":"What is GOW?","items":[{"content":"Overview","url":"/gow/overview.html","urlType":"internal"},{"content":"Components","url":"/gow/components-overview.html","urlType":"internal"},{"content":"How can I use GOW?","url":"/gow/how-to-use.html","urlType":"internal"},{"content":"Roadmap","url":"/gow/roadmap.html","urlType":"internal"}]},{"content":"Images","items":[{"content":"Lutris","url":"/gow/lutris.html","urlType":"internal"}]},{"content":"Getting Started","items":[{"content":"Prerequisites","url":"/gow/requirements.html","urlType":"internal","items":[{"content":"Monitor requirements","url":"/gow/monitor.html","urlType":"internal"}]},{"content":"Installation","url":"/gow/installation.html","urlType":"internal"},{"content":"Configuration","url":"/gow/configuration.html","urlType":"internal"},{"content":"Running","url":"/gow/running.html","urlType":"internal"},{"content":"Connecting","url":"/gow/connecting.html","urlType":"internal"}]},{"content":"Advanced","items":[{"content":"Which platform?","url":"/gow/which-platform.html","urlType":"internal"},{"content":"Adding a new app","url":"/gow/adding-an-app.html","urlType":"internal"},{"content":"Kubernetes","url":"/gow/kubernetes.html","urlType":"internal"},{"content":"Is Windows supported?","url":"/gow/windows.html","urlType":"internal"},{"content":"Nvidia GPU","url":"/gow/nvidia.html","urlType":"internal"},{"content":"Multiple GPUs","url":"/gow/primary-gpu.html","urlType":"internal"},{"content":"Steam","url":"/gow/steam.html","urlType":"internal"},{"content":"run-gow","url":"/gow/run-gow.html","urlType":"internal"},{"content":"Troubleshooting","url":"/gow/troubleshooting.html","urlType":"internal"}]},{"content":"Contributing/Developing","items":[{"content":"Contributing","url":"/gow/contributing.html","urlType":"internal"},{"content":"Docker build","url":"/gow/docker-build.html","urlType":"internal"}]}]}],"root":true,"order":0}]}}}}) \ No newline at end of file +antoraSearch.initSearch(lunr, {"index":{"version":"2.3.9","fields":["title","name","text","component"],"fieldVectors":[["title/1-1",[0,63.355]],["name/1-1",[]],["text/1-1",[]],["component/1-1",[]],["title/1",[1,19.237]],["name/1",[2,1.513]],["text/1",[1,1.735,3,2.916,4,2.437,5,2.916,6,2.916,7,1.244,8,2.916,9,2.916,10,1.828,11,1.998,12,2.866,13,2.338,14,1.885,15,3.324,16,3.52,17,3.06,18,3.324,19,2.889,20,1.387,21,1.315,22,1.956,23,2.818,24,2.296,25,2.538,26,2.916,27,1.622,28,1.357,29,2.662,30,2.392,31,1.47,32,2.601,33,1.936,34,1.498,35,2.275,36,2.148,37,2.538,38,1.517,39,1.507,40,2.62,41,2.72,42,2.916,43,1.828,44,2.169,45,2.044,46,2.392,47,1.897,48,3.114,49,1.068,50,2.916,51,2.735,52,1.372,53,2.428,54,2.485,55,2.392,56,3.274,57,2.839,58,4.53,59,2.311,60,1.315,61,1.444,62,2.044,63,1.956,64,1.365,65,2.283,66,1.295,67,2.275,68,1.322,69,1.658,70,2.35,71,2.735,72,2.916,73,2.311,74,2.068,75,1.599,76,2.044,77,1.861,78,1.536,79,2.916,80,1.844,81,1.936,82,2.338,83,1.977,84,2.021,85,1.567,86,2.916,87,2.437,88,1.78,89,1.709,90,4.328,91,2.538,92,2.916,93,3.684,94,1.879,95,2.311,96,2.916,97,2.916,98,1.546,99,2.916,100,2.538,101,2.538,102,2.485,103,1.411,104,2.916,105,2.916,106,2.916,107,2.392,108,1.723,109,2.597,110,1.998,111,2.916,112,2.916,113,2.538,114,2.735,115,2.916,116,2.818]],["component/1",[1,0.442]],["title/2-1",[117,44.415]],["name/2-1",[]],["text/2-1",[]],["component/2-1",[]],["title/2-2",[118,63.355]],["name/2-2",[]],["text/2-2",[]],["component/2-2",[]],["title/2-3",[119,50.65,120,26.687]],["name/2-3",[]],["text/2-3",[]],["component/2-3",[]],["title/2-4",[121,41.549,122,31.468]],["name/2-4",[]],["text/2-4",[]],["component/2-4",[]],["title/2-5",[13,25.697,121,41.549]],["name/2-5",[]],["text/2-5",[]],["component/2-5",[]],["title/2-6",[123,39.713]],["name/2-6",[]],["text/2-6",[]],["component/2-6",[]],["title/2",[124,27.039,125,32.644]],["name/2",[124,0.553,125,0.667]],["text/2",[1,1.334,13,1.013,14,2.365,16,2.082,18,1.966,21,2.332,28,1.573,31,1.007,34,1.026,38,2.689,39,1.032,40,1.135,41,1.608,43,1.252,49,2.45,56,1.144,57,1.23,61,0.989,64,1.582,66,0.887,68,0.905,69,1.922,80,1.263,82,1.013,83,1.354,85,1.073,88,2.064,94,1.287,103,2.502,107,1.638,108,1.18,110,1.369,117,2.37,120,1.052,122,2.73,123,3.241,124,2.76,125,1.287,126,3.38,127,1.997,128,2.78,129,1.434,130,1.702,131,1.873,132,1.997,133,2.943,134,1.558,135,1.997,136,5.035,137,3.38,138,1.854,139,1.93,140,1.144,141,1.471,142,1.61,143,1.669,144,2.825,145,1.997,146,1.873,147,2.292,148,1.007,149,1.739,150,1.471,151,1.739,152,1.997,153,1.997,154,1.739,155,1.823,156,1.997,157,1.997,158,3.17,159,1.512,160,3.267,161,3.196,162,3.583,163,2.398,164,1.434,165,3.38,166,1.135,167,3.668,168,1.997,169,1.287,170,4.395,171,1.512,172,1.739,173,1.93,174,1.997,175,1.873,176,1.997,177,1.93,178,1.997,179,1.873,180,1.997,181,1.417,182,2.724,183,2.56,184,1.997,185,1.817,186,1.103,187,1.313,188,1.369,189,1.704,190,1.997,191,2.138,192,2.773,193,3.605,194,1.739,195,1.073,196,1.3,197,1.884,198,1.739,199,1.702,200,1.369,201,1.93,202,1.369,203,2.73,204,1.34,205,1.997,206,1.452,207,1.452,208,1.127,209,1.23,210,1.873,211,1.93,212,2.49,213,1.997,214,1.209,215,1.583,216,1.997,217,1.073,218,0.989,219,1.997,220,1.583,221,1.583,222,1.275,223,1.313,224,1.997,225,1.997,226,1.111,227,1.951,228,1.997,229,1.739,230,2.773,231,1.997,232,1.997,233,1.61,234,1.739,235,1.739,236,1.739,237,1.739,238,1.739,239,1.491,240,1.3,241,1.638,242,1.153,243,1.144,244,2.178,245,2.077,246,1.823,247,2.077,248,2.178,249,2.679,250,1.823,251,1.34,252,1.997,253,1.997,254,1.997,255,1.997,256,1.997,257,1.369,258,1.558,259,1.417,260,1.997,261,1.088,262,1.638,263,1.558,264,1.135,265,1.997]],["component/2",[1,0.442]],["title/3-1",[38,21.945,185,22.673,266,28.602]],["name/3-1",[]],["text/3-1",[]],["component/3-1",[]],["title/3-2",[267,31.624,268,30.567,269,31.624,270,17.469,271,28.87]],["name/3-2",[]],["text/3-2",[]],["component/3-2",[]],["title/3-3",[34,21.67,49,15.455,120,22.229]],["name/3-3",[]],["text/3-3",[]],["component/3-3",[]],["title/3-4",[85,22.673,120,22.229,203,26.211]],["name/3-4",[]],["text/3-4",[]],["component/3-4",[]],["title/3-5",[120,26.687,272,43.174]],["name/3-5",[]],["text/3-5",[]],["component/3-5",[]],["title/3-6",[120,26.687,273,35.931]],["name/3-6",[]],["text/3-6",[]],["component/3-6",[]],["title/3-7",[274,37.822,275,39.515]],["name/3-7",[]],["text/3-7",[]],["component/3-7",[]],["title/3-8",[276,42.951]],["name/3-8",[]],["text/3-8",[]],["component/3-8",[]],["title/3",[64,23.706,207,36.832]],["name/3",[120,0.545,273,0.734]],["text/3",[1,0.811,7,1.834,12,0.43,13,0.539,14,0.434,15,0.618,20,0.922,21,1.938,24,0.965,27,0.591,28,0.902,30,0.872,31,1.347,32,1.094,33,0.705,34,0.995,36,1.427,37,0.925,38,1.714,40,1.102,41,0.506,43,0.666,44,0.5,45,0.745,47,1.738,49,1.403,52,1.257,55,0.872,57,0.654,62,0.745,63,2.21,64,2.203,65,1.898,66,2.639,67,0.829,68,2.694,69,1.102,75,1.465,85,1.771,89,1.136,93,0.685,94,0.685,103,2.08,108,0.628,110,0.728,120,3.656,134,0.829,138,1.063,140,2.462,144,0.888,161,0.773,163,2.337,166,1.519,172,0.925,181,1.895,185,4.088,188,1.328,189,0.977,197,1.145,200,0.728,202,0.728,203,4.407,207,0.773,208,1.094,209,0.654,214,0.643,217,0.571,227,1.542,240,0.691,242,0.613,243,0.609,246,0.97,251,0.713,261,0.579,266,2.914,273,2.718,277,3.143,278,1.226,279,1.652,280,3.629,281,3.088,282,0.793,283,1.286,284,0.872,285,0.654,286,1.604,287,1.278,288,1.008,289,0.66,290,1.755,291,2.861,292,2.277,293,0.888,294,1.755,295,1.154,296,2.052,297,0.633,298,1.769,299,0.925,300,1.358,301,0.643,302,0.925,303,1.619,304,2.191,305,1.3,306,1.062,307,0.925,308,1.062,309,0.649,310,0.925,311,1.553,312,3.592,313,0.906,314,0.763,315,1.314,316,0.996,317,0.888,318,1.062,319,1.536,320,1.447,321,0.745,322,1.398,323,2.325,324,1.062,325,0.925,326,1.409,327,2.277,328,1.062,329,1.519,330,1.062,331,1.062,332,1.062,333,1.062,334,1.062,335,1.062,336,1.062,337,1.062,338,1.062,339,1.062,340,1.062,341,1.062,342,1.062,343,1.062,344,1.062,345,1.062,346,1.062,347,1.062,348,1.062,349,1.062,350,0.906,351,0.773,352,1.687,353,0.925,354,1.183,355,1.062,356,0.523,357,1.589,358,1.512,359,1.489,360,0.816,361,1.938,362,2.868,363,0.946,364,1.173,365,1.343,366,1.358,367,0.906,368,1.273,369,0.805,370,1.062,371,0.906,372,1.102,373,1.173,374,0.816,375,2.187,376,1.261,377,1.314,378,0.906,379,2.868,380,1.062,381,4.086,382,1.589,383,1.062,384,1.062,385,2.052,386,0.829,387,1.938,388,1.273,389,1.062,390,0.783,391,0.745,392,0.691,393,3.831,394,1.062,395,1.062,396,1.566,397,1.062,398,0.842,399,1.062,400,0.773,401,1.938,402,1.783,403,1.938,404,1.062,405,2.671,406,1.589,407,0.925,408,0.763,409,0.773,410,1.619,411,0.736,412,1.062,413,1.355,414,0.996,415,1.489,416,1.938,417,0.649,418,0.925,419,1.409,420,1.154,421,1.062,422,0.654,423,0.705,424,0.842,425,0.925,426,1.062,427,0.97,428,0.925,429,0.604,430,1.062,431,0.816,432,1.062,433,0.946,434,1.062,435,1.062,436,0.906,437,1.062,438,1.062,439,0.638,440,0.556,441,0.996,442,1.062,443,1.062,444,1.062,445,0.805,446,0.925,447,0.728,448,0.829,449,1.062,450,1.062,451,1.027,452,0.805,453,1.062,454,0.925,455,1.062,456,1.062,457,1.619,458,0.691,459,1.062,460,0.816,461,0.925,462,1.062,463,1.062,464,1.062,465,0.925,466,1.062,467,1.062,468,1.062,469,0.856,470,0.97,471,1.062,472,1.062,473,0.996,474,0.773,475,0.856]],["component/3",[1,0.442]],["title/4-1",[476,33.381]],["name/4-1",[]],["text/4-1",[]],["component/4-1",[]],["title/4-2",[477,40.448]],["name/4-2",[]],["text/4-2",[]],["component/4-2",[]],["title/4-3",[124,33.822]],["name/4-3",[]],["text/4-3",[]],["component/4-3",[]],["title/4",[478,32.341]],["name/4",[478,0.942]],["text/4",[7,0.791,12,2.613,14,2.468,15,1.078,20,0.882,21,0.836,24,0.924,28,2.292,31,0.935,32,2.779,38,0.964,41,1.51,44,1.493,47,1.206,49,1.804,52,1.493,53,3.18,60,2.496,61,3.195,68,1.438,69,1.804,73,1.469,77,2.655,78,0.977,82,0.941,85,0.996,94,1.195,103,1.535,124,2.629,125,1.195,133,1.614,136,2.762,138,1.017,141,1.366,142,1.494,148,1.6,161,2.307,162,2.882,166,1.054,167,1.315,191,2.007,198,1.614,217,3.243,218,0.918,222,2.026,223,1.218,239,1.384,242,1.07,243,1.062,278,1.173,280,1.132,284,1.521,285,2.561,286,2.497,287,0.887,294,1.218,307,1.614,311,1.078,322,0.97,326,2.307,329,1.054,356,2.048,359,1.424,364,1.122,366,1.3,369,3.149,372,2.365,376,1.206,385,1.424,386,1.446,388,1.218,396,1.087,408,1.331,413,0.941,419,1.348,420,1.104,422,1.142,423,1.231,431,2.438,439,1.113,457,1.549,458,2.065,477,4.535,478,2.514,479,1.854,480,1.854,481,1.614,482,1.384,483,1.854,484,1.854,485,1.739,486,1.494,487,1.521,488,2.651,489,3.173,490,1.854,491,1.271,492,3.869,493,1.122,494,2.762,495,1.854,496,1.854,497,1.122,498,1.854,499,1.854,500,3.797,501,1.366,502,1.692,503,2.896,504,1.854,505,1.331,506,1.614,507,3.797,508,1.854,509,1.348,510,4.039,511,1.271,512,3.621,513,1.989,514,1.095,515,1.173,516,2.199,517,1.331,518,1.549,519,1.854,520,1.58,521,1.692,522,1.792,523,1.854,524,1.285,525,1.3,526,1.854,527,2.762,528,2.515,529,1.271,530,1.614,531,1.854,532,1.854,533,3.067,534,4.159,535,1.792,536,1.854,537,1.854,538,3.149,539,1.854,540,1.854,541,1.854,542,1.854,543,1.854,544,1.854,545,1.854,546,1.095,547,1.854,548,1.58,549,1.348,550,1.854,551,1.424,552,1.854,553,1.469,554,0.908,555,1.692,556,1.331,557,1.231,558,1.195,559,1.854,560,1.854,561,1.257,562,1.521,563,1.854,564,1.854,565,1.854]],["component/4",[1,0.442]],["title/5-1",[38,26.346,39,26.18]],["name/5-1",[]],["text/5-1",[]],["component/5-1",[]],["title/5-2",[38,26.346,61,25.087]],["name/5-2",[]],["text/5-2",[]],["component/5-2",[]],["title/5-3",[38,21.945,138,23.142,185,22.673]],["name/5-3",[]],["text/5-3",[]],["component/5-3",[]],["title/5-4",[41,15.048,120,16.662,207,22.997,273,22.434,402,17.111]],["name/5-4",[]],["text/5-4",[]],["component/5-4",[]],["title/5-5",[66,22.491,566,55.231]],["name/5-5",[]],["text/5-5",[]],["component/5-5",[]],["title/5-6",[12,25.666]],["name/5-6",[]],["text/5-6",[]],["component/5-6",[]],["title/5",[288,32.954]],["name/5",[288,0.959]],["text/5",[1,1.201,12,1.908,13,0.88,14,0.709,15,1.009,17,1.151,18,1.009,20,1.426,21,2.397,24,1.493,31,1.511,32,0.979,34,2.031,36,2.207,38,3.026,39,0.896,40,0.986,41,1.882,43,1.878,44,1.861,47,1.129,49,2.131,52,0.816,53,2.801,55,1.423,56,1.716,57,1.068,60,1.351,61,1.959,62,1.216,64,0.812,66,2.769,68,2.41,69,0.986,75,0.951,77,1.913,78,1.578,81,1.151,82,0.88,85,0.932,87,1.449,88,1.059,103,3.191,109,1.545,110,1.189,120,0.914,121,1.423,124,1.599,138,1.643,140,0.993,143,1.449,147,1.176,150,1.278,162,1.202,163,1.23,166,0.986,167,1.23,182,1.398,185,3.543,186,1.655,187,1.969,189,1.994,191,1.097,192,1.423,195,2.857,196,1.129,199,1.478,201,2.896,204,2.01,207,2.179,208,2.232,218,0.859,222,1.107,230,1.423,233,1.398,250,1.583,266,1.176,270,0.958,275,1.353,277,2.458,280,3.552,281,1.398,284,1.423,285,1.068,288,1.558,300,1.216,304,1.423,305,2.01,309,1.059,319,3.732,329,1.703,358,1.353,360,2.302,364,1.05,365,1.202,366,1.216,369,1.313,372,0.986,373,1.05,378,1.478,396,1.017,400,2.179,402,0.938,406,1.423,417,1.829,420,1.784,422,1.068,423,1.151,429,0.986,440,0.908,452,2.269,460,1.333,477,2.525,478,2.404,482,1.295,486,1.398,487,1.423,492,0.945,493,1.05,500,1.583,502,1.583,507,1.583,510,1.423,521,1.583,529,1.189,554,1.467,561,1.176,567,1.278,568,1.891,569,1.295,570,1.891,571,2.741,572,1.313,573,1.891,574,1.423,575,1.333,576,1.449,577,1.891,578,1.891,579,1.189,580,1.278,581,1.176,582,3.267,583,1.077,584,1.891,585,1.783,586,2.81,587,2.337,588,1.804,589,1.423,590,3.267,591,1.583,592,1.891,593,1.375,594,3.267,595,1.804,596,1.756,597,1.891,598,1.51,599,1.676,600,1.583,601,1.891,602,1.627,603,1.891,604,1.245,605,1.583,606,0.965,607,1.891,608,1.891,609,1.891,610,1.313,611,1.545,612,1.891,613,1.804,614,1.891,615,1.891,616,1.23,617,1.804,618,1.583,619,1.478,620,1.891,621,1.891,622,1.545,623,1.375,624,1.627,625,1.804,626,1.068,627,1.398,628,1.423,629,1.891,630,1.009,631,1.313,632,1.676,633,1.478,634,1.545,635,1.891]],["component/5",[1,0.442]],["title/6-1",[7,13.495,440,16.555,623,25.068,636,19.648,637,19.476]],["name/6-1",[]],["text/6-1",[]],["component/6-1",[]],["title/6-2",[1,15.38,638,33.626]],["name/6-2",[]],["text/6-2",[]],["component/6-2",[]],["title/6-3",[478,25.855,639,32.337]],["name/6-3",[]],["text/6-3",[]],["component/6-3",[]],["title/6-4",[195,19.428,196,23.525,572,27.376,639,23.08]],["name/6-4",[]],["text/6-4",[]],["component/6-4",[]],["title/6-5",[1,12.811,440,22.086,640,42.19]],["name/6-5",[]],["text/6-5",[]],["component/6-5",[]],["title/6-6",[1,15.38,641,44.096]],["name/6-6",[]],["text/6-6",[]],["component/6-6",[]],["title/6",[561,28.602,616,29.929,642,36.73]],["name/6",[643,1.844]],["text/6",[1,0.642,7,4.115,10,0.733,13,1.073,21,0.953,27,1.176,28,1.347,32,0.66,34,1.086,40,0.665,44,0.55,49,0.428,52,0.55,63,2.379,66,0.519,68,0.53,69,0.665,74,2.053,75,1.587,83,0.793,85,0.629,93,0.754,103,0.566,110,0.802,123,0.733,128,0.74,149,1.018,166,2.017,167,1.5,169,0.754,194,1.018,195,3.211,196,2.67,199,1.802,204,0.785,240,0.761,243,0.67,251,0.785,257,0.802,261,0.637,270,0.646,274,0.873,276,0.793,288,0.608,309,0.714,315,0.793,321,0.82,329,0.665,354,0.714,356,0.576,362,1.841,417,0.714,420,1.259,425,1.018,429,0.665,440,3.263,454,1.018,458,1.376,477,3.631,478,2.094,497,1.28,509,0.851,525,0.82,538,1.601,551,0.899,554,0.573,561,2.404,572,1.601,574,0.959,581,0.793,596,1.239,618,1.068,623,0.927,631,1.601,636,1.798,637,0.72,638,1.404,639,3.98,641,2.519,642,7.875,644,1.131,645,0.862,646,1.097,647,1.17,648,1.097,649,0.978,650,1.17,651,1.097,652,0.886,653,1.097,654,1.17,655,1.579,656,0.862,657,0.899,658,1.841,659,1.558,660,1.17,661,3.547,662,1.17,663,3.547,664,2.893,665,2.114,666,1.17,667,1.17,668,1.841,669,2.519,670,3.327,671,1.17,672,1.17,673,1.17,674,1.17,675,1.17,676,1.275,677,1.17,678,2.114,679,1.17,680,2.114,681,1.17,682,1.17,683,1.17,684,1.131,685,1.17,686,1.17,687,1.17,688,2.893,689,1.17,690,1.17,691,0.84,692,1.17,693,1.17,694,1.17,695,1.17,696,1.17,697,1.17,698,1.17,699,1.17,700,1.17,701,1.983,702,0.927,703,1.354,704,1.17,705,1.17,706,2.044,707,1.17,708,2.044,709,1.65,710,1.17,711,1.17,712,1.17,713,1.17,714,1.17,715,5.687,716,1.17,717,1.17,718,1.17,719,1.17,720,1.17,721,1.17,722,1.17,723,1.17,724,1.17,725,1.17,726,1.17,727,1.17,728,1.17,729,1.17,730,1.17,731,1.17,732,1.17,733,1.17,734,1.17,735,1.17,736,1.17,737,1.17,738,1.17,739,1.17,740,1.17,741,1.17,742,1.17,743,1.17,744,2.005,745,0.74,746,1.17,747,5.427,748,1.17,749,1.17,750,2.893,751,1.17,752,2.114,753,1.17,754,2.114,755,1.17,756,1.17,757,1.17,758,0.747,759,0.708,760,1.883,761,1.17,762,1.018,763,1.018,764,1.018,765,0.851,766,1.131,767,2.893,768,2.114,769,1.17,770,1.17,771,0.927,772,0.978,773,0.927,774,0.978,775,1.17,776,2.893,777,1.17,778,1.17,779,1.17,780,1.17,781,1.17,782,1.17,783,1.042,784,0.978,785,1.17,786,1.17,787,4.581,788,0.886,789,0.811,790,1.17,791,1.17,792,1.17,793,1.17,794,1.17,795,1.17,796,1.17,797,1.17,798,1.17,799,1.17,800,1.17,801,1.17,802,1.17,803,1.17,804,1.17,805,1.17,806,0.913,807,1.17,808,2.379,809,0.927,810,0.927,811,1.018,812,1.176,813,1.27,814,1.018,815,1.018]],["component/6",[1,0.442]],["title/7-1",[195,27.22,571,35.103]],["name/7-1",[]],["text/7-1",[]],["component/7-1",[]],["title/7-2",[20,24.101,195,27.22]],["name/7-2",[]],["text/7-2",[]],["component/7-2",[]],["title/7-3",[195,27.22,571,35.103]],["name/7-3",[]],["text/7-3",[]],["component/7-3",[]],["title/7-4",[478,32.341]],["name/7-4",[]],["text/7-4",[]],["component/7-4",[]],["title/7-5",[276,42.951]],["name/7-5",[]],["text/7-5",[]],["component/7-5",[]],["title/7",[195,27.22,580,37.315]],["name/7",[195,0.991]],["text/7",[7,0.717,11,0.624,12,0.681,13,1.479,14,0.687,15,0.978,16,2.621,17,1.936,18,0.978,19,0.57,20,2.824,21,0.41,22,0.61,24,1.167,27,0.935,28,0.782,31,1.181,32,0.949,33,0.604,34,1.203,35,1.311,39,0.869,40,0.517,41,1.114,43,2.668,44,1.102,45,1.178,46,0.746,47,1.094,48,2.983,49,1.688,53,1.536,57,1.035,59,0.721,60,1.541,63,1.127,64,0.426,65,0.832,66,1.715,76,4.007,77,1.861,80,0.576,82,0.462,88,0.556,89,1.373,91,1.463,94,0.586,95,0.721,98,0.483,103,0.44,108,0.538,122,1.811,123,0.57,128,1.063,129,1.207,134,1.311,140,2.212,141,0.67,148,1.181,150,0.67,151,0.792,159,0.689,162,2.021,163,0.645,167,0.645,171,0.689,183,0.689,185,1.259,189,0.459,191,1.481,195,3.298,203,0.565,204,1.571,206,0.662,214,1.418,218,0.451,233,0.733,240,1.524,242,0.97,258,0.71,264,0.517,272,2.485,276,0.617,280,1.026,282,1.255,283,1.116,285,1.796,286,1.009,287,0.435,288,0.473,294,0.598,295,0.542,296,1.291,301,1.018,302,0.792,305,0.61,311,0.529,313,0.776,315,1.139,320,0.679,322,0.476,323,0.792,326,1.222,329,0.517,350,0.776,353,1.463,356,0.828,358,0.71,359,0.699,366,0.638,367,0.776,373,2.069,374,0.699,375,0.604,376,0.592,377,1.588,379,0.792,385,1.291,386,1.311,392,0.592,396,0.985,400,1.703,402,1.849,407,0.792,409,0.662,411,1.165,417,1.026,419,0.662,420,1.001,422,0.56,423,0.604,424,0.721,429,0.517,452,0.689,460,0.699,465,0.792,474,1.703,476,0.886,477,1.861,478,2.173,482,2.552,493,2.338,497,0.551,509,0.662,510,5.997,514,0.538,520,0.776,524,1.165,527,0.792,528,0.721,529,1.152,530,2.976,538,0.689,548,0.776,549,1.222,551,1.291,554,0.823,557,0.604,569,0.679,571,4.382,575,2.626,579,0.624,581,0.617,585,0.758,591,0.831,596,0.533,611,0.81,627,0.733,630,0.529,637,1.796,638,0.604,747,0.792,758,0.581,772,0.76,816,1.681,817,0.879,818,0.91,819,0.792,820,0.91,821,1.379,822,0.645,823,0.792,824,0.776,825,0.91,826,0.831,827,0.792,828,0.879,829,0.91,830,0.91,831,1.238,832,0.853,833,4.455,834,0.91,835,0.879,836,0.853,837,1.433,838,1.625,839,2.437,840,0.91,841,1.625,842,1.682,843,0.91,844,2.021,845,0.76,846,0.91,847,0.853,848,0.91,849,0.91,850,4.991,851,0.879,852,0.91,853,0.91,854,1.291,855,0.721,856,0.879,857,1.463,858,3.439,859,0.81,860,1.996,861,0.91,862,0.776,863,0.91,864,1.888,865,0.733,866,0.91,867,2.818,868,0.699,869,1.094,870,0.792,871,0.91,872,0.91,873,2.916,874,0.91,875,2.275,876,0.76,877,0.67,878,0.699,879,0.91,880,2.24,881,0.91,882,0.91,883,3.227,884,2.197,885,0.81,886,2.976,887,0.91,888,0.91,889,0.879,890,0.598,891,0.91,892,1.576,893,0.879,894,1.576,895,0.699,896,0.645,897,0.91,898,0.776,899,1.634,900,1.576,901,0.91,902,0.831,903,3.418,904,1.625,905,0.91,906,0.853,907,0.91,908,0.565,909,0.67,910,0.91,911,0.879,912,0.653,913,0.91,914,0.91,915,0.721,916,0.91,917,0.91,918,0.746,919,0.91,920,1.291,921,0.879,922,0.91,923,0.91,924,0.91,925,1.497,926,0.91,927,0.91,928,0.91,929,2.916,930,1.311,931,0.76,932,0.91,933,0.91,934,1.681,935,0.879,936,0.853,937,0.81,938,0.91,939,0.776,940,0.91,941,0.91,942,0.776,943,0.831,944,0.91,945,0.91,946,0.91,947,0.853,948,0.746,949,0.831,950,0.91,951,0.91,952,0.576,953,0.721,954,0.91,955,0.81,956,0.91,957,0.879,958,0.91,959,0.91,960,0.91,961,0.853,962,0.91,963,0.746]],["component/7",[1,0.442]],["title/8-1",[476,33.381]],["name/8-1",[]],["text/8-1",[]],["component/8-1",[]],["title/8-2",[217,22.673,218,20.897,513,26.446]],["name/8-2",[]],["text/8-2",[]],["component/8-2",[]],["title/8-3",[439,30.414,964,40.149]],["name/8-3",[]],["text/8-3",[]],["component/8-3",[]],["title/8-4",[13,25.697,203,31.468]],["name/8-4",[]],["text/8-4",[]],["component/8-4",[]],["title/8-5",[148,25.541,965,37.315]],["name/8-5",[]],["text/8-5",[]],["component/8-5",[]],["title/8-6",[290,33.288,965,37.315]],["name/8-6",[]],["text/8-6",[]],["component/8-6",[]],["title/8-7",[203,31.468,966,37.315]],["name/8-7",[]],["text/8-7",[]],["component/8-7",[]],["title/8-8",[967,44.096,968,40.149]],["name/8-8",[]],["text/8-8",[]],["component/8-8",[]],["title/8",[82,25.697,197,21.719]],["name/8",[197,0.444,969,0.901]],["text/8",[7,2.206,12,0.809,13,2.23,14,2.735,20,2.091,21,1.524,28,1.573,41,1.608,49,2.3,52,0.94,53,1.781,57,1.23,65,0.989,66,0.887,78,1.052,140,2.517,148,1.704,166,1.135,191,2.138,197,2.48,200,1.369,203,3.212,217,3.375,218,1.674,227,3.624,257,1.369,261,1.088,262,1.638,278,2.138,286,3.473,287,0.956,290,1.313,295,1.189,322,2.301,356,0.983,368,1.313,373,1.209,396,1.981,402,1.081,408,2.427,413,1.013,420,1.189,439,4.551,491,5.021,501,1.471,511,3.012,513,3.241,546,1.18,554,0.978,583,1.241,587,2.637,638,1.326,812,1.111,837,1.702,890,2.888,908,1.241,952,4.449,964,3.483,965,1.471,966,2.49,968,3.483,970,1.997,971,1.739,972,1.997,973,1.997,974,2.221,975,3.801,976,5.467,977,1.558,978,1.369,979,1.313,980,1.189,981,1.153,982,1.997,983,4.998,984,1.997,985,1.93,986,1.471,987,1.434,988,4.395,989,3.38,990,4.395,991,1.535,992,1.739,993,3.38,994,1.997,995,2.943,996,2.158,997,1.997,998,1.93,999,1.583,1000,1.739,1001,1.583,1002,3.38,1003,1.739,1004,1.558,1005,1.997,1006,1.997,1007,1.997,1008,1.997,1009,1.997,1010,1.997,1011,1.997,1012,1.997,1013,1.997,1014,1.997,1015,1.739,1016,1.997,1017,1.739,1018,1.583,1019,1.997,1020,1.583,1021,1.997,1022,1.997,1023,1.997,1024,1.997,1025,1.997,1026,1.997,1027,1.997,1028,1.997,1029,1.997,1030,1.997,1031,1.997,1032,1.997,1033,1.558,1034,1.702,1035,3.38,1036,1.997,1037,1.997,1038,3.826,1039,1.997,1040,1.354,1041,1.583,1042,1.739,1043,1.638,1044,1.997,1045,1.739,1046,1.997,1047,1.739,1048,3.38,1049,1.354]],["component/8",[1,0.442]],["title/9-1",[476,33.381]],["name/9-1",[]],["text/9-1",[]],["component/9-1",[]],["title/9-2",[287,24.236,981,29.234]],["name/9-2",[]],["text/9-2",[]],["component/9-2",[]],["title/9-3",[322,26.515,981,29.234]],["name/9-3",[]],["text/9-3",[]],["component/9-3",[]],["title/9-4",[413,25.697,981,29.234]],["name/9-4",[]],["text/9-4",[]],["component/9-4",[]],["title/9-5",[981,29.234,996,32.337]],["name/9-5",[]],["text/9-5",[]],["component/9-5",[]],["title/9-6",[812,23.47,981,24.351,1049,28.602]],["name/9-6",[]],["text/9-6",[]],["component/9-6",[]],["title/9",[215,40.149,1050,31.468]],["name/9",[812,0.576,1050,0.643]],["text/9",[1,1.223,7,3.14,13,2.992,14,2.657,15,1.434,16,1.519,19,1.546,20,3.887,21,2.303,28,1.875,31,2.032,44,1.896,49,2.555,66,1.095,68,1.826,85,3.169,208,1.392,240,1.605,270,1.362,285,1.519,287,1.928,289,1.532,295,3.042,311,1.434,322,1.291,354,1.506,364,1.493,368,1.621,375,2.675,376,3.324,390,1.817,392,1.605,396,3.456,408,1.771,413,1.251,415,1.895,419,3.714,431,1.895,513,2.525,546,1.457,554,1.207,567,1.817,575,1.895,606,1.372,669,5.658,758,1.575,759,3.57,811,2.147,812,2.241,823,3.507,878,1.895,908,1.532,931,2.061,939,2.102,964,4.048,974,1.621,975,3.875,979,3.875,981,3.403,1050,3.663,1051,3.894,1052,2.466,1053,2.466,1054,2.466,1055,2.102,1056,2.384,1057,2.466,1058,4.029,1059,2.102,1060,2.061,1061,3.507,1062,2.313,1063,3.193,1064,3.367,1065,2.466,1066,1.924,1067,3.434,1068,2.466,1069,2.384,1070,5.107,1071,4.029,1072,5.107,1073,2.313,1074,4.029,1075,2.466,1076,2.466,1077,2.466,1078,2.466,1079,4.029,1080,2.466,1081,2.466,1082,3.507,1083,4.029,1084,2.384,1085,2.466,1086,2.147,1087,2.466,1088,2.466,1089,2.466,1090,2.466,1091,2.384,1092,1.672,1093,2.466,1094,1.575,1095,2.313,1096,2.313]],["component/9",[1,0.442]],["title/10-1",[476,33.381]],["name/10-1",[]],["text/10-1",[]],["component/10-1",[]],["title/10",[14,20.71,122,31.468]],["name/10",[2,1.513]],["text/10",[4,2.774,7,3.386,12,2.515,14,2.085,20,2.954,27,1.846,31,1.674,44,1.562,49,3.124,53,2.686,60,2.299,61,2.525,78,2.686,80,2.099,122,3.857,138,1.821,148,1.674,171,2.513,197,1.423,208,1.873,214,2.009,215,2.631,226,1.846,261,1.808,286,1.993,287,1.588,290,2.181,295,3.698,300,3.574,321,2.327,369,2.513,413,1.684,422,2.044,428,2.889,458,2.16,476,1.749,492,2.778,501,4.574,513,4.367,515,3.225,517,2.383,518,2.774,546,3.012,554,2.496,585,1.497,812,2.836,813,3.728,814,2.889,815,2.889,876,2.774,908,2.062,971,2.889,974,4.578,975,3.351,976,2.889,977,3.978,979,2.181,1050,3.168,1055,2.829,1063,2.631,1067,2.829,1086,5.405,1094,2.119,1097,3.319,1098,2.383,1099,4.921,1100,3.319,1101,3.319,1102,3.319,1103,3.319,1104,3.319,1105,2.889,1106,2.445,1107,2.3,1108,3.319]],["component/10",[1,0.442]],["title/11-1",[186,23.305,604,30.296,930,32.914]],["name/11-1",[]],["text/11-1",[]],["component/11-1",[]],["title/11-2",[186,23.305,604,30.296,1109,35.962]],["name/11-2",[]],["text/11-2",[]],["component/11-2",[]],["title/11-3",[186,27.978,1110,40.149]],["name/11-3",[]],["text/11-3",[]],["component/11-3",[]],["title/11-4",[187,41.638]],["name/11-4",[]],["text/11-4",[]],["component/11-4",[]],["title/11-5",[186,27.978,1111,40.149]],["name/11-5",[]],["text/11-5",[]],["component/11-5",[]],["title/11-6",[186,23.305,1111,33.442,1112,42.19]],["name/11-6",[]],["text/11-6",[]],["component/11-6",[]],["title/11-7",[1113,50.219]],["name/11-7",[]],["text/11-7",[]],["component/11-7",[]],["title/11-8",[1114,55.157]],["name/11-8",[]],["text/11-8",[]],["component/11-8",[]],["title/11-9",[197,27.167]],["name/11-9",[]],["text/11-9",[]],["component/11-9",[]],["title/11-10",[197,21.719,325,44.096]],["name/11-10",[]],["text/11-10",[]],["component/11-10",[]],["title/11-11",[197,21.719,1115,50.65]],["name/11-11",[]],["text/11-11",[]],["component/11-11",[]],["title/11-12",[1116,37.822,1117,44.096]],["name/11-12",[]],["text/11-12",[]],["component/11-12",[]],["title/11-13",[297,30.166,1110,40.149]],["name/11-13",[]],["text/11-13",[]],["component/11-13",[]],["title/11-14",[197,21.719,1113,40.149]],["name/11-14",[]],["text/11-14",[]],["component/11-14",[]],["title/11-15",[197,21.719,966,37.315]],["name/11-15",[]],["text/11-15",[]],["component/11-15",[]],["title/11-16",[197,21.719,1118,44.096]],["name/11-16",[]],["text/11-16",[]],["component/11-16",[]],["title/11",[138,27.783,148,25.541]],["name/11",[138,0.568,148,0.522]],["text/11",[7,0.907,12,0.329,14,2.373,19,0.949,20,0.72,21,0.683,27,0.452,28,2.14,31,0.41,39,0.783,40,2.437,41,0.387,43,0.51,47,0.529,49,0.298,53,1.402,56,0.867,65,0.75,68,0.686,76,0.57,78,0.428,82,0.412,85,0.437,93,0.524,124,1.675,129,1.526,138,1.721,140,2.455,148,1.071,166,0.462,186,1.967,187,0.995,188,0.557,189,0.41,197,1.838,200,0.557,209,0.932,214,0.492,217,2.623,218,2.874,223,0.534,227,0.874,264,1.208,276,1.026,279,1.291,286,3.23,287,1.704,290,1.396,291,1.987,292,0.693,297,1.265,301,0.492,309,0.496,322,2.064,326,1.101,356,0.4,365,0.563,368,0.534,372,0.462,376,0.529,391,0.57,396,1.56,398,0.644,402,0.44,409,0.591,410,0.679,411,1.049,413,1.592,429,0.462,447,0.557,469,1.22,491,1.038,497,0.492,505,0.584,506,0.708,511,1.038,514,0.48,529,1.038,546,0.48,554,0.398,557,0.54,558,0.524,598,0.708,606,0.452,630,0.473,638,0.54,645,0.599,659,2.311,691,1.526,702,1.2,709,0.634,806,0.634,827,0.708,842,2.831,845,0.679,869,1.732,890,0.995,908,0.505,930,1.181,942,1.291,952,2.494,965,1.115,967,0.708,968,0.644,979,0.534,986,0.599,987,1.087,992,0.708,996,2.517,1001,0.644,1003,2.317,1004,1.658,1015,1.318,1018,0.644,1020,0.644,1033,0.634,1038,3.432,1040,2.672,1042,0.708,1045,1.318,1047,1.318,1049,2.127,1061,0.708,1092,1.026,1094,0.519,1098,1.526,1107,1.049,1109,1.811,1110,5.018,1111,0.644,1113,0.644,1114,0.708,1116,1.131,1117,1.318,1118,0.708,1119,1.993,1120,0.786,1121,1.181,1122,1.514,1123,0.813,1124,1.514,1125,0.813,1126,1.514,1127,0.813,1128,1.514,1129,0.813,1130,1.514,1131,0.813,1132,1.514,1133,0.813,1134,1.514,1135,0.813,1136,1.514,1137,0.813,1138,0.813,1139,0.813,1140,2.125,1141,0.813,1142,1.514,1143,0.813,1144,0.813,1145,0.813,1146,0.813,1147,0.813,1148,0.813,1149,0.813,1150,0.813,1151,0.813,1152,0.813,1153,0.813,1154,2.125,1155,1.514,1156,2.662,1157,0.813,1158,1.514,1159,1.514,1160,0.813,1161,0.813,1162,2.573,1163,1.514,1164,2.125,1165,3.251,1166,2.731,1167,0.813,1168,1.514,1169,1.514,1170,1.265,1171,0.786,1172,0.813,1173,0.813,1174,0.813,1175,0.813,1176,0.786,1177,1.514,1178,1.514,1179,0.813,1180,1.514,1181,0.813,1182,1.514,1183,0.813,1184,0.813,1185,0.813,1186,0.813,1187,0.813,1188,0.813,1189,0.813,1190,0.813,1191,0.813,1192,0.813,1193,0.813,1194,0.813,1195,0.813,1196,0.813,1197,1.514,1198,0.813,1199,0.813,1200,0.813,1201,0.813,1202,0.813,1203,0.813,1204,1.242,1205,0.813,1206,0.813,1207,0.813,1208,0.813,1209,0.655,1210,0.813,1211,0.813,1212,0.813,1213,0.813,1214,0.813,1215,0.813,1216,0.693,1217,0.813,1218,0.813,1219,0.813,1220,0.813,1221,0.813,1222,0.813,1223,0.813,1224,0.813,1225,0.813,1226,0.813,1227,1.85,1228,0.813,1229,1.85,1230,0.813,1231,0.813,1232,0.813,1233,0.813,1234,0.693,1235,0.813,1236,0.667,1237,0.813,1238,0.693,1239,0.813,1240,0.813,1241,0.763,1242,0.813,1243,0.813,1244,0.813,1245,0.813,1246,0.813,1247,0.813,1248,0.679,1249,0.813,1250,0.708,1251,0.813,1252,0.708,1253,0.813,1254,0.813,1255,0.813,1256,0.813,1257,0.786,1258,0.813,1259,0.786,1260,0.813,1261,0.693,1262,0.813,1263,0.625,1264,0.813,1265,0.742,1266,0.813,1267,0.644,1268,0.813,1269,0.813,1270,0.813,1271,0.813,1272,0.813,1273,0.813,1274,0.813,1275,0.813,1276,0.813,1277,0.813,1278,0.813,1279,0.763,1280,0.813,1281,6.167,1282,0.813,1283,0.813,1284,0.813,1285,0.813,1286,0.813,1287,0.813,1288,0.708,1289,0.813,1290,0.813,1291,0.813,1292,0.813,1293,0.813,1294,0.813,1295,0.813,1296,1.514,1297,0.813,1298,1.514,1299,0.813,1300,1.514,1301,0.813,1302,1.514,1303,0.813,1304,0.708,1305,0.813,1306,0.813,1307,0.813,1308,0.708,1309,0.813,1310,0.708,1311,0.813,1312,0.708,1313,0.813,1314,0.708,1315,0.813,1316,0.813,1317,0.813,1318,0.708,1319,0.813,1320,0.708,1321,0.813,1322,0.813,1323,0.813,1324,0.763,1325,0.813,1326,0.763,1327,0.813,1328,0.813,1329,0.813,1330,0.813,1331,0.813,1332,0.813,1333,0.813,1334,0.813,1335,0.813,1336,0.813,1337,0.813,1338,0.813,1339,0.813,1340,0.813,1341,0.813,1342,0.813,1343,0.813,1344,0.813,1345,0.813,1346,0.813,1347,0.813,1348,0.813,1349,0.813,1350,0.813,1351,0.813,1352,0.813,1353,0.813,1354,0.813,1355,0.813,1356,0.813,1357,0.813,1358,0.813,1359,0.813,1360,2.125,1361,0.786,1362,0.813,1363,0.813,1364,0.667,1365,0.813,1366,0.813,1367,0.813,1368,0.813,1369,0.693,1370,1.514,1371,0.813,1372,1.514,1373,0.813,1374,0.813,1375,0.813,1376,0.813,1377,2.662,1378,0.599,1379,0.786,1380,0.813,1381,0.763,1382,0.813,1383,0.813,1384,1.42,1385,0.813,1386,0.813,1387,0.813,1388,1.514,1389,2.662,1390,0.813,1391,0.708,1392,0.813,1393,0.813,1394,0.813,1395,0.813,1396,0.813,1397,0.813,1398,0.813,1399,0.708,1400,0.708,1401,1.514,1402,0.813,1403,0.708,1404,0.813,1405,0.708,1406,0.813,1407,0.813,1408,0.813,1409,0.813,1410,0.813,1411,0.813,1412,0.813,1413,2.662,1414,0.813,1415,0.813,1416,0.813,1417,0.813,1418,0.813,1419,0.813,1420,0.813,1421,0.708,1422,0.708]],["component/11",[1,0.442]],["title/12-1",[476,33.381]],["name/12-1",[]],["text/12-1",[]],["component/12-1",[]],["title/12-2",[1423,46.675]],["name/12-2",[]],["text/12-2",[]],["component/12-2",[]],["title/12-3",[217,27.22,492,27.592]],["name/12-3",[]],["text/12-3",[]],["component/12-3",[]],["title/12-4",[53,26.687,1106,37.315]],["name/12-4",[]],["text/12-4",[]],["component/12-4",[]],["title/12-5",[513,31.749,975,33.288]],["name/12-5",[]],["text/12-5",[]],["component/12-5",[]],["title/12-6",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/12-6",[]],["text/12-6",[]],["component/12-6",[]],["title/12",[12,14.645,61,17.906,402,19.56,492,19.694]],["name/12",[492,0.564,1106,0.763]],["text/12",[1,1.174,10,1.47,12,1.998,14,0.959,20,2.347,21,1.744,24,1.169,28,2.296,33,2.567,49,2.638,53,3.014,61,2.834,65,1.915,68,1.063,74,1.664,94,1.512,103,1.135,108,1.386,124,1.252,128,1.484,164,3.542,166,1.334,169,1.512,197,1.006,206,1.706,209,2.381,217,4.317,218,2.443,220,1.859,221,1.859,222,3.652,223,3.76,226,2.151,242,1.354,257,1.608,263,1.83,286,2.962,287,1.122,289,1.457,294,2.541,295,1.397,297,1.397,311,1.364,322,2.024,329,1.334,356,1.904,364,2.341,368,3.76,372,1.334,377,1.59,396,1.375,402,2.669,409,1.706,413,1.19,439,1.408,491,4.337,492,3.923,493,1.42,494,3.366,497,1.42,513,3.092,514,1.386,515,2.446,546,2.914,633,1.999,645,2.848,655,1.752,759,1.42,765,1.706,812,1.305,813,3.435,831,1.728,880,1.802,890,1.542,896,1.664,898,1.999,912,1.684,915,1.859,969,2.042,974,4.159,975,2.541,977,1.83,979,2.541,980,1.397,981,2.232,991,1.802,996,1.498,1000,3.366,1041,1.859,1094,2.468,1105,2.042,1106,4.662,1121,1.83,1170,1.96,1261,1.999,1423,2.848,1425,1.47,1427,3.366,1428,1.776,1429,2.042,1430,1.776,1431,2.042,1432,1.859,1433,2.346,1434,2.346,1435,1.859,1436,2.267,1437,2.346,1438,2.346,1439,1.891,1440,2.092,1441,2.346,1442,2.042,1443,2.346,1444,2.346,1445,2.042,1446,2.042]],["component/12",[1,0.442]],["title/13-1",[476,33.381]],["name/13-1",[]],["text/13-1",[]],["component/13-1",[]],["title/13-2",[1423,46.675]],["name/13-2",[]],["text/13-2",[]],["component/13-2",[]],["title/13-3",[217,27.22,492,27.592]],["name/13-3",[]],["text/13-3",[]],["component/13-3",[]],["title/13-4",[60,19.025,297,25.127,1447,36.73]],["name/13-4",[]],["text/13-4",[]],["component/13-4",[]],["title/13-5",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/13-5",[]],["text/13-5",[]],["component/13-5",[]],["title/13-6",[218,20.897,505,30.296,517,30.296]],["name/13-6",[]],["text/13-6",[]],["component/13-6",[]],["title/13-7",[223,27.727,249,33.442,1448,36.73]],["name/13-7",[]],["text/13-7",[]],["component/13-7",[]],["title/13-8",[1449,55.157]],["name/13-8",[]],["text/13-8",[]],["component/13-8",[]],["title/13-9",[1450,55.157]],["name/13-9",[]],["text/13-9",[]],["component/13-9",[]],["title/13-10",[52,29.815]],["name/13-10",[]],["text/13-10",[]],["component/13-10",[]],["title/13-11",[392,32.961,1451,44.096]],["name/13-11",[]],["text/13-11",[]],["component/13-11",[]],["title/13",[12,14.645,60,16.302,402,19.56,492,19.694]],["name/13",[60,0.467,492,0.564]],["text/13",[1,0.318,7,3.32,10,0.345,12,1.32,14,0.428,20,0.91,21,0.248,24,0.522,28,0.487,33,0.695,40,0.595,49,0.384,52,0.9,53,0.552,58,0.436,60,1.818,65,0.947,68,0.867,75,1.049,78,0.79,80,0.348,81,0.365,82,0.531,84,1.039,100,0.479,101,1.664,102,0.892,103,0.266,108,0.325,122,0.341,124,1.223,128,0.348,147,0.373,148,1.33,164,1.076,169,0.966,189,0.277,192,0.451,197,0.449,204,0.702,206,0.4,208,1.079,209,0.339,214,0.333,217,1.591,218,0.519,220,0.436,221,0.436,222,0.668,223,1.734,226,0.582,249,2.582,257,1.31,261,0.299,275,0.429,278,0.348,286,1.777,287,1.096,289,0.341,294,0.688,297,0.327,305,0.369,309,0.336,311,0.32,322,1.001,352,2.577,356,0.271,364,0.333,368,0.985,376,0.358,377,0.373,396,0.614,398,1.515,402,0.297,413,0.761,415,0.422,423,0.365,439,1.375,488,0.459,491,2.232,492,1.248,493,0.333,497,0.634,501,0.405,505,1.645,511,0.718,512,0.479,514,0.619,515,1.209,517,1.076,525,0.734,546,1.353,554,1.449,567,0.405,606,0.834,610,0.416,628,0.451,630,0.32,645,1.687,655,0.41,668,1.664,691,0.752,702,0.436,709,0.429,758,0.351,759,0.634,813,1.148,844,0.381,855,1.815,869,0.976,880,2.027,896,0.39,899,0.308,912,0.395,915,0.436,952,1.872,953,0.436,974,0.985,975,0.688,981,0.317,986,0.405,987,0.395,991,0.422,996,0.957,999,0.83,1001,1.815,1018,0.436,1020,0.436,1033,0.429,1034,0.469,1040,1.296,1043,0.451,1049,1.553,1060,0.459,1092,0.373,1094,0.957,1098,1.076,1107,0.381,1116,0.41,1121,0.817,1227,0.911,1229,0.479,1288,0.911,1304,0.479,1308,1.994,1310,0.911,1312,1.994,1314,0.479,1318,0.911,1320,1.305,1378,0.405,1391,1.305,1399,0.479,1400,0.479,1403,0.479,1405,0.479,1421,0.479,1422,0.479,1423,0.771,1425,0.656,1427,0.911,1428,0.416,1429,0.911,1430,0.416,1431,0.479,1432,0.83,1445,0.911,1446,0.479,1447,0.911,1448,1.994,1449,0.911,1450,1.305,1451,1.664,1452,0.49,1453,0.479,1454,1.047,1455,1.047,1456,0.55,1457,1.449,1458,1.047,1459,1.047,1460,0.55,1461,1.047,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.047,1469,0.55,1470,1.047,1471,2.96,1472,0.531,1473,0.55,1474,0.55,1475,0.55,1476,1.188,1477,0.55,1478,0.55,1479,0.502,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.29,1485,0.55,1486,5.348,1487,1.912,1488,2.29,1489,1.499,1490,1.499,1491,1.499,1492,2.29,1493,1.912,1494,2.29,1495,1.912,1496,1.047,1497,1.047,1498,2.638,1499,1.047,1500,1.449,1501,2.29,1502,0.55,1503,1.912,1504,1.047,1505,0.459,1506,1.499,1507,2.96,1508,1.912,1509,1.047,1510,1.499,1511,0.55,1512,0.55,1513,1.912,1514,1.047,1515,1.912,1516,1.449,1517,1.047,1518,1.499,1519,1.499,1520,2.638,1521,0.55,1522,1.047,1523,1.912,1524,0.55,1525,1.499,1526,1.912,1527,1.047,1528,0.55,1529,2.29,1530,2.29,1531,2.638,1532,2.29,1533,1.499,1534,1.912,1535,1.047,1536,1.499,1537,1.912,1538,1.499,1539,1.499,1540,2.96,1541,0.55,1542,1.912,1543,1.912,1544,1.047,1545,0.932,1546,1.912,1547,1.499,1548,2.29,1549,0.55,1550,2.29,1551,0.55,1552,1.047,1553,0.55,1554,1.047,1555,3.257,1556,1.912,1557,1.499,1558,1.499,1559,1.047,1560,1.047,1561,0.55,1562,2.638,1563,1.499,1564,1.912,1565,1.912,1566,1.912,1567,1.278,1568,0.55,1569,1.912,1570,1.047,1571,1.047,1572,1.499,1573,1.912,1574,1.047,1575,1.499,1576,2.29,1577,1.499,1578,1.912,1579,1.499,1580,1.499,1581,1.047,1582,1.912,1583,0.55,1584,1.499,1585,1.047,1586,1.499,1587,1.047,1588,1.912,1589,0.55,1590,1.912,1591,0.55,1592,1.499,1593,1.047,1594,1.912,1595,1.047,1596,1.499,1597,1.912,1598,0.55,1599,1.499,1600,1.499,1601,1.047,1602,1.912,1603,1.047,1604,1.047,1605,1.499,1606,1.047,1607,0.55,1608,1.912,1609,1.499,1610,2.96,1611,1.047,1612,1.047,1613,0.55,1614,1.499,1615,1.912,1616,1.499,1617,0.55,1618,1.047,1619,0.55,1620,1.499,1621,0.55,1622,1.047,1623,1.047,1624,1.047,1625,1.499,1626,0.55,1627,1.912,1628,1.047,1629,1.912,1630,1.499,1631,1.499,1632,1.499,1633,0.55,1634,0.55,1635,1.912,1636,1.499,1637,0.55,1638,1.047,1639,0.55,1640,0.55,1641,1.047,1642,1.912,1643,0.55,1644,0.55,1645,1.047,1646,0.55,1647,1.047,1648,0.55,1649,1.047,1650,1.047,1651,0.55,1652,0.55,1653,1.047,1654,1.912,1655,1.912,1656,0.55,1657,1.047,1658,1.047,1659,0.55,1660,1.047,1661,1.047,1662,0.55,1663,1.499,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.499,1670,2.29,1671,1.047,1672,1.047,1673,1.047,1674,0.55,1675,0.55,1676,1.047,1677,1.499,1678,0.55,1679,0.55,1680,1.047,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.502,1686,1.499,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.047,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.047,1704,1.047,1705,1.047,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.531,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.516,1717,0.55,1718,0.55,1719,0.55,1720,0.479,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.531,1726,0.55,1727,0.817,1728,0.55,1729,0.55,1730,0.55,1731,0.531,1732,0.55,1733,0.531,1734,0.55,1735,0.55,1736,0.55,1737,0.354,1738,0.516,1739,0.502,1740,0.531,1741,0.459,1742,1.047,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.047,1750,0.55,1751,1.047,1752,0.55,1753,0.479,1754,0.55]],["component/13",[1,0.442]],["title/14-1",[476,33.381]],["name/14-1",[]],["text/14-1",[]],["component/14-1",[]],["title/14-2",[82,25.697,226,28.177]],["name/14-2",[]],["text/14-2",[]],["component/14-2",[]],["title/14-3",[227,29.234,392,32.961]],["name/14-3",[]],["text/14-3",[]],["component/14-3",[]],["title/14-4",[227,36.567]],["name/14-4",[]],["text/14-4",[]],["component/14-4",[]],["title/14-5",[264,36.021]],["name/14-5",[]],["text/14-5",[]],["component/14-5",[]],["title/14-6",[439,38.043]],["name/14-6",[]],["text/14-6",[]],["component/14-6",[]],["title/14-7",[227,29.234,390,37.315]],["name/14-7",[]],["text/14-7",[]],["component/14-7",[]],["title/14-8",[227,36.567]],["name/14-8",[]],["text/14-8",[]],["component/14-8",[]],["title/14",[226,35.245]],["name/14",[226,1.026]],["text/14",[7,2.211,12,0.811,14,0.819,22,1.344,24,3.133,28,2.05,31,1.01,32,1.913,44,0.943,49,1.613,52,1.595,60,0.903,61,0.992,65,1.678,82,1.719,84,1.388,122,3.219,124,2.351,125,1.291,140,1.147,147,1.358,148,1.01,159,3.335,162,1.388,169,1.291,189,1.709,197,0.859,217,1.076,218,0.992,226,3.499,227,4.884,229,1.744,234,1.744,235,1.744,236,3.834,237,1.744,238,1.744,239,1.496,241,1.643,242,1.156,243,1.147,259,1.421,264,4.811,278,1.267,285,1.234,287,3.205,295,1.193,309,1.223,314,3.163,322,3.033,351,2.464,356,0.986,364,1.213,373,1.213,390,4.633,392,3.77,413,2.628,422,1.234,429,1.139,436,1.707,439,3.479,461,1.744,493,2.052,497,3.137,511,1.373,515,1.267,554,0.981,561,1.358,585,0.903,610,3.335,626,2.087,627,1.614,628,4.25,745,1.267,812,1.885,813,1.203,842,1.438,890,1.316,895,1.539,908,1.244,952,1.267,953,2.686,974,1.316,979,2.227,980,1.193,996,2.163,999,1.588,1004,1.563,1040,2.297,1049,2.297,1063,1.588,1094,2.812,1099,1.588,1107,1.388,1428,1.517,1435,1.588,1476,1.588,1753,5.044,1755,2.003,1756,1.614,1757,5.181,1758,3.389,1759,2.003,1760,3.389,1761,4.404,1762,2.003,1763,2.003,1764,2.003,1765,3.389,1766,3.389,1767,3.389,1768,1.879,1769,4.257,1770,4.404,1771,1.936,1772,3.389,1773,2.003,1774,1.674,1775,1.421,1776,2.003,1777,2.003,1778,1.936,1779,2.003,1780,2.003,1781,2.003,1782,1.707,1783,2.003,1784,5.007]],["component/14",[1,0.442]],["title/15-1",[744,35.103,745,32.039]],["name/15-1",[]],["text/15-1",[]],["component/15-1",[]],["title/15-2",[148,18.23,585,16.302,1066,28.203,1785,31.473]],["name/15-2",[]],["text/15-2",[]],["component/15-2",[]],["title/15-3",[16,19.476,18,18.393,20,15.048,656,23.298,1204,25.942]],["name/15-3",[]],["text/15-3",[]],["component/15-3",[]],["title/15-4",[630,29.459,1786,46.238]],["name/15-4",[]],["text/15-4",[]],["component/15-4",[]],["title/15-5",[75,27.783,1787,44.096]],["name/15-5",[]],["text/15-5",[]],["component/15-5",[]],["title/15-6",[209,31.194,585,22.84]],["name/15-6",[]],["text/15-6",[]],["component/15-6",[]],["title/15-7",[188,24.776,261,19.694,1788,32.197,1789,34.942]],["name/15-7",[]],["text/15-7",[]],["component/15-7",[]],["title/15-8",[585,22.84,1790,46.238]],["name/15-8",[]],["text/15-8",[]],["component/15-8",[]],["title/15-9",[388,41.638]],["name/15-9",[]],["text/15-9",[]],["component/15-9",[]],["title/15-10",[64,29.652]],["name/15-10",[]],["text/15-10",[]],["component/15-10",[]],["title/15-11",[478,32.341]],["name/15-11",[]],["text/15-11",[]],["component/15-11",[]],["title/15-12",[18,29.459,48,27.592]],["name/15-12",[]],["text/15-12",[]],["component/15-12",[]],["title/15-13",[585,19.025,850,32.418,1791,32.914]],["name/15-13",[]],["text/15-13",[]],["component/15-13",[]],["title/15-14",[53,22.229,60,19.025,478,21.536]],["name/15-14",[]],["text/15-14",[]],["component/15-14",[]],["title/15-15",[56,20.708,579,24.776,583,22.46,980,21.531]],["name/15-15",[]],["text/15-15",[]],["component/15-15",[]],["title/15",[1440,34.279]],["name/15",[1440,0.998]],["text/15",[1,1.585,7,3.094,11,0.862,12,1.244,14,0.514,16,1.39,17,1.498,18,2.509,20,2.052,21,1.688,28,1.05,32,0.71,34,1.923,38,1.174,39,0.65,40,2.729,41,1.782,44,0.592,48,2.843,49,2.046,52,1.762,53,1.973,54,1.923,60,1.018,64,1.752,65,0.623,66,1.663,68,1.391,69,0.715,73,0.997,74,2.178,75,3.064,77,2.754,78,2.273,80,1.427,83,1.53,88,0.768,95,0.997,103,1.486,120,1.189,123,0.788,124,0.671,125,0.81,140,0.72,148,0.634,163,0.892,181,1.601,182,1.013,189,1.138,193,1.031,197,0.968,202,0.862,208,2.113,209,1.89,242,1.302,251,0.843,259,2.178,261,3.375,264,1.745,266,1.53,270,0.694,273,0.892,277,1.031,278,0.795,283,1.498,287,1.08,288,0.654,289,1.907,300,0.881,301,1.366,322,1.607,354,0.768,356,1.511,372,2.968,373,0.761,382,3.538,391,0.881,402,1.221,413,0.638,417,0.768,429,0.715,447,0.862,477,1.441,478,1.567,514,3.491,516,1.564,528,0.997,529,0.862,554,0.615,557,0.835,558,1.978,574,1.031,576,1.051,583,0.781,585,2.665,589,1.851,598,1.095,600,1.148,604,0.903,606,2.083,624,1.179,626,1.39,630,1.312,631,2.835,634,1.12,636,2.326,637,1.39,656,3.845,744,2.595,745,3.036,760,2.01,764,1.095,765,2.723,789,0.871,808,1.514,809,0.997,850,2.877,854,2.359,865,1.819,883,1.051,896,1.601,899,1.264,952,0.795,963,1.851,987,1.62,1040,0.852,1050,0.781,1066,1.76,1099,0.997,1204,3.071,1216,1.072,1425,0.788,1440,0.68,1476,0.997,1727,0.981,1739,1.148,1741,1.051,1785,1.964,1786,2.06,1787,1.095,1788,2.734,1791,2.921,1792,1.095,1793,1.215,1794,1.257,1795,1.257,1796,1.215,1797,4.765,1798,1.257,1799,1.257,1800,1.257,1801,1.257,1802,1.257,1803,1.257,1804,1.257,1805,1.257,1806,1.257,1807,1.257,1808,1.886,1809,1.257,1810,1.257,1811,0.966,1812,1.179,1813,1.179,1814,1.031,1815,1.215,1816,1.257,1817,1.257,1818,1.095,1819,0.997,1820,1.095,1821,0.952,1822,1.257,1823,2.256,1824,3.07,1825,1.257,1826,2.612,1827,1.257,1828,1.257,1829,1.257,1830,1.215,1831,1.257,1832,1.257,1833,1.371,1834,1.371,1835,3.347,1836,1.371,1837,1.789,1838,1.308,1839,1.257,1840,1.257,1841,1.257,1842,1.257,1843,1.215,1844,1.257,1845,2.256,1846,1.12,1847,1.257,1848,1.257,1849,2.256,1850,1.257,1851,1.371,1852,1.308,1853,1.308,1854,1.12,1855,1.308,1856,1.257,1857,1.308,1858,1.308,1859,1.308,1860,1.12,1861,1.12,1862,1.308,1863,1.308,1864,1.308,1865,1.051,1866,1.12,1867,2.181,1868,1.179,1869,1.308,1870,0.939]],["component/15",[1,0.442]],["title/16-1",[183,38.355,202,34.713]],["name/16-1",[]],["text/16-1",[]],["component/16-1",[]],["title/16-2",[52,23.836,77,32.337]],["name/16-2",[]],["text/16-2",[]],["component/16-2",[]],["title/16-3",[12,20.519,39,26.18]],["name/16-3",[]],["text/16-3",[]],["component/16-3",[]],["title/16-4",[22,33.975,61,25.087]],["name/16-4",[]],["text/16-4",[]],["component/16-4",[]],["title/16-5",[12,17.092,19,26.446,60,19.025]],["name/16-5",[]],["text/16-5",[]],["component/16-5",[]],["title/16-6",[12,20.519,1871,44.096]],["name/16-6",[]],["text/16-6",[]],["component/16-6",[]],["title/16-7",[855,54.971]],["name/16-7",[]],["text/16-7",[]],["component/16-7",[]],["title/16",[478,32.341]],["name/16",[478,0.942]],["text/16",[7,4.336,11,4.122,12,1.279,15,0.757,16,1.944,19,0.816,21,1.423,39,1.203,49,2.308,52,0.612,60,2.567,61,3.12,69,1.794,77,2.452,88,1.421,89,0.763,123,0.816,129,1.671,181,4.038,189,0.656,195,0.699,208,1.781,218,1.152,274,0.972,285,1.944,288,0.677,366,1.631,424,2.502,440,0.681,477,0.831,481,1.133,487,1.067,516,0.902,562,1.067,571,1.613,572,3.714,576,3.69,585,1.991,596,0.763,606,0.724,626,1.433,762,1.133,763,4.27,808,2.117,819,1.133,821,1.067,862,3.274,980,0.775,986,0.958,1263,1,1267,3.044,1837,3.5,1860,3.932,1861,1.159,1865,1.944,1866,2.072,1868,1.22,1871,1.133,1872,1.301,1873,3.841,1874,2.327,1875,3.156,1876,1.301,1877,1.301,1878,1.301,1879,1.301,1880,2.327,1881,3.841,1882,1.595,1883,2.327,1884,2.327,1885,1.301,1886,1.301,1887,5.326,1888,5.326,1889,2.327,1890,1.301,1891,0.985,1892,1.301,1893,1.301,1894,2.327,1895,1.301,1896,1.301,1897,1.301,1898,1.301,1899,4.27,1900,5.693,1901,3.841,1902,5.693,1903,1.301,1904,1.301,1905,1.301,1906,3.602,1907,3.841,1908,3.841,1909,1.301,1910,1.301,1911,1.301,1912,3.841,1913,3.841,1914,1.301,1915,3.156,1916,1.301,1917,1.301,1918,3.156,1919,1.301,1920,1.301,1921,3.156,1922,1.301,1923,1.301,1924,3.156,1925,3.156,1926,1.301,1927,3.156,1928,4.904,1929,1.301,1930,1.301,1931,2.124,1932,2.182,1933,2.327,1934,2.327,1935,2.327,1936,2.327,1937,3.156,1938,2.327,1939,2.327,1940,2.327,1941,2.327,1942,1.301,1943,2.327,1944,1.22,1945,1.301,1946,2.327,1947,2.327,1948,1.301,1949,1.301,1950,1.301,1951,1.301,1952,1.301,1953,1.301,1954,1.301,1955,1.301,1956,1.301,1957,1.301,1958,1.301,1959,1.301,1960,1.188,1961,1.301,1962,1.301,1963,2.327]],["component/16",[1,0.442]],["title/17-1",[64,29.652]],["name/17-1",[]],["text/17-1",[]],["component/17-1",[]],["title/17-2",[14,20.71,1050,31.468]],["name/17-2",[]],["text/17-2",[]],["component/17-2",[]],["title/17-3",[38,21.945,41,20.075,185,22.673]],["name/17-3",[]],["text/17-3",[]],["component/17-3",[]],["title/17",[1964,49.427]],["name/17",[1964,1.439]],["text/17",[1,1.807,7,3.971,10,0.696,13,0.805,14,0.825,15,0.923,17,0.388,24,0.292,27,1.342,28,0.272,31,1.398,32,0.627,34,1.037,36,0.431,38,2.616,39,0.302,41,0.529,43,0.367,44,1.305,48,0.319,49,1.016,60,0.264,61,0.29,62,0.779,64,2.514,65,0.786,66,1.64,68,1.793,75,0.609,78,0.836,81,0.738,82,0.297,83,1.075,89,0.343,103,1.502,110,0.761,117,0.779,120,0.585,123,0.367,130,0.499,138,0.87,154,0.967,166,2.249,185,3.754,186,0.876,187,1.043,188,0.761,189,1.216,191,0.37,197,1.584,200,0.401,202,1.9,226,0.325,240,0.723,242,0.641,243,0.335,251,0.392,258,0.456,259,0.788,261,0.605,264,0.333,266,0.753,270,1.532,280,0.357,287,1.154,288,0.578,290,0.385,296,0.45,297,0.662,299,1.381,301,0.673,303,0.489,304,2.274,305,0.745,310,1.381,312,1.687,317,0.489,321,0.779,329,0.632,354,1.473,356,0.781,357,1.301,365,0.405,372,0.333,373,0.354,374,0.45,381,0.472,388,0.385,391,0.41,406,0.48,411,0.405,413,0.805,417,0.357,418,1.757,420,0.348,422,0.36,429,0.632,440,0.306,445,1.826,446,0.967,447,0.401,452,2.351,458,0.381,469,0.472,474,0.425,475,0.895,486,0.472,493,0.96,516,0.405,546,0.346,553,0.464,554,0.777,556,0.798,558,1.554,579,0.401,581,0.753,585,0.264,593,0.464,596,0.651,602,0.549,604,0.42,605,1.448,606,0.883,616,1.125,619,0.499,626,1.243,630,0.34,633,0.499,636,4.177,637,3.097,639,1.288,652,0.443,657,2.838,659,0.431,758,1.288,759,1.222,771,0.881,784,0.489,788,0.841,789,0.77,806,0.456,808,0.392,812,0.618,813,1.212,831,0.431,842,0.798,844,0.405,854,0.45,857,0.509,868,0.45,869,0.723,870,0.509,877,0.819,890,0.73,895,0.45,899,1.554,909,0.431,912,0.798,918,0.48,920,0.854,966,0.819,978,0.761,995,0.509,1050,0.363,1059,0.499,1064,0.928,1092,1.635,1209,0.472,1234,0.947,1236,3.446,1238,0.499,1248,0.928,1250,1.757,1252,0.967,1263,0.45,1267,4.612,1364,0.48,1369,0.947,1378,1.169,1432,0.464,1442,0.509,1505,2.317,1567,0.499,1685,0.534,1720,0.509,1727,0.867,1737,0.716,1756,0.472,1774,0.928,1775,0.415,1782,0.499,1791,0.867,1808,2.594,1811,0.45,1814,1.301,1819,1.912,1820,0.509,1821,2.351,1870,0.437,1882,0.401,1891,0.443,1965,0.585,1966,0.585,1967,1.074,1968,0.534,1969,1.156,1970,3.104,1971,3.104,1972,3.104,1973,2.018,1974,3.104,1975,2.646,1976,3.94,1977,3.385,1978,3.023,1979,2.773,1980,2.601,1981,3.104,1982,1.448,1983,1.111,1984,1.586,1985,1.488,1986,1.533,1987,1.586,1988,1.73,1989,1.111,1990,0.609,1991,0.638,1992,0.609,1993,0.638,1994,0.638,1995,1.286,1996,1.286,1997,0.638,1998,0.566,1999,0.638,2000,0.638,2001,0.585,2002,0.585,2003,0.585,2004,1.586,2005,1.586,2006,0.549,2007,0.585,2008,0.585,2009,0.566,2010,0.585,2011,0.585,2012,0.585,2013,0.585,2014,0.549,2015,0.566,2016,0.881,2017,1.655,2018,1.326,2019,0.509,2020,0.509,2021,0.509,2022,1.014,2023,0.499,2024,1.111,2025,0.585,2026,0.534,2027,1.014,2028,0.534,2029,1.014,2030,0.585,2031,1.111,2032,1.111,2033,4.041,2034,3.693,2035,2.018,2036,1.111,2037,1.111,2038,1.586,2039,1.111,2040,1.042,2041,0.585,2042,0.521,2043,0.549,2044,0.566,2045,0.48,2046,0.549,2047,0.509,2048,0.585,2049,0.585,2050,0.585,2051,1.111,2052,1.111,2053,0.509,2054,0.585,2055,0.585,2056,1.111,2057,1.111,2058,0.585,2059,0.585,2060,0.566,2061,0.585,2062,0.585,2063,0.585,2064,2.018,2065,0.585,2066,1.111,2067,0.585,2068,0.967,2069,1.074,2070,0.549,2071,0.585,2072,0.585,2073,0.585,2074,0.638,2075,0.638,2076,0.638,2077,0.638,2078,0.585,2079,0.585,2080,0.509,2081,0.509,2082,0.509,2083,0.509,2084,0.585,2085,0.585,2086,0.585,2087,0.585,2088,0.534,2089,0.585,2090,0.521,2091,0.585,2092,0.456,2093,0.509,2094,0.585,2095,0.534,2096,0.534,2097,0.549,2098,0.585,2099,0.585,2100,0.585,2101,0.585,2102,0.585,2103,0.585,2104,1.111,2105,1.111,2106,4.428,2107,4.428,2108,1.111,2109,0.638,2110,0.638,2111,3.956,2112,1.111,2113,1.111,2114,3.41,2115,1.014,2116,2.773,2117,1.111,2118,1.111,2119,0.566,2120,0.911,2121,0.549,2122,0.585,2123,0.566,2124,0.585,2125,0.585,2126,0.585,2127,0.566,2128,0.585,2129,0.585,2130,0.549,2131,0.585,2132,1.111]],["component/17",[1,0.442]],["title/18-1",[56,20.708,579,24.776,583,22.46,980,21.531]],["name/18-1",[]],["text/18-1",[]],["component/18-1",[]],["title/18-2",[2133,65.899]],["name/18-2",[]],["text/18-2",[]],["component/18-2",[]],["title/18-3",[22,21.213,56,18.115,583,19.648,2134,31.624,2135,25.49]],["name/18-3",[]],["text/18-3",[]],["component/18-3",[]],["title/18-4",[56,20.708,63,24.249,859,32.197,2136,39.421]],["name/18-4",[]],["text/18-4",[]],["component/18-4",[]],["title/18-5",[1116,37.822,1440,27.404]],["name/18-5",[]],["text/18-5",[]],["component/18-5",[]],["title/18",[583,39.361]],["name/18",[583,1.146]],["text/18",[1,0.934,7,3.648,14,1.258,21,1.387,24,1.533,49,1.127,52,1.447,56,4.604,68,2.179,89,1.803,131,2.885,161,4.303,214,1.862,261,2.619,264,1.749,270,1.699,280,1.878,283,2.042,288,3.078,291,3.589,309,1.878,314,2.209,320,2.297,329,1.749,356,1.515,358,2.4,373,1.862,382,2.523,440,3.097,460,2.363,509,2.237,516,2.132,558,1.982,579,2.108,580,3.541,583,5.311,585,2.668,606,2.674,619,2.622,630,2.796,744,3.331,745,1.946,845,2.57,859,2.739,875,3.75,878,2.363,899,1.723,920,2.363,925,2.739,980,2.863,1116,2.297,1165,4.388,1324,2.885,1326,2.885,1440,1.664,1453,2.678,1737,3.098,1811,2.363,1837,2.438,1846,2.739,1870,2.297,1882,2.108,1944,5.55,1975,2.622,2033,2.678,2120,3.943,2133,6.154,2134,3.076,2135,2.479,2137,3.561,2138,3.354,2139,5.242,2140,3.354,2141,3.354,2142,2.885,2143,3.076,2144,3.354,2145,3.354,2146,3.354,2147,3.354,2148,3.354,2149,3.561,2150,3.354,2151,3.561,2152,3.561,2153,3.354,2154,3.561,2155,3.561,2156,5.565,2157,3.199,2158,3.561]],["component/18",[1,0.442]],["title/19-1",[14,17.25,1882,28.914,2092,32.914]],["name/19-1",[]],["text/19-1",[]],["component/19-1",[]],["title/19-2",[585,19.025,1425,26.446,2135,34.005]],["name/19-2",[]],["text/19-2",[]],["component/19-2",[]],["title/19-3",[49,15.455,1737,27.191,1775,29.929]],["name/19-3",[]],["text/19-3",[]],["component/19-3",[]],["title/19-4",[48,19.694,810,28.656,909,26.633,2159,31.473]],["name/19-4",[]],["text/19-4",[]],["component/19-4",[]],["title/19-5",[1854,45.11,2160,48.957]],["name/19-5",[]],["text/19-5",[]],["component/19-5",[]],["title/19",[2161,49.427]],["name/19",[2161,1.439]],["text/19",[1,1.518,7,2.682,12,0.637,14,1.499,18,1.6,21,1.24,24,1.37,28,2.327,38,0.818,41,1.309,44,1.294,48,2.724,49,1.343,52,1.726,60,1.24,61,0.779,63,1.054,64,1.287,65,1.362,66,1.221,68,0.713,76,1.102,81,1.044,84,1.089,85,0.845,88,0.96,89,0.921,90,1.19,93,1.013,103,0.761,108,0.929,117,1.928,141,1.158,185,1.971,189,0.793,196,1.023,197,0.674,208,0.887,218,0.779,226,0.874,241,1.289,259,1.115,263,1.226,270,1.519,287,1.316,288,1.431,294,1.033,297,0.936,300,1.102,301,1.665,311,0.914,314,1.129,315,1.066,329,0.894,351,1.143,354,1.679,365,1.089,371,1.34,372,1.564,375,1.044,377,1.066,388,1.033,391,1.102,413,0.798,417,1.679,429,0.894,440,2.303,445,3.786,447,1.077,448,2.861,470,1.435,515,1.74,524,1.089,549,1.143,557,1.044,558,1.013,569,1.174,581,1.066,585,0.709,596,1.612,606,2.04,626,2.71,630,0.914,636,4.1,637,3.079,649,1.314,652,1.19,658,1.369,659,1.158,691,1.129,744,1.906,745,1.74,759,2.22,765,1.143,774,1.314,788,1.19,789,4.105,808,1.054,809,2.18,810,1.246,812,1.53,813,1.652,824,3.126,844,1.089,868,4.551,869,1.023,875,1.226,877,2.702,886,1.369,899,0.881,909,1.158,978,1.077,1017,1.369,1041,1.246,1082,1.369,1092,1.865,1098,1.129,1166,1.369,1265,1.435,1425,1.724,1430,1.19,1440,0.85,1452,1.4,1737,1.013,1775,1.115,1792,1.369,1818,1.369,1819,1.246,1821,2.777,1865,1.314,1870,2.054,1882,1.077,1891,1.19,1899,3.193,1960,1.435,1964,1.226,2016,1.246,2017,3.008,2018,3.065,2019,1.369,2020,1.369,2021,1.369,2022,1.435,2023,1.34,2026,1.435,2028,1.435,2029,3.348,2045,3.008,2047,2.395,2068,1.369,2080,1.369,2081,1.369,2082,1.369,2083,1.369,2092,1.226,2093,1.369,2120,1.289,2135,4.433,2159,1.369,2160,1.519,2162,2.659,2163,1.572,2164,1.572,2165,1.572,2166,1.4,2167,1.572,2168,1.519,2169,1.572,2170,1.572,2171,1.572,2172,1.572,2173,1.572,2174,1.572,2175,1.435,2176,1.572,2177,1.572,2178,1.519,2179,2.751,2180,1.572,2181,1.572,2182,1.572,2183,1.572,2184,1.572,2185,1.572,2186,1.519,2187,1.572,2188,1.435,2189,1.572,2190,1.474,2191,1.572,2192,1.519,2193,1.572,2194,1.572,2195,1.572,2196,1.572,2197,1.572,2198,1.572,2199,1.714,2200,2.999,2201,1.714,2202,1.714,2203,1.714,2204,1.714,2205,1.714,2206,1.714,2207,1.714,2208,1.714,2209,1.714,2210,1.714,2211,1.714,2212,1.714,2213,1.714,2214,1.714,2215,1.714,2216,1.714,2217,3.999,2218,2.999,2219,1.714,2220,1.714,2221,1.714,2222,3.999,2223,1.635,2224,1.714,2225,1.714]],["component/19",[1,0.442]],["title/20-1",[0,63.355]],["name/20-1",[]],["text/20-1",[]],["component/20-1",[]],["title/20",[1,19.237]],["name/20",[2,1.513]],["text/20",[1,1.735,3,2.916,4,2.437,5,2.916,6,2.916,7,1.244,8,2.916,9,2.916,10,1.828,11,1.998,12,2.866,13,2.338,14,1.885,15,3.324,16,3.52,17,3.06,18,3.324,19,2.889,20,1.387,21,1.315,22,1.956,23,2.818,24,2.296,25,2.538,26,2.916,27,1.622,28,1.357,29,2.662,30,2.392,31,1.47,32,2.601,33,1.936,34,1.498,35,2.275,36,2.148,37,2.538,38,1.517,39,1.507,40,2.62,41,2.72,42,2.916,43,1.828,44,2.169,45,2.044,46,2.392,47,1.897,48,3.114,49,1.068,50,2.916,51,2.735,52,1.372,53,2.428,54,2.485,55,2.392,56,3.274,57,2.839,58,4.53,59,2.311,60,1.315,61,1.444,62,2.044,63,1.956,64,1.365,65,2.283,66,1.295,67,2.275,68,1.322,69,1.658,70,2.35,71,2.735,72,2.916,73,2.311,74,2.068,75,1.599,76,2.044,77,1.861,78,1.536,79,2.916,80,1.844,81,1.936,82,2.338,83,1.977,84,2.021,85,1.567,86,2.916,87,2.437,88,1.78,89,1.709,90,4.328,91,2.538,92,2.916,93,3.684,94,1.879,95,2.311,96,2.916,97,2.916,98,1.546,99,2.916,100,2.538,101,2.538,102,2.485,103,1.411,104,2.916,105,2.916,106,2.916,107,2.392,108,1.723,109,2.597,110,1.998,111,2.916,112,2.916,113,2.538,114,2.735,115,2.916,116,2.818]],["component/20",[1,0.442]],["title/21-1",[117,44.415]],["name/21-1",[]],["text/21-1",[]],["component/21-1",[]],["title/21-2",[118,63.355]],["name/21-2",[]],["text/21-2",[]],["component/21-2",[]],["title/21-3",[119,50.65,120,26.687]],["name/21-3",[]],["text/21-3",[]],["component/21-3",[]],["title/21-4",[121,41.549,122,31.468]],["name/21-4",[]],["text/21-4",[]],["component/21-4",[]],["title/21-5",[13,25.697,121,41.549]],["name/21-5",[]],["text/21-5",[]],["component/21-5",[]],["title/21-6",[123,39.713]],["name/21-6",[]],["text/21-6",[]],["component/21-6",[]],["title/21",[124,27.039,125,32.644]],["name/21",[124,0.553,125,0.667]],["text/21",[1,1.334,13,1.013,14,2.365,16,2.082,18,1.966,21,2.332,28,1.573,31,1.007,34,1.026,38,2.689,39,1.032,40,1.135,41,1.608,43,1.252,49,2.45,56,1.144,57,1.23,61,0.989,64,1.582,66,0.887,68,0.905,69,1.922,80,1.263,82,1.013,83,1.354,85,1.073,88,2.064,94,1.287,103,2.502,107,1.638,108,1.18,110,1.369,117,2.37,120,1.052,122,2.73,123,3.241,124,2.76,125,1.287,126,3.38,127,1.997,128,2.78,129,1.434,130,1.702,131,1.873,132,1.997,133,2.943,134,1.558,135,1.997,136,5.035,137,3.38,138,1.854,139,1.93,140,1.144,141,1.471,142,1.61,143,1.669,144,2.825,145,1.997,146,1.873,147,2.292,148,1.007,149,1.739,150,1.471,151,1.739,152,1.997,153,1.997,154,1.739,155,1.823,156,1.997,157,1.997,158,3.17,159,1.512,160,3.267,161,3.196,162,3.583,163,2.398,164,1.434,165,3.38,166,1.135,167,3.668,168,1.997,169,1.287,170,4.395,171,1.512,172,1.739,173,1.93,174,1.997,175,1.873,176,1.997,177,1.93,178,1.997,179,1.873,180,1.997,181,1.417,182,2.724,183,2.56,184,1.997,185,1.817,186,1.103,187,1.313,188,1.369,189,1.704,190,1.997,191,2.138,192,2.773,193,3.605,194,1.739,195,1.073,196,1.3,197,1.884,198,1.739,199,1.702,200,1.369,201,1.93,202,1.369,203,2.73,204,1.34,205,1.997,206,1.452,207,1.452,208,1.127,209,1.23,210,1.873,211,1.93,212,2.49,213,1.997,214,1.209,215,1.583,216,1.997,217,1.073,218,0.989,219,1.997,220,1.583,221,1.583,222,1.275,223,1.313,224,1.997,225,1.997,226,1.111,227,1.951,228,1.997,229,1.739,230,2.773,231,1.997,232,1.997,233,1.61,234,1.739,235,1.739,236,1.739,237,1.739,238,1.739,239,1.491,240,1.3,241,1.638,242,1.153,243,1.144,244,2.178,245,2.077,246,1.823,247,2.077,248,2.178,249,2.679,250,1.823,251,1.34,252,1.997,253,1.997,254,1.997,255,1.997,256,1.997,257,1.369,258,1.558,259,1.417,260,1.997,261,1.088,262,1.638,263,1.558,264,1.135,265,1.997]],["component/21",[1,0.442]],["title/22-1",[38,21.945,185,22.673,266,28.602]],["name/22-1",[]],["text/22-1",[]],["component/22-1",[]],["title/22-2",[267,31.624,268,30.567,269,31.624,270,17.469,271,28.87]],["name/22-2",[]],["text/22-2",[]],["component/22-2",[]],["title/22-3",[34,21.67,49,15.455,120,22.229]],["name/22-3",[]],["text/22-3",[]],["component/22-3",[]],["title/22-4",[85,22.673,120,22.229,203,26.211]],["name/22-4",[]],["text/22-4",[]],["component/22-4",[]],["title/22-5",[120,26.687,272,43.174]],["name/22-5",[]],["text/22-5",[]],["component/22-5",[]],["title/22-6",[120,26.687,273,35.931]],["name/22-6",[]],["text/22-6",[]],["component/22-6",[]],["title/22-7",[274,37.822,275,39.515]],["name/22-7",[]],["text/22-7",[]],["component/22-7",[]],["title/22-8",[276,42.951]],["name/22-8",[]],["text/22-8",[]],["component/22-8",[]],["title/22",[64,23.706,207,36.832]],["name/22",[120,0.545,273,0.734]],["text/22",[1,0.811,7,1.834,12,0.43,13,0.539,14,0.434,15,0.618,20,0.922,21,1.938,24,0.965,27,0.591,28,0.902,30,0.872,31,1.347,32,1.094,33,0.705,34,0.995,36,1.427,37,0.925,38,1.714,40,1.102,41,0.506,43,0.666,44,0.5,45,0.745,47,1.738,49,1.403,52,1.257,55,0.872,57,0.654,62,0.745,63,2.21,64,2.203,65,1.898,66,2.639,67,0.829,68,2.694,69,1.102,75,1.465,85,1.771,89,1.136,93,0.685,94,0.685,103,2.08,108,0.628,110,0.728,120,3.656,134,0.829,138,1.063,140,2.462,144,0.888,161,0.773,163,2.337,166,1.519,172,0.925,181,1.895,185,4.088,188,1.328,189,0.977,197,1.145,200,0.728,202,0.728,203,4.407,207,0.773,208,1.094,209,0.654,214,0.643,217,0.571,227,1.542,240,0.691,242,0.613,243,0.609,246,0.97,251,0.713,261,0.579,266,2.914,273,2.718,277,3.143,278,1.226,279,1.652,280,3.629,281,3.088,282,0.793,283,1.286,284,0.872,285,0.654,286,1.604,287,1.278,288,1.008,289,0.66,290,1.755,291,2.861,292,2.277,293,0.888,294,1.755,295,1.154,296,2.052,297,0.633,298,1.769,299,0.925,300,1.358,301,0.643,302,0.925,303,1.619,304,2.191,305,1.3,306,1.062,307,0.925,308,1.062,309,0.649,310,0.925,311,1.553,312,3.592,313,0.906,314,0.763,315,1.314,316,0.996,317,0.888,318,1.062,319,1.536,320,1.447,321,0.745,322,1.398,323,2.325,324,1.062,325,0.925,326,1.409,327,2.277,328,1.062,329,1.519,330,1.062,331,1.062,332,1.062,333,1.062,334,1.062,335,1.062,336,1.062,337,1.062,338,1.062,339,1.062,340,1.062,341,1.062,342,1.062,343,1.062,344,1.062,345,1.062,346,1.062,347,1.062,348,1.062,349,1.062,350,0.906,351,0.773,352,1.687,353,0.925,354,1.183,355,1.062,356,0.523,357,1.589,358,1.512,359,1.489,360,0.816,361,1.938,362,2.868,363,0.946,364,1.173,365,1.343,366,1.358,367,0.906,368,1.273,369,0.805,370,1.062,371,0.906,372,1.102,373,1.173,374,0.816,375,2.187,376,1.261,377,1.314,378,0.906,379,2.868,380,1.062,381,4.086,382,1.589,383,1.062,384,1.062,385,2.052,386,0.829,387,1.938,388,1.273,389,1.062,390,0.783,391,0.745,392,0.691,393,3.831,394,1.062,395,1.062,396,1.566,397,1.062,398,0.842,399,1.062,400,0.773,401,1.938,402,1.783,403,1.938,404,1.062,405,2.671,406,1.589,407,0.925,408,0.763,409,0.773,410,1.619,411,0.736,412,1.062,413,1.355,414,0.996,415,1.489,416,1.938,417,0.649,418,0.925,419,1.409,420,1.154,421,1.062,422,0.654,423,0.705,424,0.842,425,0.925,426,1.062,427,0.97,428,0.925,429,0.604,430,1.062,431,0.816,432,1.062,433,0.946,434,1.062,435,1.062,436,0.906,437,1.062,438,1.062,439,0.638,440,0.556,441,0.996,442,1.062,443,1.062,444,1.062,445,0.805,446,0.925,447,0.728,448,0.829,449,1.062,450,1.062,451,1.027,452,0.805,453,1.062,454,0.925,455,1.062,456,1.062,457,1.619,458,0.691,459,1.062,460,0.816,461,0.925,462,1.062,463,1.062,464,1.062,465,0.925,466,1.062,467,1.062,468,1.062,469,0.856,470,0.97,471,1.062,472,1.062,473,0.996,474,0.773,475,0.856]],["component/22",[1,0.442]],["title/23-1",[476,33.381]],["name/23-1",[]],["text/23-1",[]],["component/23-1",[]],["title/23-2",[477,40.448]],["name/23-2",[]],["text/23-2",[]],["component/23-2",[]],["title/23-3",[124,33.822]],["name/23-3",[]],["text/23-3",[]],["component/23-3",[]],["title/23",[478,32.341]],["name/23",[478,0.942]],["text/23",[7,0.791,12,2.613,14,2.468,15,1.078,20,0.882,21,0.836,24,0.924,28,2.292,31,0.935,32,2.779,38,0.964,41,1.51,44,1.493,47,1.206,49,1.804,52,1.493,53,3.18,60,2.496,61,3.195,68,1.438,69,1.804,73,1.469,77,2.655,78,0.977,82,0.941,85,0.996,94,1.195,103,1.535,124,2.629,125,1.195,133,1.614,136,2.762,138,1.017,141,1.366,142,1.494,148,1.6,161,2.307,162,2.882,166,1.054,167,1.315,191,2.007,198,1.614,217,3.243,218,0.918,222,2.026,223,1.218,239,1.384,242,1.07,243,1.062,278,1.173,280,1.132,284,1.521,285,2.561,286,2.497,287,0.887,294,1.218,307,1.614,311,1.078,322,0.97,326,2.307,329,1.054,356,2.048,359,1.424,364,1.122,366,1.3,369,3.149,372,2.365,376,1.206,385,1.424,386,1.446,388,1.218,396,1.087,408,1.331,413,0.941,419,1.348,420,1.104,422,1.142,423,1.231,431,2.438,439,1.113,457,1.549,458,2.065,477,4.535,478,2.514,479,1.854,480,1.854,481,1.614,482,1.384,483,1.854,484,1.854,485,1.739,486,1.494,487,1.521,488,2.651,489,3.173,490,1.854,491,1.271,492,3.869,493,1.122,494,2.762,495,1.854,496,1.854,497,1.122,498,1.854,499,1.854,500,3.797,501,1.366,502,1.692,503,2.896,504,1.854,505,1.331,506,1.614,507,3.797,508,1.854,509,1.348,510,4.039,511,1.271,512,3.621,513,1.989,514,1.095,515,1.173,516,2.199,517,1.331,518,1.549,519,1.854,520,1.58,521,1.692,522,1.792,523,1.854,524,1.285,525,1.3,526,1.854,527,2.762,528,2.515,529,1.271,530,1.614,531,1.854,532,1.854,533,3.067,534,4.159,535,1.792,536,1.854,537,1.854,538,3.149,539,1.854,540,1.854,541,1.854,542,1.854,543,1.854,544,1.854,545,1.854,546,1.095,547,1.854,548,1.58,549,1.348,550,1.854,551,1.424,552,1.854,553,1.469,554,0.908,555,1.692,556,1.331,557,1.231,558,1.195,559,1.854,560,1.854,561,1.257,562,1.521,563,1.854,564,1.854,565,1.854]],["component/23",[1,0.442]],["title/24-1",[38,26.346,39,26.18]],["name/24-1",[]],["text/24-1",[]],["component/24-1",[]],["title/24-2",[38,26.346,61,25.087]],["name/24-2",[]],["text/24-2",[]],["component/24-2",[]],["title/24-3",[38,21.945,138,23.142,185,22.673]],["name/24-3",[]],["text/24-3",[]],["component/24-3",[]],["title/24-4",[41,15.048,120,16.662,207,22.997,273,22.434,402,17.111]],["name/24-4",[]],["text/24-4",[]],["component/24-4",[]],["title/24-5",[66,22.491,566,55.231]],["name/24-5",[]],["text/24-5",[]],["component/24-5",[]],["title/24-6",[12,25.666]],["name/24-6",[]],["text/24-6",[]],["component/24-6",[]],["title/24",[288,32.954]],["name/24",[288,0.959]],["text/24",[1,1.201,12,1.908,13,0.88,14,0.709,15,1.009,17,1.151,18,1.009,20,1.426,21,2.397,24,1.493,31,1.511,32,0.979,34,2.031,36,2.207,38,3.026,39,0.896,40,0.986,41,1.882,43,1.878,44,1.861,47,1.129,49,2.131,52,0.816,53,2.801,55,1.423,56,1.716,57,1.068,60,1.351,61,1.959,62,1.216,64,0.812,66,2.769,68,2.41,69,0.986,75,0.951,77,1.913,78,1.578,81,1.151,82,0.88,85,0.932,87,1.449,88,1.059,103,3.191,109,1.545,110,1.189,120,0.914,121,1.423,124,1.599,138,1.643,140,0.993,143,1.449,147,1.176,150,1.278,162,1.202,163,1.23,166,0.986,167,1.23,182,1.398,185,3.543,186,1.655,187,1.969,189,1.994,191,1.097,192,1.423,195,2.857,196,1.129,199,1.478,201,2.896,204,2.01,207,2.179,208,2.232,218,0.859,222,1.107,230,1.423,233,1.398,250,1.583,266,1.176,270,0.958,275,1.353,277,2.458,280,3.552,281,1.398,284,1.423,285,1.068,288,1.558,300,1.216,304,1.423,305,2.01,309,1.059,319,3.732,329,1.703,358,1.353,360,2.302,364,1.05,365,1.202,366,1.216,369,1.313,372,0.986,373,1.05,378,1.478,396,1.017,400,2.179,402,0.938,406,1.423,417,1.829,420,1.784,422,1.068,423,1.151,429,0.986,440,0.908,452,2.269,460,1.333,477,2.525,478,2.404,482,1.295,486,1.398,487,1.423,492,0.945,493,1.05,500,1.583,502,1.583,507,1.583,510,1.423,521,1.583,529,1.189,554,1.467,561,1.176,567,1.278,568,1.891,569,1.295,570,1.891,571,2.741,572,1.313,573,1.891,574,1.423,575,1.333,576,1.449,577,1.891,578,1.891,579,1.189,580,1.278,581,1.176,582,3.267,583,1.077,584,1.891,585,1.783,586,2.81,587,2.337,588,1.804,589,1.423,590,3.267,591,1.583,592,1.891,593,1.375,594,3.267,595,1.804,596,1.756,597,1.891,598,1.51,599,1.676,600,1.583,601,1.891,602,1.627,603,1.891,604,1.245,605,1.583,606,0.965,607,1.891,608,1.891,609,1.891,610,1.313,611,1.545,612,1.891,613,1.804,614,1.891,615,1.891,616,1.23,617,1.804,618,1.583,619,1.478,620,1.891,621,1.891,622,1.545,623,1.375,624,1.627,625,1.804,626,1.068,627,1.398,628,1.423,629,1.891,630,1.009,631,1.313,632,1.676,633,1.478,634,1.545,635,1.891]],["component/24",[1,0.442]],["title/25-1",[7,13.495,440,16.555,623,25.068,636,19.648,637,19.476]],["name/25-1",[]],["text/25-1",[]],["component/25-1",[]],["title/25-2",[1,15.38,638,33.626]],["name/25-2",[]],["text/25-2",[]],["component/25-2",[]],["title/25-3",[478,25.855,639,32.337]],["name/25-3",[]],["text/25-3",[]],["component/25-3",[]],["title/25-4",[195,19.428,196,23.525,572,27.376,639,23.08]],["name/25-4",[]],["text/25-4",[]],["component/25-4",[]],["title/25-5",[1,12.811,440,22.086,640,42.19]],["name/25-5",[]],["text/25-5",[]],["component/25-5",[]],["title/25-6",[1,15.38,641,44.096]],["name/25-6",[]],["text/25-6",[]],["component/25-6",[]],["title/25",[561,28.602,616,29.929,642,36.73]],["name/25",[643,1.844]],["text/25",[1,0.642,7,4.115,10,0.733,13,1.073,21,0.953,27,1.176,28,1.347,32,0.66,34,1.086,40,0.665,44,0.55,49,0.428,52,0.55,63,2.379,66,0.519,68,0.53,69,0.665,74,2.053,75,1.587,83,0.793,85,0.629,93,0.754,103,0.566,110,0.802,123,0.733,128,0.74,149,1.018,166,2.017,167,1.5,169,0.754,194,1.018,195,3.211,196,2.67,199,1.802,204,0.785,240,0.761,243,0.67,251,0.785,257,0.802,261,0.637,270,0.646,274,0.873,276,0.793,288,0.608,309,0.714,315,0.793,321,0.82,329,0.665,354,0.714,356,0.576,362,1.841,417,0.714,420,1.259,425,1.018,429,0.665,440,3.263,454,1.018,458,1.376,477,3.631,478,2.094,497,1.28,509,0.851,525,0.82,538,1.601,551,0.899,554,0.573,561,2.404,572,1.601,574,0.959,581,0.793,596,1.239,618,1.068,623,0.927,631,1.601,636,1.798,637,0.72,638,1.404,639,3.98,641,2.519,642,7.875,644,1.131,645,0.862,646,1.097,647,1.17,648,1.097,649,0.978,650,1.17,651,1.097,652,0.886,653,1.097,654,1.17,655,1.579,656,0.862,657,0.899,658,1.841,659,1.558,660,1.17,661,3.547,662,1.17,663,3.547,664,2.893,665,2.114,666,1.17,667,1.17,668,1.841,669,2.519,670,3.327,671,1.17,672,1.17,673,1.17,674,1.17,675,1.17,676,1.275,677,1.17,678,2.114,679,1.17,680,2.114,681,1.17,682,1.17,683,1.17,684,1.131,685,1.17,686,1.17,687,1.17,688,2.893,689,1.17,690,1.17,691,0.84,692,1.17,693,1.17,694,1.17,695,1.17,696,1.17,697,1.17,698,1.17,699,1.17,700,1.17,701,1.983,702,0.927,704,1.17,705,1.17,706,2.044,707,1.17,708,2.044,709,1.65,710,1.17,711,1.17,712,1.17,713,1.17,714,1.17,715,5.687,716,1.17,717,1.17,718,1.17,719,1.17,720,1.17,721,1.17,722,1.17,723,1.17,724,1.17,725,1.17,726,1.17,727,1.17,728,1.17,729,1.17,730,1.17,731,1.17,732,1.17,733,1.17,734,1.17,735,1.17,736,1.17,737,1.17,738,1.17,739,1.17,740,1.17,741,1.17,742,1.17,743,1.17,744,2.005,745,0.74,746,1.17,747,5.427,748,1.17,749,1.17,750,2.893,751,1.17,752,2.114,753,1.17,754,2.114,755,1.17,756,1.17,757,1.17,758,0.747,759,0.708,760,1.883,761,1.17,762,1.018,763,1.018,764,1.018,765,0.851,766,1.131,767,2.893,768,2.114,769,1.17,770,1.17,771,0.927,772,0.978,773,0.927,774,0.978,775,1.17,776,2.893,777,1.17,778,1.17,779,1.17,780,1.17,781,1.17,782,1.17,783,1.042,784,0.978,785,1.17,786,1.17,787,4.581,788,0.886,789,0.811,790,1.17,791,1.17,792,1.17,793,1.17,794,1.17,795,1.17,796,1.17,797,1.17,798,1.17,799,1.17,800,1.17,801,1.17,802,1.17,803,1.17,804,1.17,805,1.17,806,0.913,807,1.17,808,2.379,809,0.927,810,0.927,811,1.018,812,1.176,813,1.27,814,1.018,815,1.018,2226,1.275]],["component/25",[1,0.442]],["title/26-1",[195,27.22,571,35.103]],["name/26-1",[]],["text/26-1",[]],["component/26-1",[]],["title/26-2",[20,24.101,195,27.22]],["name/26-2",[]],["text/26-2",[]],["component/26-2",[]],["title/26-3",[195,27.22,571,35.103]],["name/26-3",[]],["text/26-3",[]],["component/26-3",[]],["title/26-4",[478,32.341]],["name/26-4",[]],["text/26-4",[]],["component/26-4",[]],["title/26-5",[276,42.951]],["name/26-5",[]],["text/26-5",[]],["component/26-5",[]],["title/26",[195,27.22,580,37.315]],["name/26",[195,0.991]],["text/26",[7,0.717,11,0.624,12,0.681,13,1.479,14,0.687,15,0.978,16,2.621,17,1.936,18,0.978,19,0.57,20,2.824,21,0.41,22,0.61,24,1.167,27,0.935,28,0.782,31,1.181,32,0.949,33,0.604,34,1.203,35,1.311,39,0.869,40,0.517,41,1.114,43,2.668,44,1.102,45,1.178,46,0.746,47,1.094,48,2.983,49,1.688,53,1.536,57,1.035,59,0.721,60,1.541,63,1.127,64,0.426,65,0.832,66,1.715,76,4.007,77,1.861,80,0.576,82,0.462,88,0.556,89,1.373,91,1.463,94,0.586,95,0.721,98,0.483,103,0.44,108,0.538,122,1.811,123,0.57,128,1.063,129,1.207,134,1.311,140,2.212,141,0.67,148,1.181,150,0.67,151,0.792,159,0.689,162,2.021,163,0.645,167,0.645,171,0.689,183,0.689,185,1.259,189,0.459,191,1.481,195,3.298,203,0.565,204,1.571,206,0.662,214,1.418,218,0.451,233,0.733,240,1.524,242,0.97,258,0.71,264,0.517,272,2.485,276,0.617,280,1.026,282,1.255,283,1.116,285,1.796,286,1.009,287,0.435,288,0.473,294,0.598,295,0.542,296,1.291,301,1.018,302,0.792,305,0.61,311,0.529,313,0.776,315,1.139,320,0.679,322,0.476,323,0.792,326,1.222,329,0.517,350,0.776,353,1.463,356,0.828,358,0.71,359,0.699,366,0.638,367,0.776,373,2.069,374,0.699,375,0.604,376,0.592,377,1.588,379,0.792,385,1.291,386,1.311,392,0.592,396,0.985,400,1.703,402,1.849,407,0.792,409,0.662,411,1.165,417,1.026,419,0.662,420,1.001,422,0.56,423,0.604,424,0.721,429,0.517,452,0.689,460,0.699,465,0.792,474,1.703,476,0.886,477,1.861,478,2.173,482,2.552,493,2.338,497,0.551,509,0.662,510,5.997,514,0.538,520,0.776,524,1.165,527,0.792,528,0.721,529,1.152,530,2.976,538,0.689,548,0.776,549,1.222,551,1.291,554,0.823,557,0.604,569,0.679,571,4.382,575,2.626,579,0.624,581,0.617,585,0.758,591,0.831,596,0.533,611,0.81,627,0.733,630,0.529,637,1.796,638,0.604,747,0.792,758,0.581,772,0.76,816,1.681,817,0.879,818,0.91,819,0.792,820,0.91,821,1.379,822,0.645,823,0.792,824,0.776,825,0.91,826,0.831,827,0.792,828,0.879,829,0.91,830,0.91,831,1.238,832,0.853,833,4.455,834,0.91,835,0.879,836,0.853,837,1.433,838,1.625,839,2.437,840,0.91,841,1.625,842,1.682,843,0.91,844,2.021,845,0.76,846,0.91,847,0.853,848,0.91,849,0.91,850,4.991,851,0.879,852,0.91,853,0.91,854,1.291,855,0.721,856,0.879,857,1.463,858,3.439,859,0.81,860,1.996,861,0.91,862,0.776,863,0.91,864,1.888,865,0.733,866,0.91,867,2.818,868,0.699,869,1.094,870,0.792,871,0.91,872,0.91,873,2.916,874,0.91,875,2.275,876,0.76,877,0.67,878,0.699,879,0.91,880,2.24,881,0.91,882,0.91,883,3.227,884,2.197,885,0.81,886,2.976,887,0.91,888,0.91,889,0.879,890,0.598,891,0.91,892,1.576,893,0.879,894,1.576,895,0.699,896,0.645,897,0.91,898,0.776,899,1.634,900,1.576,901,0.91,902,0.831,903,3.418,904,1.625,905,0.91,906,0.853,907,0.91,908,0.565,909,0.67,910,0.91,911,0.879,912,0.653,913,0.91,914,0.91,915,0.721,916,0.91,917,0.91,918,0.746,919,0.91,920,1.291,921,0.879,922,0.91,923,0.91,924,0.91,925,1.497,926,0.91,927,0.91,928,0.91,929,2.916,930,1.311,931,0.76,932,0.91,933,0.91,934,1.681,935,0.879,936,0.853,937,0.81,938,0.91,939,0.776,940,0.91,941,0.91,942,0.776,943,0.831,944,0.91,945,0.91,946,0.91,947,0.853,948,0.746,949,0.831,950,0.91,951,0.91,952,0.576,953,0.721,954,0.91,955,0.81,956,0.91,957,0.879,958,0.91,959,0.91,960,0.91,961,0.853,962,0.91,963,0.746]],["component/26",[1,0.442]],["title/27-1",[476,33.381]],["name/27-1",[]],["text/27-1",[]],["component/27-1",[]],["title/27-2",[217,22.673,218,20.897,513,26.446]],["name/27-2",[]],["text/27-2",[]],["component/27-2",[]],["title/27-3",[439,30.414,964,40.149]],["name/27-3",[]],["text/27-3",[]],["component/27-3",[]],["title/27-4",[13,25.697,203,31.468]],["name/27-4",[]],["text/27-4",[]],["component/27-4",[]],["title/27-5",[148,25.541,965,37.315]],["name/27-5",[]],["text/27-5",[]],["component/27-5",[]],["title/27-6",[290,33.288,965,37.315]],["name/27-6",[]],["text/27-6",[]],["component/27-6",[]],["title/27-7",[203,31.468,966,37.315]],["name/27-7",[]],["text/27-7",[]],["component/27-7",[]],["title/27-8",[967,44.096,968,40.149]],["name/27-8",[]],["text/27-8",[]],["component/27-8",[]],["title/27",[82,25.697,197,21.719]],["name/27",[197,0.444,969,0.901]],["text/27",[7,2.206,12,0.809,13,2.23,14,2.735,20,2.091,21,1.524,28,1.573,41,1.608,49,2.3,52,0.94,53,1.781,57,1.23,65,0.989,66,0.887,78,1.052,140,2.517,148,1.704,166,1.135,191,2.138,197,2.48,200,1.369,203,3.212,217,3.375,218,1.674,227,3.624,257,1.369,261,1.088,262,1.638,278,2.138,286,3.473,287,0.956,290,1.313,295,1.189,322,2.301,356,0.983,368,1.313,373,1.209,396,1.981,402,1.081,408,2.427,413,1.013,420,1.189,439,4.551,491,5.021,501,1.471,511,3.012,513,3.241,546,1.18,554,0.978,583,1.241,587,2.637,638,1.326,812,1.111,837,1.702,890,2.888,908,1.241,952,4.449,964,3.483,965,1.471,966,2.49,968,3.483,970,1.997,971,1.739,972,1.997,973,1.997,974,2.221,975,3.801,976,5.467,977,1.558,978,1.369,979,1.313,980,1.189,981,1.153,982,1.997,983,4.998,984,1.997,985,1.93,986,1.471,987,1.434,988,4.395,989,3.38,990,4.395,991,1.535,992,1.739,993,3.38,994,1.997,995,2.943,996,2.158,997,1.997,998,1.93,999,1.583,1000,1.739,1001,1.583,1002,3.38,1003,1.739,1004,1.558,1005,1.997,1006,1.997,1007,1.997,1008,1.997,1009,1.997,1010,1.997,1011,1.997,1012,1.997,1013,1.997,1014,1.997,1015,1.739,1016,1.997,1017,1.739,1018,1.583,1019,1.997,1020,1.583,1021,1.997,1022,1.997,1023,1.997,1024,1.997,1025,1.997,1026,1.997,1027,1.997,1028,1.997,1029,1.997,1030,1.997,1031,1.997,1032,1.997,1033,1.558,1034,1.702,1035,3.38,1036,1.997,1037,1.997,1038,3.826,1039,1.997,1040,1.354,1041,1.583,1042,1.739,1043,1.638,1044,1.997,1045,1.739,1046,1.997,1047,1.739,1048,3.38,1049,1.354]],["component/27",[1,0.442]],["title/28-1",[476,33.381]],["name/28-1",[]],["text/28-1",[]],["component/28-1",[]],["title/28-2",[287,24.236,981,29.234]],["name/28-2",[]],["text/28-2",[]],["component/28-2",[]],["title/28-3",[322,26.515,981,29.234]],["name/28-3",[]],["text/28-3",[]],["component/28-3",[]],["title/28-4",[413,25.697,981,29.234]],["name/28-4",[]],["text/28-4",[]],["component/28-4",[]],["title/28-5",[981,29.234,996,32.337]],["name/28-5",[]],["text/28-5",[]],["component/28-5",[]],["title/28-6",[812,23.47,981,24.351,1049,28.602]],["name/28-6",[]],["text/28-6",[]],["component/28-6",[]],["title/28",[215,40.149,1050,31.468]],["name/28",[812,0.576,1050,0.643]],["text/28",[1,1.223,7,3.14,13,2.992,14,2.657,15,1.434,16,1.519,19,1.546,20,3.887,21,2.303,28,1.875,31,2.032,44,1.896,49,2.555,66,1.095,68,1.826,85,3.169,208,1.392,240,1.605,270,1.362,285,1.519,287,1.928,289,1.532,295,3.042,311,1.434,322,1.291,354,1.506,364,1.493,368,1.621,375,2.675,376,3.324,390,1.817,392,1.605,396,3.456,408,1.771,413,1.251,415,1.895,419,3.714,431,1.895,513,2.525,546,1.457,554,1.207,567,1.817,575,1.895,606,1.372,669,5.658,758,1.575,759,3.57,811,2.147,812,2.241,823,3.507,878,1.895,908,1.532,931,2.061,939,2.102,964,4.048,974,1.621,975,3.875,979,3.875,981,3.403,1050,3.663,1051,3.894,1052,2.466,1053,2.466,1054,2.466,1055,2.102,1056,2.384,1057,2.466,1058,4.029,1059,2.102,1060,2.061,1061,3.507,1062,2.313,1063,3.193,1064,3.367,1065,2.466,1066,1.924,1067,3.434,1068,2.466,1069,2.384,1070,5.107,1071,4.029,1072,5.107,1073,2.313,1074,4.029,1075,2.466,1076,2.466,1077,2.466,1078,2.466,1079,4.029,1080,2.466,1081,2.466,1082,3.507,1083,4.029,1084,2.384,1085,2.466,1086,2.147,1087,2.466,1088,2.466,1089,2.466,1090,2.466,1091,2.384,1092,1.672,1093,2.466,1094,1.575,1095,2.313,1096,2.313]],["component/28",[1,0.442]],["title/29-1",[476,33.381]],["name/29-1",[]],["text/29-1",[]],["component/29-1",[]],["title/29",[14,20.71,122,31.468]],["name/29",[2,1.513]],["text/29",[4,2.774,7,3.386,12,2.515,14,2.085,20,2.954,27,1.846,31,1.674,44,1.562,49,3.124,53,2.686,60,2.299,61,2.525,78,2.686,80,2.099,122,3.857,138,1.821,148,1.674,171,2.513,197,1.423,208,1.873,214,2.009,215,2.631,226,1.846,261,1.808,286,1.993,287,1.588,290,2.181,295,3.698,300,3.574,321,2.327,369,2.513,413,1.684,422,2.044,428,2.889,458,2.16,476,1.749,492,2.778,501,4.574,513,4.367,515,3.225,517,2.383,518,2.774,546,3.012,554,2.496,585,1.497,812,2.836,813,3.728,814,2.889,815,2.889,876,2.774,908,2.062,971,2.889,974,4.578,975,3.351,976,2.889,977,3.978,979,2.181,1050,3.168,1055,2.829,1063,2.631,1067,2.829,1086,5.405,1094,2.119,1097,3.319,1098,2.383,1099,4.921,1100,3.319,1101,3.319,1102,3.319,1103,3.319,1104,3.319,1105,2.889,1106,2.445,1107,2.3,1108,3.319]],["component/29",[1,0.442]],["title/30-1",[186,23.305,604,30.296,930,32.914]],["name/30-1",[]],["text/30-1",[]],["component/30-1",[]],["title/30-2",[186,23.305,604,30.296,1109,35.962]],["name/30-2",[]],["text/30-2",[]],["component/30-2",[]],["title/30-3",[186,27.978,1110,40.149]],["name/30-3",[]],["text/30-3",[]],["component/30-3",[]],["title/30-4",[187,41.638]],["name/30-4",[]],["text/30-4",[]],["component/30-4",[]],["title/30-5",[186,27.978,1111,40.149]],["name/30-5",[]],["text/30-5",[]],["component/30-5",[]],["title/30-6",[186,23.305,1111,33.442,1112,42.19]],["name/30-6",[]],["text/30-6",[]],["component/30-6",[]],["title/30-7",[1113,50.219]],["name/30-7",[]],["text/30-7",[]],["component/30-7",[]],["title/30-8",[1114,55.157]],["name/30-8",[]],["text/30-8",[]],["component/30-8",[]],["title/30-9",[197,27.167]],["name/30-9",[]],["text/30-9",[]],["component/30-9",[]],["title/30-10",[197,21.719,325,44.096]],["name/30-10",[]],["text/30-10",[]],["component/30-10",[]],["title/30-11",[197,21.719,1115,50.65]],["name/30-11",[]],["text/30-11",[]],["component/30-11",[]],["title/30-12",[1116,37.822,1117,44.096]],["name/30-12",[]],["text/30-12",[]],["component/30-12",[]],["title/30-13",[297,30.166,1110,40.149]],["name/30-13",[]],["text/30-13",[]],["component/30-13",[]],["title/30-14",[197,21.719,1113,40.149]],["name/30-14",[]],["text/30-14",[]],["component/30-14",[]],["title/30-15",[197,21.719,966,37.315]],["name/30-15",[]],["text/30-15",[]],["component/30-15",[]],["title/30-16",[197,21.719,1118,44.096]],["name/30-16",[]],["text/30-16",[]],["component/30-16",[]],["title/30",[138,27.783,148,25.541]],["name/30",[138,0.568,148,0.522]],["text/30",[7,0.907,12,0.329,14,2.373,19,0.949,20,0.72,21,0.683,27,0.452,28,2.14,31,0.41,39,0.783,40,2.437,41,0.387,43,0.51,47,0.529,49,0.298,53,1.402,56,0.867,65,0.75,68,0.686,76,0.57,78,0.428,82,0.412,85,0.437,93,0.524,124,1.675,129,1.526,138,1.721,140,2.455,148,1.071,166,0.462,186,1.967,187,0.995,188,0.557,189,0.41,197,1.838,200,0.557,209,0.932,214,0.492,217,2.623,218,2.874,223,0.534,227,0.874,264,1.208,276,1.026,279,1.291,286,3.23,287,1.704,290,1.396,291,1.987,292,0.693,297,1.265,301,0.492,309,0.496,322,2.064,326,1.101,356,0.4,365,0.563,368,0.534,372,0.462,376,0.529,391,0.57,396,1.56,398,0.644,402,0.44,409,0.591,410,0.679,411,1.049,413,1.592,429,0.462,447,0.557,469,1.22,491,1.038,497,0.492,505,0.584,506,0.708,511,1.038,514,0.48,529,1.038,546,0.48,554,0.398,557,0.54,558,0.524,598,0.708,606,0.452,630,0.473,638,0.54,645,0.599,659,2.311,691,1.526,702,1.2,709,0.634,806,0.634,827,0.708,842,2.831,845,0.679,869,1.732,890,0.995,908,0.505,930,1.181,942,1.291,952,2.494,965,1.115,967,0.708,968,0.644,979,0.534,986,0.599,987,1.087,992,0.708,996,2.517,1001,0.644,1003,2.317,1004,1.658,1015,1.318,1018,0.644,1020,0.644,1033,0.634,1038,3.432,1040,2.672,1042,0.708,1045,1.318,1047,1.318,1049,2.127,1061,0.708,1092,1.026,1094,0.519,1098,1.526,1107,1.049,1109,1.811,1110,5.018,1111,0.644,1113,0.644,1114,0.708,1116,1.131,1117,1.318,1118,0.708,1119,1.993,1120,0.786,1121,1.181,1122,1.514,1123,0.813,1124,1.514,1125,0.813,1126,1.514,1127,0.813,1128,1.514,1129,0.813,1130,1.514,1131,0.813,1132,1.514,1133,0.813,1134,1.514,1135,0.813,1136,1.514,1137,0.813,1138,0.813,1139,0.813,1140,2.125,1141,0.813,1142,1.514,1143,0.813,1144,0.813,1145,0.813,1146,0.813,1147,0.813,1148,0.813,1149,0.813,1150,0.813,1151,0.813,1152,0.813,1153,0.813,1154,2.125,1155,1.514,1156,2.662,1157,0.813,1158,1.514,1159,1.514,1160,0.813,1161,0.813,1162,2.573,1163,1.514,1164,2.125,1165,3.251,1166,2.731,1167,0.813,1168,1.514,1169,1.514,1170,1.265,1171,0.786,1172,0.813,1173,0.813,1174,0.813,1175,0.813,1176,0.786,1177,1.514,1178,1.514,1179,0.813,1180,1.514,1181,0.813,1182,1.514,1183,0.813,1184,0.813,1185,0.813,1186,0.813,1187,0.813,1188,0.813,1189,0.813,1190,0.813,1191,0.813,1192,0.813,1193,0.813,1194,0.813,1195,0.813,1196,0.813,1197,1.514,1198,0.813,1199,0.813,1200,0.813,1201,0.813,1202,0.813,1203,0.813,1204,1.242,1205,0.813,1206,0.813,1207,0.813,1208,0.813,1209,0.655,1210,0.813,1211,0.813,1212,0.813,1213,0.813,1214,0.813,1215,0.813,1216,0.693,1217,0.813,1218,0.813,1219,0.813,1220,0.813,1221,0.813,1222,0.813,1223,0.813,1224,0.813,1225,0.813,1226,0.813,1227,1.85,1228,0.813,1229,1.85,1230,0.813,1231,0.813,1232,0.813,1233,0.813,1234,0.693,1235,0.813,1236,0.667,1237,0.813,1238,0.693,1239,0.813,1240,0.813,1241,0.763,1242,0.813,1243,0.813,1244,0.813,1245,0.813,1246,0.813,1247,0.813,1248,0.679,1249,0.813,1250,0.708,1251,0.813,1252,0.708,1253,0.813,1254,0.813,1255,0.813,1256,0.813,1257,0.786,1258,0.813,1259,0.786,1260,0.813,1261,0.693,1262,0.813,1263,0.625,1264,0.813,1265,0.742,1266,0.813,1267,0.644,1268,0.813,1269,0.813,1270,0.813,1271,0.813,1272,0.813,1273,0.813,1274,0.813,1275,0.813,1276,0.813,1277,0.813,1278,0.813,1279,0.763,1280,0.813,1281,6.167,1282,0.813,1283,0.813,1284,0.813,1285,0.813,1286,0.813,1287,0.813,1288,0.708,1289,0.813,1290,0.813,1291,0.813,1292,0.813,1293,0.813,1294,0.813,1295,0.813,1296,1.514,1297,0.813,1298,1.514,1299,0.813,1300,1.514,1301,0.813,1302,1.514,1303,0.813,1304,0.708,1305,0.813,1306,0.813,1307,0.813,1308,0.708,1309,0.813,1310,0.708,1311,0.813,1312,0.708,1313,0.813,1314,0.708,1315,0.813,1316,0.813,1317,0.813,1318,0.708,1319,0.813,1320,0.708,1321,0.813,1322,0.813,1323,0.813,1324,0.763,1325,0.813,1326,0.763,1327,0.813,1328,0.813,1329,0.813,1330,0.813,1331,0.813,1332,0.813,1333,0.813,1334,0.813,1335,0.813,1336,0.813,1337,0.813,1338,0.813,1339,0.813,1340,0.813,1341,0.813,1342,0.813,1343,0.813,1344,0.813,1345,0.813,1346,0.813,1347,0.813,1348,0.813,1349,0.813,1350,0.813,1351,0.813,1352,0.813,1353,0.813,1354,0.813,1355,0.813,1356,0.813,1357,0.813,1358,0.813,1359,0.813,1360,2.125,1361,0.786,1362,0.813,1363,0.813,1364,0.667,1365,0.813,1366,0.813,1367,0.813,1368,0.813,1369,0.693,1370,1.514,1371,0.813,1372,1.514,1373,0.813,1374,0.813,1375,0.813,1376,0.813,1377,2.662,1378,0.599,1379,0.786,1380,0.813,1381,0.763,1382,0.813,1383,0.813,1384,1.42,1385,0.813,1386,0.813,1387,0.813,1388,1.514,1389,2.662,1390,0.813,1391,0.708,1392,0.813,1393,0.813,1394,0.813,1395,0.813,1396,0.813,1397,0.813,1398,0.813,1399,0.708,1400,0.708,1401,1.514,1402,0.813,1403,0.708,1404,0.813,1405,0.708,1406,0.813,1407,0.813,1408,0.813,1409,0.813,1410,0.813,1411,0.813,1412,0.813,1413,2.662,1414,0.813,1415,0.813,1416,0.813,1417,0.813,1418,0.813,1419,0.813,1420,0.813,1421,0.708,1422,0.708]],["component/30",[1,0.442]],["title/31-1",[476,33.381]],["name/31-1",[]],["text/31-1",[]],["component/31-1",[]],["title/31-2",[1423,46.675]],["name/31-2",[]],["text/31-2",[]],["component/31-2",[]],["title/31-3",[217,27.22,492,27.592]],["name/31-3",[]],["text/31-3",[]],["component/31-3",[]],["title/31-4",[53,26.687,1106,37.315]],["name/31-4",[]],["text/31-4",[]],["component/31-4",[]],["title/31-5",[513,31.749,975,33.288]],["name/31-5",[]],["text/31-5",[]],["component/31-5",[]],["title/31-6",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/31-6",[]],["text/31-6",[]],["component/31-6",[]],["title/31",[12,14.645,61,17.906,402,19.56,492,19.694]],["name/31",[492,0.564,1106,0.763]],["text/31",[1,1.174,10,1.47,12,1.998,14,0.959,20,2.347,21,1.744,24,1.169,28,2.296,33,2.567,49,2.638,53,3.014,61,2.834,65,1.915,68,1.063,74,1.664,94,1.512,103,1.135,108,1.386,124,1.252,128,1.484,164,3.542,166,1.334,169,1.512,197,1.006,206,1.706,209,2.381,217,4.317,218,2.443,220,1.859,221,1.859,222,3.652,223,3.76,226,2.151,242,1.354,257,1.608,263,1.83,286,2.962,287,1.122,289,1.457,294,2.541,295,1.397,297,1.397,311,1.364,322,2.024,329,1.334,356,1.904,364,2.341,368,3.76,372,1.334,377,1.59,396,1.375,402,2.669,409,1.706,413,1.19,439,1.408,491,4.337,492,3.923,493,1.42,494,3.366,497,1.42,513,3.092,514,1.386,515,2.446,546,2.914,633,1.999,645,2.848,655,1.752,759,1.42,765,1.706,812,1.305,813,3.435,831,1.728,880,1.802,890,1.542,896,1.664,898,1.999,912,1.684,915,1.859,969,2.042,974,4.159,975,2.541,977,1.83,979,2.541,980,1.397,981,2.232,991,1.802,996,1.498,1000,3.366,1041,1.859,1094,2.468,1105,2.042,1106,4.662,1121,1.83,1170,1.96,1261,1.999,1423,2.848,1425,1.47,1427,3.366,1428,1.776,1429,2.042,1430,1.776,1431,2.042,1432,1.859,1433,2.346,1434,2.346,1435,1.859,1436,2.267,1437,2.346,1438,2.346,1439,1.891,1440,2.092,1441,2.346,1442,2.042,1443,2.346,1444,2.346,1445,2.042,1446,2.042]],["component/31",[1,0.442]],["title/32-1",[476,33.381]],["name/32-1",[]],["text/32-1",[]],["component/32-1",[]],["title/32-2",[1423,46.675]],["name/32-2",[]],["text/32-2",[]],["component/32-2",[]],["title/32-3",[217,27.22,492,27.592]],["name/32-3",[]],["text/32-3",[]],["component/32-3",[]],["title/32-4",[60,19.025,297,25.127,1447,36.73]],["name/32-4",[]],["text/32-4",[]],["component/32-4",[]],["title/32-5",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/32-5",[]],["text/32-5",[]],["component/32-5",[]],["title/32-6",[218,20.897,505,30.296,517,30.296]],["name/32-6",[]],["text/32-6",[]],["component/32-6",[]],["title/32-7",[223,27.727,249,33.442,1448,36.73]],["name/32-7",[]],["text/32-7",[]],["component/32-7",[]],["title/32-8",[1449,55.157]],["name/32-8",[]],["text/32-8",[]],["component/32-8",[]],["title/32-9",[1450,55.157]],["name/32-9",[]],["text/32-9",[]],["component/32-9",[]],["title/32-10",[52,29.815]],["name/32-10",[]],["text/32-10",[]],["component/32-10",[]],["title/32-11",[392,32.961,1451,44.096]],["name/32-11",[]],["text/32-11",[]],["component/32-11",[]],["title/32",[12,14.645,60,16.302,402,19.56,492,19.694]],["name/32",[60,0.467,492,0.564]],["text/32",[1,0.318,7,3.32,10,0.345,12,1.32,14,0.428,20,0.91,21,0.248,24,0.522,28,0.487,33,0.695,40,0.595,49,0.384,52,0.9,53,0.552,58,0.436,60,1.818,65,0.947,68,0.867,75,1.049,78,0.79,80,0.348,81,0.365,82,0.531,84,1.039,100,0.479,101,1.664,102,0.892,103,0.266,108,0.325,122,0.341,124,1.223,128,0.348,147,0.373,148,1.33,164,1.076,169,0.966,189,0.277,192,0.451,197,0.449,204,0.702,206,0.4,208,1.079,209,0.339,214,0.333,217,1.591,218,0.519,220,0.436,221,0.436,222,0.668,223,1.734,226,0.582,249,2.582,257,1.31,261,0.299,275,0.429,278,0.348,286,1.777,287,1.096,289,0.341,294,0.688,297,0.327,305,0.369,309,0.336,311,0.32,322,1.001,352,2.577,356,0.271,364,0.333,368,0.985,376,0.358,377,0.373,396,0.614,398,1.515,402,0.297,413,0.761,415,0.422,423,0.365,439,1.375,488,0.459,491,2.232,492,1.248,493,0.333,497,0.634,501,0.405,505,1.645,511,0.718,512,0.479,514,0.619,515,1.209,517,1.076,525,0.734,546,1.353,554,1.449,567,0.405,606,0.834,610,0.416,628,0.451,630,0.32,645,1.687,655,0.41,668,1.664,691,0.752,702,0.436,709,0.429,758,0.351,759,0.634,813,1.148,844,0.381,855,1.815,869,0.976,880,2.027,896,0.39,899,0.308,912,0.395,915,0.436,952,1.872,953,0.436,974,0.985,975,0.688,981,0.317,986,0.405,987,0.395,991,0.422,996,0.957,999,0.83,1001,1.815,1018,0.436,1020,0.436,1033,0.429,1034,0.469,1040,1.296,1043,0.451,1049,1.553,1060,0.459,1092,0.373,1094,0.957,1098,1.076,1107,0.381,1116,0.41,1121,0.817,1227,0.911,1229,0.479,1288,0.911,1304,0.479,1308,1.994,1310,0.911,1312,1.994,1314,0.479,1318,0.911,1320,1.305,1378,0.405,1391,1.305,1399,0.479,1400,0.479,1403,0.479,1405,0.479,1421,0.479,1422,0.479,1423,0.771,1425,0.656,1427,0.911,1428,0.416,1429,0.911,1430,0.416,1431,0.479,1432,0.83,1445,0.911,1446,0.479,1447,0.911,1448,1.994,1449,0.911,1450,1.305,1451,1.664,1452,0.49,1453,0.479,1454,1.047,1455,1.047,1456,0.55,1457,1.449,1458,1.047,1459,1.047,1460,0.55,1461,1.047,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.047,1469,0.55,1470,1.047,1471,2.96,1472,0.531,1473,0.55,1474,0.55,1475,0.55,1476,1.188,1477,0.55,1478,0.55,1479,0.502,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.29,1485,0.55,1486,5.348,1487,1.912,1488,2.29,1489,1.499,1490,1.499,1491,1.499,1492,2.29,1493,1.912,1494,2.29,1495,1.912,1496,1.047,1497,1.047,1498,2.638,1499,1.047,1500,1.449,1501,2.29,1502,0.55,1503,1.912,1504,1.047,1505,0.459,1506,1.499,1507,2.96,1508,1.912,1509,1.047,1510,1.499,1511,0.55,1512,0.55,1513,1.912,1514,1.047,1515,1.912,1516,1.449,1517,1.047,1518,1.499,1519,1.499,1520,2.638,1521,0.55,1522,1.047,1523,1.912,1524,0.55,1525,1.499,1526,1.912,1527,1.047,1528,0.55,1529,2.29,1530,2.29,1531,2.638,1532,2.29,1533,1.499,1534,1.912,1535,1.047,1536,1.499,1537,1.912,1538,1.499,1539,1.499,1540,2.96,1541,0.55,1542,1.912,1543,1.912,1544,1.047,1545,0.932,1546,1.912,1547,1.499,1548,2.29,1549,0.55,1550,2.29,1551,0.55,1552,1.047,1553,0.55,1554,1.047,1555,3.257,1556,1.912,1557,1.499,1558,1.499,1559,1.047,1560,1.047,1561,0.55,1562,2.638,1563,1.499,1564,1.912,1565,1.912,1566,1.912,1567,1.278,1568,0.55,1569,1.912,1570,1.047,1571,1.047,1572,1.499,1573,1.912,1574,1.047,1575,1.499,1576,2.29,1577,1.499,1578,1.912,1579,1.499,1580,1.499,1581,1.047,1582,1.912,1583,0.55,1584,1.499,1585,1.047,1586,1.499,1587,1.047,1588,1.912,1589,0.55,1590,1.912,1591,0.55,1592,1.499,1593,1.047,1594,1.912,1595,1.047,1596,1.499,1597,1.912,1598,0.55,1599,1.499,1600,1.499,1601,1.047,1602,1.912,1603,1.047,1604,1.047,1605,1.499,1606,1.047,1607,0.55,1608,1.912,1609,1.499,1610,2.96,1611,1.047,1612,1.047,1613,0.55,1614,1.499,1615,1.912,1616,1.499,1617,0.55,1618,1.047,1619,0.55,1620,1.499,1621,0.55,1622,1.047,1623,1.047,1624,1.047,1625,1.499,1626,0.55,1627,1.912,1628,1.047,1629,1.912,1630,1.499,1631,1.499,1632,1.499,1633,0.55,1634,0.55,1635,1.912,1636,1.499,1637,0.55,1638,1.047,1639,0.55,1640,0.55,1641,1.047,1642,1.912,1643,0.55,1644,0.55,1645,1.047,1646,0.55,1647,1.047,1648,0.55,1649,1.047,1650,1.047,1651,0.55,1652,0.55,1653,1.047,1654,1.912,1655,1.912,1656,0.55,1657,1.047,1658,1.047,1659,0.55,1660,1.047,1661,1.047,1662,0.55,1663,1.499,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.499,1670,2.29,1671,1.047,1672,1.047,1673,1.047,1674,0.55,1675,0.55,1676,1.047,1677,1.499,1678,0.55,1679,0.55,1680,1.047,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.502,1686,1.499,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.047,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.047,1704,1.047,1705,1.047,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.531,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.516,1717,0.55,1718,0.55,1719,0.55,1720,0.479,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.531,1726,0.55,1727,0.817,1728,0.55,1729,0.55,1730,0.55,1731,0.531,1732,0.55,1733,0.531,1734,0.55,1735,0.55,1736,0.55,1737,0.354,1738,0.516,1739,0.502,1740,0.531,1741,0.459,1742,1.047,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.047,1750,0.55,1751,1.047,1752,0.55,1753,0.479,1754,0.55]],["component/32",[1,0.442]],["title/33-1",[476,33.381]],["name/33-1",[]],["text/33-1",[]],["component/33-1",[]],["title/33-2",[82,25.697,226,28.177]],["name/33-2",[]],["text/33-2",[]],["component/33-2",[]],["title/33-3",[227,29.234,392,32.961]],["name/33-3",[]],["text/33-3",[]],["component/33-3",[]],["title/33-4",[227,36.567]],["name/33-4",[]],["text/33-4",[]],["component/33-4",[]],["title/33-5",[264,36.021]],["name/33-5",[]],["text/33-5",[]],["component/33-5",[]],["title/33-6",[439,38.043]],["name/33-6",[]],["text/33-6",[]],["component/33-6",[]],["title/33-7",[227,29.234,390,37.315]],["name/33-7",[]],["text/33-7",[]],["component/33-7",[]],["title/33-8",[227,36.567]],["name/33-8",[]],["text/33-8",[]],["component/33-8",[]],["title/33",[226,35.245]],["name/33",[226,1.026]],["text/33",[7,2.211,12,0.811,14,0.819,22,1.344,24,3.133,28,2.05,31,1.01,32,1.913,44,0.943,49,1.613,52,1.595,60,0.903,61,0.992,65,1.678,82,1.719,84,1.388,122,3.219,124,2.351,125,1.291,140,1.147,147,1.358,148,1.01,159,3.335,162,1.388,169,1.291,189,1.709,197,0.859,217,1.076,218,0.992,226,3.499,227,4.884,229,1.744,234,1.744,235,1.744,236,3.834,237,1.744,238,1.744,239,1.496,241,1.643,242,1.156,243,1.147,259,1.421,264,4.811,278,1.267,285,1.234,287,3.205,295,1.193,309,1.223,314,3.163,322,3.033,351,2.464,356,0.986,364,1.213,373,1.213,390,4.633,392,3.77,413,2.628,422,1.234,429,1.139,436,1.707,439,3.479,461,1.744,493,2.052,497,3.137,511,1.373,515,1.267,554,0.981,561,1.358,585,0.903,610,3.335,626,2.087,627,1.614,628,4.25,745,1.267,812,1.885,813,1.203,842,1.438,890,1.316,895,1.539,908,1.244,952,1.267,953,2.686,974,1.316,979,2.227,980,1.193,996,2.163,999,1.588,1004,1.563,1040,2.297,1049,2.297,1063,1.588,1094,2.812,1099,1.588,1107,1.388,1428,1.517,1435,1.588,1476,1.588,1753,5.044,1755,2.003,1756,1.614,1757,5.181,1758,3.389,1759,2.003,1760,3.389,1761,4.404,1762,2.003,1763,2.003,1764,2.003,1765,3.389,1766,3.389,1767,3.389,1768,1.879,1769,4.257,1770,4.404,1771,1.936,1772,3.389,1773,2.003,1774,1.674,1775,1.421,1776,2.003,1777,2.003,1778,1.936,1779,2.003,1780,2.003,1781,2.003,1782,1.707,1783,2.003,1784,5.007]],["component/33",[1,0.442]],["title/34-1",[744,35.103,745,32.039]],["name/34-1",[]],["text/34-1",[]],["component/34-1",[]],["title/34-2",[148,18.23,585,16.302,1066,28.203,1785,31.473]],["name/34-2",[]],["text/34-2",[]],["component/34-2",[]],["title/34-3",[16,19.476,18,18.393,20,15.048,656,23.298,1204,25.942]],["name/34-3",[]],["text/34-3",[]],["component/34-3",[]],["title/34-4",[630,29.459,1786,46.238]],["name/34-4",[]],["text/34-4",[]],["component/34-4",[]],["title/34-5",[75,27.783,1787,44.096]],["name/34-5",[]],["text/34-5",[]],["component/34-5",[]],["title/34-6",[209,31.194,585,22.84]],["name/34-6",[]],["text/34-6",[]],["component/34-6",[]],["title/34-7",[188,24.776,261,19.694,1788,32.197,1789,34.942]],["name/34-7",[]],["text/34-7",[]],["component/34-7",[]],["title/34-8",[585,22.84,1790,46.238]],["name/34-8",[]],["text/34-8",[]],["component/34-8",[]],["title/34-9",[388,41.638]],["name/34-9",[]],["text/34-9",[]],["component/34-9",[]],["title/34-10",[64,29.652]],["name/34-10",[]],["text/34-10",[]],["component/34-10",[]],["title/34-11",[478,32.341]],["name/34-11",[]],["text/34-11",[]],["component/34-11",[]],["title/34-12",[18,29.459,48,27.592]],["name/34-12",[]],["text/34-12",[]],["component/34-12",[]],["title/34-13",[53,22.229,60,19.025,478,21.536]],["name/34-13",[]],["text/34-13",[]],["component/34-13",[]],["title/34-14",[585,19.025,850,32.418,1791,32.914]],["name/34-14",[]],["text/34-14",[]],["component/34-14",[]],["title/34-15",[56,20.708,579,24.776,583,22.46,980,21.531]],["name/34-15",[]],["text/34-15",[]],["component/34-15",[]],["title/34",[1440,34.279]],["name/34",[1440,0.998]],["text/34",[1,1.663,7,3.344,12,0.632,14,1.118,16,0.961,17,1.036,18,2.121,20,2.084,21,1.233,28,0.727,32,0.881,34,1.873,38,1.422,39,0.807,40,3.114,41,1.735,44,0.735,48,1.987,49,1.001,52,1.716,56,0.894,60,0.704,64,2.049,66,1.944,68,1.653,69,0.888,74,2.587,75,3.237,78,2.307,80,1.729,83,1.853,103,1.765,120,1.44,124,0.833,125,1.006,140,0.894,148,0.787,181,1.939,189,0.787,202,1.07,208,0.881,209,2.246,242,1.578,259,2.587,261,2.984,264,1.554,266,1.853,270,0.862,273,1.107,277,1.28,283,1.036,287,1.308,289,1.698,300,1.094,301,0.945,322,1.909,329,0.888,354,0.953,356,0.769,372,2.074,382,1.28,402,1.479,413,0.792,417,0.953,429,0.888,447,1.07,460,1.199,478,0.797,514,3.486,528,1.237,554,0.764,557,1.036,558,2.822,574,1.28,579,1.07,583,2.266,585,3.09,589,2.243,600,1.425,606,1.521,626,1.684,630,2.121,631,2.762,634,1.39,636,2.266,637,1.684,656,4.035,744,3.45,745,3.465,764,1.359,765,3.184,789,1.082,808,1.834,809,1.237,850,2.101,854,2.101,865,1.258,875,2.133,878,1.199,883,1.305,896,1.939,899,1.532,920,1.199,952,0.987,980,0.93,987,1.963,1040,1.058,1050,0.97,1066,2.133,1099,1.237,1204,2.992,1425,0.978,1440,0.845,1476,1.237,1739,1.425,1741,1.305,1785,2.38,1786,2.496,1787,1.359,1788,1.39,1791,2.133,1792,1.359,1793,1.509,1794,1.561,1795,1.561,1796,1.509,1797,5.386,1798,1.561,1799,1.561,1800,1.561,1801,1.561,1802,1.561,1803,1.561,1804,1.561,1805,1.561,1806,1.561,1807,1.561,1808,2.285,1809,1.561,1810,1.561,1811,2.101,1812,1.464,1813,1.464,1814,1.28,1815,1.509,1816,1.561,1817,1.561,1818,1.359,1819,1.237,1820,1.359,1821,1.182,1822,1.561,1823,2.734,1824,1.561,1825,1.561,1827,1.561,1828,1.561,1829,1.561,1830,1.509,1831,1.561,1832,1.561,1833,1.702,1834,1.702,1835,3.977,1836,1.702,1837,2.167,1839,1.561,1840,1.561,1841,1.561,1842,1.561,1843,1.509,1844,1.561,1845,2.734,1846,2.435,1847,1.561,1848,1.561,1849,1.561,1850,1.561,1975,1.331,2033,1.359,2120,2.243,2139,1.702,2140,1.702,2141,1.702,2142,1.464,2143,1.561,2144,1.702,2145,1.702,2146,1.702,2147,1.702,2148,1.702]],["component/34",[1,0.442]],["title/35-1",[183,38.355,202,34.713]],["name/35-1",[]],["text/35-1",[]],["component/35-1",[]],["title/35-2",[52,23.836,77,32.337]],["name/35-2",[]],["text/35-2",[]],["component/35-2",[]],["title/35-3",[12,20.519,39,26.18]],["name/35-3",[]],["text/35-3",[]],["component/35-3",[]],["title/35-4",[22,33.975,61,25.087]],["name/35-4",[]],["text/35-4",[]],["component/35-4",[]],["title/35-5",[12,17.092,19,26.446,60,19.025]],["name/35-5",[]],["text/35-5",[]],["component/35-5",[]],["title/35-6",[12,20.519,1871,44.096]],["name/35-6",[]],["text/35-6",[]],["component/35-6",[]],["title/35-7",[855,54.971]],["name/35-7",[]],["text/35-7",[]],["component/35-7",[]],["title/35",[478,32.341]],["name/35",[478,0.942]],["text/35",[7,4.336,11,4.122,12,1.279,15,0.757,16,1.944,19,0.816,21,1.423,39,1.203,49,2.308,52,0.612,60,2.567,61,3.12,69,1.794,77,2.452,88,1.421,89,0.763,123,0.816,129,1.671,181,4.038,189,0.656,195,0.699,208,1.781,218,1.152,274,0.972,285,1.944,288,0.677,366,1.631,424,2.502,440,0.681,477,0.831,481,1.133,487,1.067,516,0.902,562,1.067,571,1.613,572,3.714,576,3.69,585,1.991,596,0.763,606,0.724,626,1.433,762,1.133,763,4.27,808,2.117,819,1.133,821,1.067,862,3.274,980,0.775,986,0.958,1263,1,1267,3.044,1837,3.5,1860,3.932,1861,1.159,1865,1.944,1866,2.072,1868,1.22,1871,1.133,1872,1.301,1873,3.841,1874,2.327,1875,3.156,1876,1.301,1877,1.301,1878,1.301,1879,1.301,1880,2.327,1881,3.841,1882,1.595,1883,2.327,1884,2.327,1885,1.301,1886,1.301,1887,5.326,1888,5.326,1889,2.327,1890,1.301,1891,0.985,1892,1.301,1893,1.301,1894,2.327,1895,1.301,1896,1.301,1897,1.301,1898,1.301,1899,4.27,1900,5.693,1901,3.841,1902,5.693,1903,1.301,1904,1.301,1905,1.301,1906,3.602,1907,3.841,1908,3.841,1909,1.301,1910,1.301,1911,1.301,1912,3.841,1913,3.841,1914,1.301,1915,3.156,1916,1.301,1917,1.301,1918,3.156,1919,1.301,1920,1.301,1921,3.156,1922,1.301,1923,1.301,1924,3.156,1925,3.156,1926,1.301,1927,3.156,1928,4.904,1929,1.301,1930,1.301,1931,2.124,1932,2.182,1933,2.327,1934,2.327,1935,2.327,1936,2.327,1937,3.156,1938,2.327,1939,2.327,1940,2.327,1941,2.327,1942,1.301,1943,2.327,1944,1.22,1945,1.301,1946,2.327,1947,2.327,1948,1.301,1949,1.301,1950,1.301,1951,1.301,1952,1.301,1953,1.301,1954,1.301,1955,1.301,1956,1.301,1957,1.301,1958,1.301,1959,1.301,1960,1.188,1961,1.301,1962,1.301,1963,2.327]],["component/35",[1,0.442]],["title/36-1",[64,29.652]],["name/36-1",[]],["text/36-1",[]],["component/36-1",[]],["title/36-2",[14,20.71,1050,31.468]],["name/36-2",[]],["text/36-2",[]],["component/36-2",[]],["title/36-3",[38,21.945,41,20.075,185,22.673]],["name/36-3",[]],["text/36-3",[]],["component/36-3",[]],["title/36",[1964,49.427]],["name/36",[1964,1.439]],["text/36",[1,1.813,7,3.962,10,0.701,13,0.81,14,0.83,15,0.929,17,0.391,24,0.294,27,1.35,28,0.274,31,1.406,32,0.631,34,1.043,36,0.434,38,2.626,39,0.305,41,0.532,43,0.369,44,1.312,48,0.321,49,1.021,60,0.266,61,0.292,62,0.784,64,2.524,65,0.791,66,1.648,68,1.802,75,0.613,78,0.841,81,0.742,82,0.299,83,1.082,89,0.345,103,1.51,110,0.766,117,0.784,120,0.589,123,0.369,130,0.502,138,0.876,154,0.974,166,2.26,185,3.764,186,0.882,187,1.049,188,0.766,189,1.223,191,0.373,197,1.591,200,0.404,202,1.911,226,0.328,240,0.728,242,0.646,243,0.337,251,0.395,258,0.46,259,0.793,261,0.609,264,0.335,266,0.758,270,1.54,280,0.36,287,1.161,288,0.582,290,0.387,296,0.453,297,0.666,299,1.39,301,0.677,303,0.492,304,2.287,305,0.75,310,1.39,312,1.697,317,0.492,321,0.784,329,0.636,354,1.481,356,0.786,357,1.31,365,0.408,372,0.335,373,0.357,374,0.453,381,0.475,388,0.387,391,0.413,406,0.483,411,0.408,413,0.81,417,0.36,418,1.768,420,0.351,422,0.363,429,0.636,440,0.308,445,1.837,446,0.974,447,0.404,452,2.363,458,0.383,469,0.475,474,0.428,475,0.901,486,0.475,493,0.967,516,0.408,546,0.348,553,0.467,554,0.782,556,0.803,558,1.563,579,0.404,581,0.758,585,0.266,593,0.467,596,0.656,602,0.553,604,0.423,605,1.457,606,0.888,616,1.132,619,0.502,626,1.25,630,0.343,633,0.502,636,4.188,637,3.11,639,1.296,652,0.446,657,2.852,659,0.434,758,1.296,759,1.229,771,0.887,784,0.492,788,0.847,789,0.775,806,0.46,808,0.395,812,0.622,813,1.219,831,0.434,842,0.803,844,0.408,854,0.453,857,0.513,868,0.453,869,0.728,870,0.513,877,0.824,890,0.735,895,0.453,899,1.562,909,0.434,912,0.803,918,0.483,920,0.859,966,0.824,978,0.766,995,0.513,1050,0.366,1059,0.502,1064,0.935,1092,1.645,1209,0.475,1234,0.953,1236,3.044,1238,0.502,1248,0.935,1250,1.768,1252,0.974,1263,0.453,1267,4.628,1364,0.483,1369,0.953,1378,1.176,1432,0.467,1442,0.513,1505,2.33,1567,0.502,1685,0.538,1720,0.513,1727,0.873,1737,0.721,1756,0.475,1774,0.935,1775,0.418,1782,0.502,1791,0.873,1808,2.608,1811,0.453,1814,1.31,1819,1.923,1820,0.513,1821,2.363,1870,0.44,1882,0.404,1891,0.446,1965,0.589,1966,0.589,1967,1.081,1968,0.538,1969,1.163,1970,3.121,1971,3.121,1972,3.121,1973,2.03,1974,3.121,1975,2.66,1976,3.958,1977,3.403,1978,3.04,1979,2.788,1980,2.615,1981,3.121,1982,1.457,1983,1.118,1984,1.596,1985,1.497,1986,1.543,1987,1.596,1988,1.741,1989,1.118,1990,0.613,1991,0.642,1992,0.613,1993,0.642,1994,0.642,1997,0.642,1998,0.569,1999,0.642,2000,0.642,2001,0.589,2002,0.589,2003,0.589,2004,1.596,2005,1.596,2006,0.553,2007,0.589,2008,0.589,2009,0.569,2010,0.589,2011,0.589,2012,0.589,2013,0.589,2014,0.553,2015,0.569,2016,0.887,2017,1.665,2018,1.334,2019,0.513,2020,0.513,2021,0.513,2022,1.021,2023,0.502,2024,1.118,2025,0.589,2026,0.538,2027,1.021,2028,0.538,2029,1.021,2030,0.589,2031,1.118,2032,1.118,2033,4.058,2034,3.711,2035,2.03,2036,1.118,2037,1.118,2038,1.596,2039,1.118,2040,1.049,2041,0.589,2042,0.525,2043,0.553,2044,0.569,2045,0.483,2046,0.553,2047,0.513,2048,0.589,2049,0.589,2050,0.589,2051,1.118,2052,1.118,2053,0.513,2054,0.589,2055,0.589,2056,1.118,2057,1.118,2058,0.589,2059,0.589,2060,0.569,2061,0.589,2062,0.589,2063,0.589,2064,2.03,2065,0.589,2066,1.118,2067,0.589,2068,0.974,2069,1.081,2070,0.553,2071,0.589,2072,0.589,2073,0.589,2074,0.642,2075,0.642,2076,0.642,2077,0.642,2078,0.589,2079,0.589,2080,0.513,2081,0.513,2082,0.513,2083,0.513,2084,0.589,2085,0.589,2086,0.589,2087,0.589,2088,0.538,2089,0.589,2090,0.525,2091,0.589,2092,0.46,2093,0.513,2094,0.589,2095,0.538,2096,0.538,2097,0.553,2098,0.589,2099,0.589,2100,0.589,2101,0.589,2102,0.589,2103,0.589,2104,1.118,2105,1.118,2106,4.448,2107,4.448,2108,1.118,2109,0.642,2110,0.642,2111,3.975,2112,1.118,2113,1.118,2114,3.428,2115,1.021,2116,2.788,2117,1.118,2118,1.118,2119,0.569,2120,0.917,2121,0.553,2122,0.589,2123,0.569,2124,0.589,2125,0.589,2126,0.589,2127,0.569,2128,0.589,2129,0.589,2130,0.553,2131,0.589,2132,1.118]],["component/36",[1,0.442]],["title/37-1",[14,17.25,1882,28.914,2092,32.914]],["name/37-1",[]],["text/37-1",[]],["component/37-1",[]],["title/37-2",[585,19.025,1425,26.446,2135,34.005]],["name/37-2",[]],["text/37-2",[]],["component/37-2",[]],["title/37-3",[49,15.455,1737,27.191,1775,29.929]],["name/37-3",[]],["text/37-3",[]],["component/37-3",[]],["title/37-4",[48,19.694,810,28.656,909,26.633,2159,31.473]],["name/37-4",[]],["text/37-4",[]],["component/37-4",[]],["title/37-5",[1854,45.11,2160,48.957]],["name/37-5",[]],["text/37-5",[]],["component/37-5",[]],["title/37",[2161,49.427]],["name/37",[2161,1.439]],["text/37",[1,1.518,7,2.682,12,0.637,14,1.499,18,1.6,21,1.24,24,1.37,28,2.327,38,0.818,41,1.309,44,1.294,48,2.724,49,1.343,52,1.726,60,1.24,61,0.779,63,1.054,64,1.287,65,1.362,66,1.221,68,0.713,76,1.102,81,1.044,84,1.089,85,0.845,88,0.96,89,0.921,90,1.19,93,1.013,103,0.761,108,0.929,117,1.928,141,1.158,185,1.971,189,0.793,196,1.023,197,0.674,208,0.887,218,0.779,226,0.874,241,1.289,259,1.115,263,1.226,270,1.519,287,1.316,288,1.431,294,1.033,297,0.936,300,1.102,301,1.665,311,0.914,314,1.129,315,1.066,329,0.894,351,1.143,354,1.679,365,1.089,371,1.34,372,1.564,375,1.044,377,1.066,388,1.033,391,1.102,413,0.798,417,1.679,429,0.894,440,2.303,445,3.786,447,1.077,448,2.861,470,1.435,515,1.74,524,1.089,549,1.143,557,1.044,558,1.013,569,1.174,581,1.066,585,0.709,596,1.612,606,2.04,626,2.71,630,0.914,636,4.1,637,3.079,649,1.314,652,1.19,658,1.369,659,1.158,691,1.129,744,1.906,745,1.74,759,2.22,765,1.143,774,1.314,788,1.19,789,4.105,808,1.054,809,2.18,810,1.246,812,1.53,813,1.652,824,3.126,844,1.089,868,4.551,869,1.023,875,1.226,877,2.702,886,1.369,899,0.881,909,1.158,978,1.077,1017,1.369,1041,1.246,1082,1.369,1092,1.865,1098,1.129,1166,1.369,1265,1.435,1425,1.724,1430,1.19,1440,0.85,1452,1.4,1737,1.013,1775,1.115,1792,1.369,1818,1.369,1819,1.246,1821,2.777,1865,1.314,1870,2.054,1882,1.077,1891,1.19,1899,3.193,1960,1.435,1964,1.226,2016,1.246,2017,3.008,2018,3.065,2019,1.369,2020,1.369,2021,1.369,2022,1.435,2023,1.34,2026,1.435,2028,1.435,2029,3.348,2045,3.008,2047,2.395,2068,1.369,2080,1.369,2081,1.369,2082,1.369,2083,1.369,2092,1.226,2093,1.369,2120,1.289,2135,4.433,2159,1.369,2160,1.519,2162,2.659,2163,1.572,2164,1.572,2165,1.572,2166,1.4,2167,1.572,2168,1.519,2169,1.572,2170,1.572,2171,1.572,2172,1.572,2173,1.572,2174,1.572,2175,1.435,2176,1.572,2177,1.572,2178,1.519,2179,2.751,2180,1.572,2181,1.572,2182,1.572,2183,1.572,2184,1.572,2185,1.572,2186,1.519,2187,1.572,2188,1.435,2189,1.572,2190,1.474,2191,1.572,2192,1.519,2193,1.572,2194,1.572,2195,1.572,2196,1.572,2197,1.572,2198,1.572,2199,1.714,2200,2.999,2201,1.714,2202,1.714,2203,1.714,2204,1.714,2205,1.714,2206,1.714,2207,1.714,2208,1.714,2209,1.714,2210,1.714,2211,1.714,2212,1.714,2213,1.714,2214,1.714,2215,1.714,2216,1.714,2217,3.999,2218,2.999,2219,1.714,2220,1.714,2221,1.714,2222,3.999,2223,1.635,2224,1.714,2225,1.714]],["component/37",[1,0.442]],["title/38-1",[0,63.355]],["name/38-1",[]],["text/38-1",[]],["component/38-1",[]],["title/38",[1,19.237]],["name/38",[2,1.513]],["text/38",[1,1.735,3,2.916,4,2.437,5,2.916,6,2.916,7,1.244,8,2.916,9,2.916,10,1.828,11,1.998,12,2.866,13,2.338,14,1.885,15,3.324,16,3.52,17,3.06,18,3.324,19,2.889,20,1.387,21,1.315,22,1.956,23,2.818,24,2.296,25,2.538,26,2.916,27,1.622,28,1.357,29,2.662,30,2.392,31,1.47,32,2.601,33,1.936,34,1.498,35,2.275,36,2.148,37,2.538,38,1.517,39,1.507,40,2.62,41,2.72,42,2.916,43,1.828,44,2.169,45,2.044,46,2.392,47,1.897,48,3.114,49,1.068,50,2.916,51,2.735,52,1.372,53,2.428,54,2.485,55,2.392,56,3.274,57,2.839,58,4.53,59,2.311,60,1.315,61,1.444,62,2.044,63,1.956,64,1.365,65,2.283,66,1.295,67,2.275,68,1.322,69,1.658,70,2.35,71,2.735,72,2.916,73,2.311,74,2.068,75,1.599,76,2.044,77,1.861,78,1.536,79,2.916,80,1.844,81,1.936,82,2.338,83,1.977,84,2.021,85,1.567,86,2.916,87,2.437,88,1.78,89,1.709,90,4.328,91,2.538,92,2.916,93,3.684,94,1.879,95,2.311,96,2.916,97,2.916,98,1.546,99,2.916,100,2.538,101,2.538,102,2.485,103,1.411,104,2.916,105,2.916,106,2.916,107,2.392,108,1.723,109,2.597,110,1.998,111,2.916,112,2.916,113,2.538,114,2.735,115,2.916,116,2.818]],["component/38",[1,0.442]],["title/39-1",[117,44.415]],["name/39-1",[]],["text/39-1",[]],["component/39-1",[]],["title/39-2",[118,63.355]],["name/39-2",[]],["text/39-2",[]],["component/39-2",[]],["title/39-3",[119,50.65,120,26.687]],["name/39-3",[]],["text/39-3",[]],["component/39-3",[]],["title/39-4",[121,41.549,122,31.468]],["name/39-4",[]],["text/39-4",[]],["component/39-4",[]],["title/39-5",[13,25.697,121,41.549]],["name/39-5",[]],["text/39-5",[]],["component/39-5",[]],["title/39-6",[123,39.713]],["name/39-6",[]],["text/39-6",[]],["component/39-6",[]],["title/39",[124,27.039,125,32.644]],["name/39",[124,0.553,125,0.667]],["text/39",[1,1.402,13,1.084,14,2.458,16,1.316,18,2.081,21,2.082,28,1.666,31,1.078,34,1.098,38,2.808,39,1.104,40,1.215,41,1.703,43,1.339,49,2.382,56,1.224,57,1.316,61,1.058,64,1.675,66,0.949,68,0.969,69,2.034,80,1.352,82,1.084,83,1.449,85,1.148,88,2.185,94,1.377,103,2.234,107,1.753,108,1.262,117,1.498,120,1.126,122,2.868,123,3.384,124,2.882,125,1.377,126,3.578,127,2.137,128,2.92,129,1.534,130,1.821,131,2.004,132,2.137,133,3.115,134,1.667,135,2.137,136,5.233,137,3.578,138,1.963,139,2.065,140,1.224,141,1.574,142,1.722,143,1.786,144,2.99,145,2.137,146,2.004,147,2.426,148,1.078,149,1.86,150,1.574,151,1.86,152,2.137,153,2.137,154,1.86,155,1.951,156,2.137,157,2.137,158,3.356,159,1.618,160,2.065,161,3.357,162,3.199,163,2.538,164,1.534,165,3.578,166,1.215,167,4.264,168,2.137,169,1.377,170,3.578,171,1.618,172,1.86,173,2.065,174,2.137,175,2.004,176,2.137,177,2.065,178,2.137,179,2.004,180,2.137,181,1.516,182,2.884,183,2.71,184,2.137,185,1.148,186,1.18,187,1.404,188,1.464,189,1.804,190,2.137,191,1.352,192,1.753,193,2.935,194,1.86,195,1.148,196,1.391,197,1.534,198,1.86,200,1.464,202,1.464,203,1.328,204,1.433,205,2.137,206,1.554,207,1.554,208,1.206,209,1.316,210,2.004,211,2.065,212,2.636,213,2.137,214,1.294,215,1.694,216,2.137,217,1.148,218,1.058,219,2.137,220,1.694,221,1.694,222,1.364,223,1.404,224,2.137,225,2.137,226,1.189,227,2.065,228,2.137,229,1.86,230,2.935,231,2.137,232,2.137,233,1.722,234,1.86,235,1.86,236,1.86,237,1.86,238,1.86,239,1.596,240,1.391,241,1.753,242,1.233,243,1.224,249,2.836,250,1.951,251,1.433,252,2.137,253,2.137,254,2.137,255,2.137,256,2.137,257,1.464,258,1.667,259,1.516,260,2.137,261,1.164,262,1.753,263,1.667,264,1.215,265,2.137]],["component/39",[1,0.442]],["title/40-1",[38,21.945,185,22.673,266,28.602]],["name/40-1",[]],["text/40-1",[]],["component/40-1",[]],["title/40-2",[267,31.624,268,30.567,269,31.624,270,17.469,271,28.87]],["name/40-2",[]],["text/40-2",[]],["component/40-2",[]],["title/40-3",[34,21.67,49,15.455,120,22.229]],["name/40-3",[]],["text/40-3",[]],["component/40-3",[]],["title/40-4",[85,22.673,120,22.229,203,26.211]],["name/40-4",[]],["text/40-4",[]],["component/40-4",[]],["title/40-5",[120,26.687,272,43.174]],["name/40-5",[]],["text/40-5",[]],["component/40-5",[]],["title/40-6",[120,26.687,273,35.931]],["name/40-6",[]],["text/40-6",[]],["component/40-6",[]],["title/40-7",[274,37.822,275,39.515]],["name/40-7",[]],["text/40-7",[]],["component/40-7",[]],["title/40-8",[276,42.951]],["name/40-8",[]],["text/40-8",[]],["component/40-8",[]],["title/40",[64,23.706,207,36.832]],["name/40",[120,0.545,273,0.734]],["text/40",[1,0.811,7,1.834,12,0.43,13,0.539,14,0.434,15,0.618,20,0.922,21,1.938,24,0.965,27,0.591,28,0.902,30,0.872,31,1.347,32,1.094,33,0.705,34,0.995,36,1.427,37,0.925,38,1.714,40,1.102,41,0.506,43,0.666,44,0.5,45,0.745,47,1.738,49,1.403,52,1.257,55,0.872,57,0.654,62,0.745,63,2.21,64,2.203,65,1.898,66,2.639,67,0.829,68,2.694,69,1.102,75,1.465,85,1.771,89,1.136,93,0.685,94,0.685,103,2.08,108,0.628,110,0.728,120,3.656,134,0.829,138,1.063,140,2.462,144,0.888,161,0.773,163,2.337,166,1.519,172,0.925,181,1.895,185,4.088,188,1.328,189,0.977,197,1.145,200,0.728,202,0.728,203,4.407,207,0.773,208,1.094,209,0.654,214,0.643,217,0.571,227,1.542,240,0.691,242,0.613,243,0.609,246,0.97,251,0.713,261,0.579,266,2.914,273,2.718,277,3.143,278,1.226,279,1.652,280,3.629,281,3.088,282,0.793,283,1.286,284,0.872,285,0.654,286,1.604,287,1.278,288,1.008,289,0.66,290,1.755,291,2.861,292,2.277,293,0.888,294,1.755,295,1.154,296,2.052,297,0.633,298,1.769,299,0.925,300,1.358,301,0.643,302,0.925,303,1.619,304,2.191,305,1.3,306,1.062,307,0.925,308,1.062,309,0.649,310,0.925,311,1.553,312,3.592,313,0.906,314,0.763,315,1.314,316,0.996,317,0.888,318,1.062,319,1.536,320,1.447,321,0.745,322,1.398,323,2.325,324,1.062,325,0.925,326,1.409,327,2.277,328,1.062,329,1.519,330,1.062,331,1.062,332,1.062,333,1.062,334,1.062,335,1.062,336,1.062,337,1.062,338,1.062,339,1.062,340,1.062,341,1.062,342,1.062,343,1.062,344,1.062,345,1.062,346,1.062,347,1.062,348,1.062,349,1.062,350,0.906,351,0.773,352,1.687,353,0.925,354,1.183,355,1.062,356,0.523,357,1.589,358,1.512,359,1.489,360,0.816,361,1.938,362,2.868,363,0.946,364,1.173,365,1.343,366,1.358,367,0.906,368,1.273,369,0.805,370,1.062,371,0.906,372,1.102,373,1.173,374,0.816,375,2.187,376,1.261,377,1.314,378,0.906,379,2.868,380,1.062,381,4.086,382,1.589,383,1.062,384,1.062,385,2.052,386,0.829,387,1.938,388,1.273,389,1.062,390,0.783,391,0.745,392,0.691,393,3.831,394,1.062,395,1.062,396,1.566,397,1.062,398,0.842,399,1.062,400,0.773,401,1.938,402,1.783,403,1.938,404,1.062,405,2.671,406,1.589,407,0.925,408,0.763,409,0.773,410,1.619,411,0.736,412,1.062,413,1.355,414,0.996,415,1.489,416,1.938,417,0.649,418,0.925,419,1.409,420,1.154,421,1.062,422,0.654,423,0.705,424,0.842,425,0.925,426,1.062,427,0.97,428,0.925,429,0.604,430,1.062,431,0.816,432,1.062,433,0.946,434,1.062,435,1.062,436,0.906,437,1.062,438,1.062,439,0.638,440,0.556,441,0.996,442,1.062,443,1.062,444,1.062,445,0.805,446,0.925,447,0.728,448,0.829,449,1.062,450,1.062,451,1.027,452,0.805,453,1.062,454,0.925,455,1.062,456,1.062,457,1.619,458,0.691,459,1.062,460,0.816,461,0.925,462,1.062,463,1.062,464,1.062,465,0.925,466,1.062,467,1.062,468,1.062,469,0.856,470,0.97,471,1.062,472,1.062,473,0.996,474,0.773,475,0.856]],["component/40",[1,0.442]],["title/41-1",[476,33.381]],["name/41-1",[]],["text/41-1",[]],["component/41-1",[]],["title/41-2",[477,40.448]],["name/41-2",[]],["text/41-2",[]],["component/41-2",[]],["title/41-3",[124,33.822]],["name/41-3",[]],["text/41-3",[]],["component/41-3",[]],["title/41",[478,32.341]],["name/41",[478,0.942]],["text/41",[7,0.791,12,2.613,14,2.468,15,1.078,20,0.882,21,0.836,24,0.924,28,2.292,31,0.935,32,2.779,38,0.964,41,1.51,44,1.493,47,1.206,49,1.804,52,1.493,53,3.18,60,2.496,61,3.195,68,1.438,69,1.804,73,1.469,77,2.655,78,0.977,82,0.941,85,0.996,94,1.195,103,1.535,124,2.629,125,1.195,133,1.614,136,2.762,138,1.017,141,1.366,142,1.494,148,1.6,161,2.307,162,2.882,166,1.054,167,1.315,191,2.007,198,1.614,217,3.243,218,0.918,222,2.026,223,1.218,239,1.384,242,1.07,243,1.062,278,1.173,280,1.132,284,1.521,285,2.561,286,2.497,287,0.887,294,1.218,307,1.614,311,1.078,322,0.97,326,2.307,329,1.054,356,2.048,359,1.424,364,1.122,366,1.3,369,3.149,372,2.365,376,1.206,385,1.424,386,1.446,388,1.218,396,1.087,408,1.331,413,0.941,419,1.348,420,1.104,422,1.142,423,1.231,431,2.438,439,1.113,457,1.549,458,2.065,477,4.535,478,2.514,479,1.854,480,1.854,481,1.614,482,1.384,483,1.854,484,1.854,485,1.739,486,1.494,487,1.521,488,2.651,489,3.173,490,1.854,491,1.271,492,3.869,493,1.122,494,2.762,495,1.854,496,1.854,497,1.122,498,1.854,499,1.854,500,3.797,501,1.366,502,1.692,503,2.896,504,1.854,505,1.331,506,1.614,507,3.797,508,1.854,509,1.348,510,4.039,511,1.271,512,3.621,513,1.989,514,1.095,515,1.173,516,2.199,517,1.331,518,1.549,519,1.854,520,1.58,521,1.692,522,1.792,523,1.854,524,1.285,525,1.3,526,1.854,527,2.762,528,2.515,529,1.271,530,1.614,531,1.854,532,1.854,533,3.067,534,4.159,535,1.792,536,1.854,537,1.854,538,3.149,539,1.854,540,1.854,541,1.854,542,1.854,543,1.854,544,1.854,545,1.854,546,1.095,547,1.854,548,1.58,549,1.348,550,1.854,551,1.424,552,1.854,553,1.469,554,0.908,555,1.692,556,1.331,557,1.231,558,1.195,559,1.854,560,1.854,561,1.257,562,1.521,563,1.854,564,1.854,565,1.854]],["component/41",[1,0.442]],["title/42-1",[7,13.495,440,16.555,623,25.068,636,19.648,637,19.476]],["name/42-1",[]],["text/42-1",[]],["component/42-1",[]],["title/42-2",[1,15.38,638,33.626]],["name/42-2",[]],["text/42-2",[]],["component/42-2",[]],["title/42-3",[478,25.855,639,32.337]],["name/42-3",[]],["text/42-3",[]],["component/42-3",[]],["title/42-4",[195,19.428,196,23.525,572,27.376,639,23.08]],["name/42-4",[]],["text/42-4",[]],["component/42-4",[]],["title/42-5",[1,12.811,440,22.086,640,42.19]],["name/42-5",[]],["text/42-5",[]],["component/42-5",[]],["title/42-6",[1,15.38,641,44.096]],["name/42-6",[]],["text/42-6",[]],["component/42-6",[]],["title/42",[561,28.602,616,29.929,642,36.73]],["name/42",[643,1.844]],["text/42",[1,0.645,7,4.118,10,0.737,13,1.078,21,0.958,27,1.182,28,1.353,32,0.664,34,1.091,40,0.669,44,0.553,49,0.431,52,0.553,63,2.389,66,0.522,69,0.669,74,2.061,75,1.594,83,0.797,85,0.632,93,0.758,103,0.569,110,0.806,123,0.737,128,0.744,149,1.024,166,2.025,167,1.507,169,0.758,194,1.024,195,3.22,196,2.68,199,1.811,204,0.789,240,0.765,243,0.674,251,0.789,257,0.806,261,0.641,270,0.65,274,0.878,276,0.797,288,0.612,309,0.718,315,0.797,321,0.824,329,0.669,354,0.718,356,0.579,362,1.85,417,0.718,420,1.265,425,1.024,429,0.669,440,3.272,454,1.024,458,1.382,477,3.641,478,2.102,497,1.286,509,0.855,525,0.824,538,1.609,551,0.903,554,0.576,561,2.414,572,1.609,574,0.965,581,0.797,596,1.245,618,1.073,623,0.932,631,1.609,636,1.805,637,0.724,638,1.41,639,3.99,641,2.53,642,7.847,644,1.137,645,0.866,646,1.103,647,1.176,648,1.103,649,0.983,650,1.176,651,1.103,652,0.89,653,1.103,654,1.176,655,1.586,656,0.866,657,0.903,658,1.85,659,1.565,660,1.176,661,3.561,662,1.176,663,3.561,664,2.906,665,2.124,666,1.176,667,1.176,668,1.85,669,2.53,670,3.34,671,1.176,672,1.176,673,1.176,674,1.176,675,1.176,677,1.176,678,2.124,679,1.176,680,2.124,681,1.176,682,1.176,683,1.176,684,1.137,685,1.176,686,1.176,687,1.176,688,2.906,689,1.176,690,1.176,691,0.844,692,1.176,693,1.176,694,1.176,695,1.176,696,1.176,697,1.176,698,1.176,699,1.176,700,1.176,701,1.993,702,0.932,704,1.176,705,1.176,706,2.053,707,1.176,708,2.053,709,1.657,710,1.176,711,1.176,712,1.176,713,1.176,714,1.176,715,5.703,716,1.176,717,1.176,718,1.176,719,1.176,720,1.176,721,1.176,722,1.176,723,1.176,724,1.176,725,1.176,726,1.176,727,1.176,728,1.176,729,1.176,730,1.176,731,1.176,732,1.176,733,1.176,734,1.176,735,1.176,736,1.176,737,1.176,738,1.176,739,1.176,740,1.176,741,1.176,742,1.176,743,1.176,744,2.014,745,0.744,746,1.176,747,5.441,748,1.176,749,1.176,750,2.906,751,1.176,752,2.124,753,1.176,754,2.124,755,1.176,756,1.176,757,1.176,758,0.751,759,0.712,760,1.892,761,1.176,762,1.024,763,1.024,764,1.024,765,0.855,766,1.137,767,2.906,768,2.124,769,1.176,770,1.176,771,0.932,772,0.983,773,0.932,774,0.983,775,1.176,776,2.906,777,1.176,778,1.176,779,1.176,780,1.176,781,1.176,782,1.176,783,1.047,784,0.983,785,1.176,786,1.176,787,4.118,788,0.89,789,0.815,790,1.176,791,1.176,792,1.176,793,1.176,794,1.176,795,1.176,796,1.176,797,1.176,798,1.176,799,1.176,800,1.176,801,1.176,802,1.176,803,1.176,804,1.176,805,1.176,806,0.917,807,1.176,808,2.389,809,0.932,810,0.932,811,1.024,812,1.182,813,1.276,814,1.024,815,1.024,2226,1.282,2227,1.361]],["component/42",[1,0.442]],["title/43-1",[195,27.22,571,35.103]],["name/43-1",[]],["text/43-1",[]],["component/43-1",[]],["title/43-2",[20,24.101,195,27.22]],["name/43-2",[]],["text/43-2",[]],["component/43-2",[]],["title/43-3",[195,27.22,571,35.103]],["name/43-3",[]],["text/43-3",[]],["component/43-3",[]],["title/43-4",[478,32.341]],["name/43-4",[]],["text/43-4",[]],["component/43-4",[]],["title/43-5",[276,42.951]],["name/43-5",[]],["text/43-5",[]],["component/43-5",[]],["title/43",[195,27.22,580,37.315]],["name/43",[195,0.991]],["text/43",[7,0.717,11,0.624,12,0.681,13,1.479,14,0.687,15,0.978,16,2.621,17,1.936,18,0.978,19,0.57,20,2.824,21,0.41,22,0.61,24,1.167,27,0.935,28,0.782,31,1.181,32,0.949,33,0.604,34,1.203,35,1.311,39,0.869,40,0.517,41,1.114,43,2.668,44,1.102,45,1.178,46,0.746,47,1.094,48,2.983,49,1.688,53,1.536,57,1.035,59,0.721,60,1.541,63,1.127,64,0.426,65,0.832,66,1.715,76,4.007,77,1.861,80,0.576,82,0.462,88,0.556,89,1.373,91,1.463,94,0.586,95,0.721,98,0.483,103,0.44,108,0.538,122,1.811,123,0.57,128,1.063,129,1.207,134,1.311,140,2.212,141,0.67,148,1.181,150,0.67,151,0.792,159,0.689,162,2.021,163,0.645,167,0.645,171,0.689,183,0.689,185,1.259,189,0.459,191,1.481,195,3.298,203,0.565,204,1.571,206,0.662,214,1.418,218,0.451,233,0.733,240,1.524,242,0.97,258,0.71,264,0.517,272,2.485,276,0.617,280,1.026,282,1.255,283,1.116,285,1.796,286,1.009,287,0.435,288,0.473,294,0.598,295,0.542,296,1.291,301,1.018,302,0.792,305,0.61,311,0.529,313,0.776,315,1.139,320,0.679,322,0.476,323,0.792,326,1.222,329,0.517,350,0.776,353,1.463,356,0.828,358,0.71,359,0.699,366,0.638,367,0.776,373,2.069,374,0.699,375,0.604,376,0.592,377,1.588,379,0.792,385,1.291,386,1.311,392,0.592,396,0.985,400,1.703,402,1.849,407,0.792,409,0.662,411,1.165,417,1.026,419,0.662,420,1.001,422,0.56,423,0.604,424,0.721,429,0.517,452,0.689,460,0.699,465,0.792,474,1.703,476,0.886,477,1.861,478,2.173,482,2.552,493,2.338,497,0.551,509,0.662,510,5.997,514,0.538,520,0.776,524,1.165,527,0.792,528,0.721,529,1.152,530,2.976,538,0.689,548,0.776,549,1.222,551,1.291,554,0.823,557,0.604,569,0.679,571,4.382,575,2.626,579,0.624,581,0.617,585,0.758,591,0.831,596,0.533,611,0.81,627,0.733,630,0.529,637,1.796,638,0.604,747,0.792,758,0.581,772,0.76,816,1.681,817,0.879,818,0.91,819,0.792,820,0.91,821,1.379,822,0.645,823,0.792,824,0.776,825,0.91,826,0.831,827,0.792,828,0.879,829,0.91,830,0.91,831,1.238,832,0.853,833,4.455,834,0.91,835,0.879,836,0.853,837,1.433,838,1.625,839,2.437,840,0.91,841,1.625,842,1.682,843,0.91,844,2.021,845,0.76,846,0.91,847,0.853,848,0.91,849,0.91,850,4.991,851,0.879,852,0.91,853,0.91,854,1.291,855,0.721,856,0.879,857,1.463,858,3.439,859,0.81,860,1.996,861,0.91,862,0.776,863,0.91,864,1.888,865,0.733,866,0.91,867,2.818,868,0.699,869,1.094,870,0.792,871,0.91,872,0.91,873,2.916,874,0.91,875,2.275,876,0.76,877,0.67,878,0.699,879,0.91,880,2.24,881,0.91,882,0.91,883,3.227,884,2.197,885,0.81,886,2.976,887,0.91,888,0.91,889,0.879,890,0.598,891,0.91,892,1.576,893,0.879,894,1.576,895,0.699,896,0.645,897,0.91,898,0.776,899,1.634,900,1.576,901,0.91,902,0.831,903,3.418,904,1.625,905,0.91,906,0.853,907,0.91,908,0.565,909,0.67,910,0.91,911,0.879,912,0.653,913,0.91,914,0.91,915,0.721,916,0.91,917,0.91,918,0.746,919,0.91,920,1.291,921,0.879,922,0.91,923,0.91,924,0.91,925,1.497,926,0.91,927,0.91,928,0.91,929,2.916,930,1.311,931,0.76,932,0.91,933,0.91,934,1.681,935,0.879,936,0.853,937,0.81,938,0.91,939,0.776,940,0.91,941,0.91,942,0.776,943,0.831,944,0.91,945,0.91,946,0.91,947,0.853,948,0.746,949,0.831,950,0.91,951,0.91,952,0.576,953,0.721,954,0.91,955,0.81,956,0.91,957,0.879,958,0.91,959,0.91,960,0.91,961,0.853,962,0.91,963,0.746]],["component/43",[1,0.442]],["title/44-1",[476,33.381]],["name/44-1",[]],["text/44-1",[]],["component/44-1",[]],["title/44-2",[217,22.673,218,20.897,513,26.446]],["name/44-2",[]],["text/44-2",[]],["component/44-2",[]],["title/44-3",[439,30.414,964,40.149]],["name/44-3",[]],["text/44-3",[]],["component/44-3",[]],["title/44-4",[13,25.697,203,31.468]],["name/44-4",[]],["text/44-4",[]],["component/44-4",[]],["title/44-5",[148,25.541,965,37.315]],["name/44-5",[]],["text/44-5",[]],["component/44-5",[]],["title/44-6",[290,33.288,965,37.315]],["name/44-6",[]],["text/44-6",[]],["component/44-6",[]],["title/44-7",[203,31.468,966,37.315]],["name/44-7",[]],["text/44-7",[]],["component/44-7",[]],["title/44-8",[967,44.096,968,40.149]],["name/44-8",[]],["text/44-8",[]],["component/44-8",[]],["title/44",[82,25.697,197,21.719]],["name/44",[197,0.444,969,0.901]],["text/44",[7,2.206,12,0.809,13,2.23,14,2.735,20,2.091,21,1.524,28,1.573,41,1.608,49,2.3,52,0.94,53,1.781,57,1.23,65,0.989,66,0.887,78,1.052,140,2.517,148,1.704,166,1.135,191,2.138,197,2.48,200,1.369,203,3.212,217,3.375,218,1.674,227,3.624,257,1.369,261,1.088,262,1.638,278,2.138,286,3.473,287,0.956,290,1.313,295,1.189,322,2.301,356,0.983,368,1.313,373,1.209,396,1.981,402,1.081,408,2.427,413,1.013,420,1.189,439,4.551,491,5.021,501,1.471,511,3.012,513,3.241,546,1.18,554,0.978,583,1.241,587,2.637,638,1.326,812,1.111,837,1.702,890,2.888,908,1.241,952,4.449,964,3.483,965,1.471,966,2.49,968,3.483,970,1.997,971,1.739,972,1.997,973,1.997,974,2.221,975,3.801,976,5.467,977,1.558,978,1.369,979,1.313,980,1.189,981,1.153,982,1.997,983,4.998,984,1.997,985,1.93,986,1.471,987,1.434,988,4.395,989,3.38,990,4.395,991,1.535,992,1.739,993,3.38,994,1.997,995,2.943,996,2.158,997,1.997,998,1.93,999,1.583,1000,1.739,1001,1.583,1002,3.38,1003,1.739,1004,1.558,1005,1.997,1006,1.997,1007,1.997,1008,1.997,1009,1.997,1010,1.997,1011,1.997,1012,1.997,1013,1.997,1014,1.997,1015,1.739,1016,1.997,1017,1.739,1018,1.583,1019,1.997,1020,1.583,1021,1.997,1022,1.997,1023,1.997,1024,1.997,1025,1.997,1026,1.997,1027,1.997,1028,1.997,1029,1.997,1030,1.997,1031,1.997,1032,1.997,1033,1.558,1034,1.702,1035,3.38,1036,1.997,1037,1.997,1038,3.826,1039,1.997,1040,1.354,1041,1.583,1042,1.739,1043,1.638,1044,1.997,1045,1.739,1046,1.997,1047,1.739,1048,3.38,1049,1.354]],["component/44",[1,0.442]],["title/45-1",[476,33.381]],["name/45-1",[]],["text/45-1",[]],["component/45-1",[]],["title/45-2",[287,24.236,981,29.234]],["name/45-2",[]],["text/45-2",[]],["component/45-2",[]],["title/45-3",[322,26.515,981,29.234]],["name/45-3",[]],["text/45-3",[]],["component/45-3",[]],["title/45-4",[413,25.697,981,29.234]],["name/45-4",[]],["text/45-4",[]],["component/45-4",[]],["title/45-5",[981,29.234,996,32.337]],["name/45-5",[]],["text/45-5",[]],["component/45-5",[]],["title/45-6",[812,23.47,981,24.351,1049,28.602]],["name/45-6",[]],["text/45-6",[]],["component/45-6",[]],["title/45",[215,40.149,1050,31.468]],["name/45",[812,0.576,1050,0.643]],["text/45",[1,1.223,7,3.14,13,2.992,14,2.657,15,1.434,16,1.519,19,1.546,20,3.887,21,2.303,28,1.875,31,2.032,44,1.896,49,2.555,66,1.095,68,1.826,85,3.169,208,1.392,240,1.605,270,1.362,285,1.519,287,1.928,289,1.532,295,3.042,311,1.434,322,1.291,354,1.506,364,1.493,368,1.621,375,2.675,376,3.324,390,1.817,392,1.605,396,3.456,408,1.771,413,1.251,415,1.895,419,3.714,431,1.895,513,2.525,546,1.457,554,1.207,567,1.817,575,1.895,606,1.372,669,5.658,758,1.575,759,3.57,811,2.147,812,2.241,823,3.507,878,1.895,908,1.532,931,2.061,939,2.102,964,4.048,974,1.621,975,3.875,979,3.875,981,3.403,1050,3.663,1051,3.894,1052,2.466,1053,2.466,1054,2.466,1055,2.102,1056,2.384,1057,2.466,1058,4.029,1059,2.102,1060,2.061,1061,3.507,1062,2.313,1063,3.193,1064,3.367,1065,2.466,1066,1.924,1067,3.434,1068,2.466,1069,2.384,1070,5.107,1071,4.029,1072,5.107,1073,2.313,1074,4.029,1075,2.466,1076,2.466,1077,2.466,1078,2.466,1079,4.029,1080,2.466,1081,2.466,1082,3.507,1083,4.029,1084,2.384,1085,2.466,1086,2.147,1087,2.466,1088,2.466,1089,2.466,1090,2.466,1091,2.384,1092,1.672,1093,2.466,1094,1.575,1095,2.313,1096,2.313]],["component/45",[1,0.442]],["title/46-1",[476,33.381]],["name/46-1",[]],["text/46-1",[]],["component/46-1",[]],["title/46",[14,20.71,122,31.468]],["name/46",[2,1.513]],["text/46",[4,2.774,7,3.386,12,2.515,14,2.085,20,2.954,27,1.846,31,1.674,44,1.562,49,3.124,53,2.686,60,2.299,61,2.525,78,2.686,80,2.099,122,3.857,138,1.821,148,1.674,171,2.513,197,1.423,208,1.873,214,2.009,215,2.631,226,1.846,261,1.808,286,1.993,287,1.588,290,2.181,295,3.698,300,3.574,321,2.327,369,2.513,413,1.684,422,2.044,428,2.889,458,2.16,476,1.749,492,2.778,501,4.574,513,4.367,515,3.225,517,2.383,518,2.774,546,3.012,554,2.496,585,1.497,812,2.836,813,3.728,814,2.889,815,2.889,876,2.774,908,2.062,971,2.889,974,4.578,975,3.351,976,2.889,977,3.978,979,2.181,1050,3.168,1055,2.829,1063,2.631,1067,2.829,1086,5.405,1094,2.119,1097,3.319,1098,2.383,1099,4.921,1100,3.319,1101,3.319,1102,3.319,1103,3.319,1104,3.319,1105,2.889,1106,2.445,1107,2.3,1108,3.319]],["component/46",[1,0.442]],["title/47-1",[186,23.305,604,30.296,930,32.914]],["name/47-1",[]],["text/47-1",[]],["component/47-1",[]],["title/47-2",[186,23.305,604,30.296,1109,35.962]],["name/47-2",[]],["text/47-2",[]],["component/47-2",[]],["title/47-3",[186,27.978,1110,40.149]],["name/47-3",[]],["text/47-3",[]],["component/47-3",[]],["title/47-4",[187,41.638]],["name/47-4",[]],["text/47-4",[]],["component/47-4",[]],["title/47-5",[186,27.978,1111,40.149]],["name/47-5",[]],["text/47-5",[]],["component/47-5",[]],["title/47-6",[186,23.305,1111,33.442,1112,42.19]],["name/47-6",[]],["text/47-6",[]],["component/47-6",[]],["title/47-7",[1113,50.219]],["name/47-7",[]],["text/47-7",[]],["component/47-7",[]],["title/47-8",[1114,55.157]],["name/47-8",[]],["text/47-8",[]],["component/47-8",[]],["title/47-9",[197,27.167]],["name/47-9",[]],["text/47-9",[]],["component/47-9",[]],["title/47-10",[197,21.719,325,44.096]],["name/47-10",[]],["text/47-10",[]],["component/47-10",[]],["title/47-11",[197,21.719,1115,50.65]],["name/47-11",[]],["text/47-11",[]],["component/47-11",[]],["title/47-12",[1116,37.822,1117,44.096]],["name/47-12",[]],["text/47-12",[]],["component/47-12",[]],["title/47-13",[297,30.166,1110,40.149]],["name/47-13",[]],["text/47-13",[]],["component/47-13",[]],["title/47-14",[197,21.719,1113,40.149]],["name/47-14",[]],["text/47-14",[]],["component/47-14",[]],["title/47-15",[197,21.719,966,37.315]],["name/47-15",[]],["text/47-15",[]],["component/47-15",[]],["title/47-16",[197,21.719,1118,44.096]],["name/47-16",[]],["text/47-16",[]],["component/47-16",[]],["title/47",[138,27.783,148,25.541]],["name/47",[138,0.568,148,0.522]],["text/47",[7,0.907,12,0.329,14,2.373,19,0.949,20,0.72,21,0.683,27,0.452,28,2.14,31,0.41,39,0.783,40,2.437,41,0.387,43,0.51,47,0.529,49,0.298,53,1.402,56,0.867,65,0.75,68,0.686,76,0.57,78,0.428,82,0.412,85,0.437,93,0.524,124,1.675,129,1.526,138,1.721,140,2.455,148,1.071,166,0.462,186,1.967,187,0.995,188,0.557,189,0.41,197,1.838,200,0.557,209,0.932,214,0.492,217,2.623,218,2.874,223,0.534,227,0.874,264,1.208,276,1.026,279,1.291,286,3.23,287,1.704,290,1.396,291,1.987,292,0.693,297,1.265,301,0.492,309,0.496,322,2.064,326,1.101,356,0.4,365,0.563,368,0.534,372,0.462,376,0.529,391,0.57,396,1.56,398,0.644,402,0.44,409,0.591,410,0.679,411,1.049,413,1.592,429,0.462,447,0.557,469,1.22,491,1.038,497,0.492,505,0.584,506,0.708,511,1.038,514,0.48,529,1.038,546,0.48,554,0.398,557,0.54,558,0.524,598,0.708,606,0.452,630,0.473,638,0.54,645,0.599,659,2.311,691,1.526,702,1.2,709,0.634,806,0.634,827,0.708,842,2.831,845,0.679,869,1.732,890,0.995,908,0.505,930,1.181,942,1.291,952,2.494,965,1.115,967,0.708,968,0.644,979,0.534,986,0.599,987,1.087,992,0.708,996,2.517,1001,0.644,1003,2.317,1004,1.658,1015,1.318,1018,0.644,1020,0.644,1033,0.634,1038,3.432,1040,2.672,1042,0.708,1045,1.318,1047,1.318,1049,2.127,1061,0.708,1092,1.026,1094,0.519,1098,1.526,1107,1.049,1109,1.811,1110,5.018,1111,0.644,1113,0.644,1114,0.708,1116,1.131,1117,1.318,1118,0.708,1119,1.993,1120,0.786,1121,1.181,1122,1.514,1123,0.813,1124,1.514,1125,0.813,1126,1.514,1127,0.813,1128,1.514,1129,0.813,1130,1.514,1131,0.813,1132,1.514,1133,0.813,1134,1.514,1135,0.813,1136,1.514,1137,0.813,1138,0.813,1139,0.813,1140,2.125,1141,0.813,1142,1.514,1143,0.813,1144,0.813,1145,0.813,1146,0.813,1147,0.813,1148,0.813,1149,0.813,1150,0.813,1151,0.813,1152,0.813,1153,0.813,1154,2.125,1155,1.514,1156,2.662,1157,0.813,1158,1.514,1159,1.514,1160,0.813,1161,0.813,1162,2.573,1163,1.514,1164,2.125,1165,3.251,1166,2.731,1167,0.813,1168,1.514,1169,1.514,1170,1.265,1171,0.786,1172,0.813,1173,0.813,1174,0.813,1175,0.813,1176,0.786,1177,1.514,1178,1.514,1179,0.813,1180,1.514,1181,0.813,1182,1.514,1183,0.813,1184,0.813,1185,0.813,1186,0.813,1187,0.813,1188,0.813,1189,0.813,1190,0.813,1191,0.813,1192,0.813,1193,0.813,1194,0.813,1195,0.813,1196,0.813,1197,1.514,1198,0.813,1199,0.813,1200,0.813,1201,0.813,1202,0.813,1203,0.813,1204,1.242,1205,0.813,1206,0.813,1207,0.813,1208,0.813,1209,0.655,1210,0.813,1211,0.813,1212,0.813,1213,0.813,1214,0.813,1215,0.813,1216,0.693,1217,0.813,1218,0.813,1219,0.813,1220,0.813,1221,0.813,1222,0.813,1223,0.813,1224,0.813,1225,0.813,1226,0.813,1227,1.85,1228,0.813,1229,1.85,1230,0.813,1231,0.813,1232,0.813,1233,0.813,1234,0.693,1235,0.813,1236,0.667,1237,0.813,1238,0.693,1239,0.813,1240,0.813,1241,0.763,1242,0.813,1243,0.813,1244,0.813,1245,0.813,1246,0.813,1247,0.813,1248,0.679,1249,0.813,1250,0.708,1251,0.813,1252,0.708,1253,0.813,1254,0.813,1255,0.813,1256,0.813,1257,0.786,1258,0.813,1259,0.786,1260,0.813,1261,0.693,1262,0.813,1263,0.625,1264,0.813,1265,0.742,1266,0.813,1267,0.644,1268,0.813,1269,0.813,1270,0.813,1271,0.813,1272,0.813,1273,0.813,1274,0.813,1275,0.813,1276,0.813,1277,0.813,1278,0.813,1279,0.763,1280,0.813,1281,6.167,1282,0.813,1283,0.813,1284,0.813,1285,0.813,1286,0.813,1287,0.813,1288,0.708,1289,0.813,1290,0.813,1291,0.813,1292,0.813,1293,0.813,1294,0.813,1295,0.813,1296,1.514,1297,0.813,1298,1.514,1299,0.813,1300,1.514,1301,0.813,1302,1.514,1303,0.813,1304,0.708,1305,0.813,1306,0.813,1307,0.813,1308,0.708,1309,0.813,1310,0.708,1311,0.813,1312,0.708,1313,0.813,1314,0.708,1315,0.813,1316,0.813,1317,0.813,1318,0.708,1319,0.813,1320,0.708,1321,0.813,1322,0.813,1323,0.813,1324,0.763,1325,0.813,1326,0.763,1327,0.813,1328,0.813,1329,0.813,1330,0.813,1331,0.813,1332,0.813,1333,0.813,1334,0.813,1335,0.813,1336,0.813,1337,0.813,1338,0.813,1339,0.813,1340,0.813,1341,0.813,1342,0.813,1343,0.813,1344,0.813,1345,0.813,1346,0.813,1347,0.813,1348,0.813,1349,0.813,1350,0.813,1351,0.813,1352,0.813,1353,0.813,1354,0.813,1355,0.813,1356,0.813,1357,0.813,1358,0.813,1359,0.813,1360,2.125,1361,0.786,1362,0.813,1363,0.813,1364,0.667,1365,0.813,1366,0.813,1367,0.813,1368,0.813,1369,0.693,1370,1.514,1371,0.813,1372,1.514,1373,0.813,1374,0.813,1375,0.813,1376,0.813,1377,2.662,1378,0.599,1379,0.786,1380,0.813,1381,0.763,1382,0.813,1383,0.813,1384,1.42,1385,0.813,1386,0.813,1387,0.813,1388,1.514,1389,2.662,1390,0.813,1391,0.708,1392,0.813,1393,0.813,1394,0.813,1395,0.813,1396,0.813,1397,0.813,1398,0.813,1399,0.708,1400,0.708,1401,1.514,1402,0.813,1403,0.708,1404,0.813,1405,0.708,1406,0.813,1407,0.813,1408,0.813,1409,0.813,1410,0.813,1411,0.813,1412,0.813,1413,2.662,1414,0.813,1415,0.813,1416,0.813,1417,0.813,1418,0.813,1419,0.813,1420,0.813,1421,0.708,1422,0.708]],["component/47",[1,0.442]],["title/48-1",[476,33.381]],["name/48-1",[]],["text/48-1",[]],["component/48-1",[]],["title/48-2",[1423,46.675]],["name/48-2",[]],["text/48-2",[]],["component/48-2",[]],["title/48-3",[217,27.22,492,27.592]],["name/48-3",[]],["text/48-3",[]],["component/48-3",[]],["title/48-4",[53,26.687,1106,37.315]],["name/48-4",[]],["text/48-4",[]],["component/48-4",[]],["title/48-5",[513,31.749,975,33.288]],["name/48-5",[]],["text/48-5",[]],["component/48-5",[]],["title/48-6",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/48-6",[]],["text/48-6",[]],["component/48-6",[]],["title/48",[12,14.645,61,17.906,402,19.56,492,19.694]],["name/48",[492,0.564,1106,0.763]],["text/48",[1,1.174,10,1.47,12,1.998,14,0.959,20,2.347,21,1.744,24,1.169,28,2.296,33,2.567,49,2.638,53,3.014,61,2.834,65,1.915,68,1.063,74,1.664,94,1.512,103,1.135,108,1.386,124,1.252,128,1.484,164,3.542,166,1.334,169,1.512,197,1.006,206,1.706,209,2.381,217,4.317,218,2.443,220,1.859,221,1.859,222,3.652,223,3.76,226,2.151,242,1.354,257,1.608,263,1.83,286,2.962,287,1.122,289,1.457,294,2.541,295,1.397,297,1.397,311,1.364,322,2.024,329,1.334,356,1.904,364,2.341,368,3.76,372,1.334,377,1.59,396,1.375,402,2.669,409,1.706,413,1.19,439,1.408,491,4.337,492,3.923,493,1.42,494,3.366,497,1.42,513,3.092,514,1.386,515,2.446,546,2.914,633,1.999,645,2.848,655,1.752,759,1.42,765,1.706,812,1.305,813,3.435,831,1.728,880,1.802,890,1.542,896,1.664,898,1.999,912,1.684,915,1.859,969,2.042,974,4.159,975,2.541,977,1.83,979,2.541,980,1.397,981,2.232,991,1.802,996,1.498,1000,3.366,1041,1.859,1094,2.468,1105,2.042,1106,4.662,1121,1.83,1170,1.96,1261,1.999,1423,2.848,1425,1.47,1427,3.366,1428,1.776,1429,2.042,1430,1.776,1431,2.042,1432,1.859,1433,2.346,1434,2.346,1435,1.859,1436,2.267,1437,2.346,1438,2.346,1439,1.891,1440,2.092,1441,2.346,1442,2.042,1443,2.346,1444,2.346,1445,2.042,1446,2.042]],["component/48",[1,0.442]],["title/49-1",[476,33.381]],["name/49-1",[]],["text/49-1",[]],["component/49-1",[]],["title/49-2",[1423,46.675]],["name/49-2",[]],["text/49-2",[]],["component/49-2",[]],["title/49-3",[217,27.22,492,27.592]],["name/49-3",[]],["text/49-3",[]],["component/49-3",[]],["title/49-4",[60,19.025,297,25.127,1447,36.73]],["name/49-4",[]],["text/49-4",[]],["component/49-4",[]],["title/49-5",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/49-5",[]],["text/49-5",[]],["component/49-5",[]],["title/49-6",[218,20.897,505,30.296,517,30.296]],["name/49-6",[]],["text/49-6",[]],["component/49-6",[]],["title/49-7",[223,27.727,249,33.442,1448,36.73]],["name/49-7",[]],["text/49-7",[]],["component/49-7",[]],["title/49-8",[1449,55.157]],["name/49-8",[]],["text/49-8",[]],["component/49-8",[]],["title/49-9",[1450,55.157]],["name/49-9",[]],["text/49-9",[]],["component/49-9",[]],["title/49-10",[52,29.815]],["name/49-10",[]],["text/49-10",[]],["component/49-10",[]],["title/49-11",[392,32.961,1451,44.096]],["name/49-11",[]],["text/49-11",[]],["component/49-11",[]],["title/49",[12,14.645,60,16.302,402,19.56,492,19.694]],["name/49",[60,0.467,492,0.564]],["text/49",[1,0.318,7,3.32,10,0.345,12,1.32,14,0.428,20,0.91,21,0.248,24,0.522,28,0.487,33,0.695,40,0.595,49,0.384,52,0.9,53,0.552,58,0.436,60,1.818,65,0.947,68,0.867,75,1.049,78,0.79,80,0.348,81,0.365,82,0.531,84,1.039,100,0.479,101,1.664,102,0.892,103,0.266,108,0.325,122,0.341,124,1.223,128,0.348,147,0.373,148,1.33,164,1.076,169,0.966,189,0.277,192,0.451,197,0.449,204,0.702,206,0.4,208,1.079,209,0.339,214,0.333,217,1.591,218,0.519,220,0.436,221,0.436,222,0.668,223,1.734,226,0.582,249,2.582,257,1.31,261,0.299,275,0.429,278,0.348,286,1.777,287,1.096,289,0.341,294,0.688,297,0.327,305,0.369,309,0.336,311,0.32,322,1.001,352,2.577,356,0.271,364,0.333,368,0.985,376,0.358,377,0.373,396,0.614,398,1.515,402,0.297,413,0.761,415,0.422,423,0.365,439,1.375,488,0.459,491,2.232,492,1.248,493,0.333,497,0.634,501,0.405,505,1.645,511,0.718,512,0.479,514,0.619,515,1.209,517,1.076,525,0.734,546,1.353,554,1.449,567,0.405,606,0.834,610,0.416,628,0.451,630,0.32,645,1.687,655,0.41,668,1.664,691,0.752,702,0.436,709,0.429,758,0.351,759,0.634,813,1.148,844,0.381,855,1.815,869,0.976,880,2.027,896,0.39,899,0.308,912,0.395,915,0.436,952,1.872,953,0.436,974,0.985,975,0.688,981,0.317,986,0.405,987,0.395,991,0.422,996,0.957,999,0.83,1001,1.815,1018,0.436,1020,0.436,1033,0.429,1034,0.469,1040,1.296,1043,0.451,1049,1.553,1060,0.459,1092,0.373,1094,0.957,1098,1.076,1107,0.381,1116,0.41,1121,0.817,1227,0.911,1229,0.479,1288,0.911,1304,0.479,1308,1.994,1310,0.911,1312,1.994,1314,0.479,1318,0.911,1320,1.305,1378,0.405,1391,1.305,1399,0.479,1400,0.479,1403,0.479,1405,0.479,1421,0.479,1422,0.479,1423,0.771,1425,0.656,1427,0.911,1428,0.416,1429,0.911,1430,0.416,1431,0.479,1432,0.83,1445,0.911,1446,0.479,1447,0.911,1448,1.994,1449,0.911,1450,1.305,1451,1.664,1452,0.49,1453,0.479,1454,1.047,1455,1.047,1456,0.55,1457,1.449,1458,1.047,1459,1.047,1460,0.55,1461,1.047,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.047,1469,0.55,1470,1.047,1471,2.96,1472,0.531,1473,0.55,1474,0.55,1475,0.55,1476,1.188,1477,0.55,1478,0.55,1479,0.502,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.29,1485,0.55,1486,5.348,1487,1.912,1488,2.29,1489,1.499,1490,1.499,1491,1.499,1492,2.29,1493,1.912,1494,2.29,1495,1.912,1496,1.047,1497,1.047,1498,2.638,1499,1.047,1500,1.449,1501,2.29,1502,0.55,1503,1.912,1504,1.047,1505,0.459,1506,1.499,1507,2.96,1508,1.912,1509,1.047,1510,1.499,1511,0.55,1512,0.55,1513,1.912,1514,1.047,1515,1.912,1516,1.449,1517,1.047,1518,1.499,1519,1.499,1520,2.638,1521,0.55,1522,1.047,1523,1.912,1524,0.55,1525,1.499,1526,1.912,1527,1.047,1528,0.55,1529,2.29,1530,2.29,1531,2.638,1532,2.29,1533,1.499,1534,1.912,1535,1.047,1536,1.499,1537,1.912,1538,1.499,1539,1.499,1540,2.96,1541,0.55,1542,1.912,1543,1.912,1544,1.047,1545,0.932,1546,1.912,1547,1.499,1548,2.29,1549,0.55,1550,2.29,1551,0.55,1552,1.047,1553,0.55,1554,1.047,1555,3.257,1556,1.912,1557,1.499,1558,1.499,1559,1.047,1560,1.047,1561,0.55,1562,2.638,1563,1.499,1564,1.912,1565,1.912,1566,1.912,1567,1.278,1568,0.55,1569,1.912,1570,1.047,1571,1.047,1572,1.499,1573,1.912,1574,1.047,1575,1.499,1576,2.29,1577,1.499,1578,1.912,1579,1.499,1580,1.499,1581,1.047,1582,1.912,1583,0.55,1584,1.499,1585,1.047,1586,1.499,1587,1.047,1588,1.912,1589,0.55,1590,1.912,1591,0.55,1592,1.499,1593,1.047,1594,1.912,1595,1.047,1596,1.499,1597,1.912,1598,0.55,1599,1.499,1600,1.499,1601,1.047,1602,1.912,1603,1.047,1604,1.047,1605,1.499,1606,1.047,1607,0.55,1608,1.912,1609,1.499,1610,2.96,1611,1.047,1612,1.047,1613,0.55,1614,1.499,1615,1.912,1616,1.499,1617,0.55,1618,1.047,1619,0.55,1620,1.499,1621,0.55,1622,1.047,1623,1.047,1624,1.047,1625,1.499,1626,0.55,1627,1.912,1628,1.047,1629,1.912,1630,1.499,1631,1.499,1632,1.499,1633,0.55,1634,0.55,1635,1.912,1636,1.499,1637,0.55,1638,1.047,1639,0.55,1640,0.55,1641,1.047,1642,1.912,1643,0.55,1644,0.55,1645,1.047,1646,0.55,1647,1.047,1648,0.55,1649,1.047,1650,1.047,1651,0.55,1652,0.55,1653,1.047,1654,1.912,1655,1.912,1656,0.55,1657,1.047,1658,1.047,1659,0.55,1660,1.047,1661,1.047,1662,0.55,1663,1.499,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.499,1670,2.29,1671,1.047,1672,1.047,1673,1.047,1674,0.55,1675,0.55,1676,1.047,1677,1.499,1678,0.55,1679,0.55,1680,1.047,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.502,1686,1.499,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.047,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.047,1704,1.047,1705,1.047,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.531,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.516,1717,0.55,1718,0.55,1719,0.55,1720,0.479,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.531,1726,0.55,1727,0.817,1728,0.55,1729,0.55,1730,0.55,1731,0.531,1732,0.55,1733,0.531,1734,0.55,1735,0.55,1736,0.55,1737,0.354,1738,0.516,1739,0.502,1740,0.531,1741,0.459,1742,1.047,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.047,1750,0.55,1751,1.047,1752,0.55,1753,0.479,1754,0.55]],["component/49",[1,0.442]],["title/50-1",[476,33.381]],["name/50-1",[]],["text/50-1",[]],["component/50-1",[]],["title/50-2",[82,25.697,226,28.177]],["name/50-2",[]],["text/50-2",[]],["component/50-2",[]],["title/50-3",[227,29.234,392,32.961]],["name/50-3",[]],["text/50-3",[]],["component/50-3",[]],["title/50-4",[227,36.567]],["name/50-4",[]],["text/50-4",[]],["component/50-4",[]],["title/50-5",[264,36.021]],["name/50-5",[]],["text/50-5",[]],["component/50-5",[]],["title/50-6",[439,38.043]],["name/50-6",[]],["text/50-6",[]],["component/50-6",[]],["title/50-7",[227,29.234,390,37.315]],["name/50-7",[]],["text/50-7",[]],["component/50-7",[]],["title/50-8",[227,36.567]],["name/50-8",[]],["text/50-8",[]],["component/50-8",[]],["title/50",[226,35.245]],["name/50",[226,1.026]],["text/50",[7,2.211,12,0.811,14,0.819,22,1.344,24,3.133,28,2.05,31,1.01,32,1.913,44,0.943,49,1.613,52,1.595,60,0.903,61,0.992,65,1.678,82,1.719,84,1.388,122,3.219,124,2.351,125,1.291,140,1.147,147,1.358,148,1.01,159,3.335,162,1.388,169,1.291,189,1.709,197,0.859,217,1.076,218,0.992,226,3.499,227,4.884,229,1.744,234,1.744,235,1.744,236,3.834,237,1.744,238,1.744,239,1.496,241,1.643,242,1.156,243,1.147,259,1.421,264,4.811,278,1.267,285,1.234,287,3.205,295,1.193,309,1.223,314,3.163,322,3.033,351,2.464,356,0.986,364,1.213,373,1.213,390,4.633,392,3.77,413,2.628,422,1.234,429,1.139,436,1.707,439,3.479,461,1.744,493,2.052,497,3.137,511,1.373,515,1.267,554,0.981,561,1.358,585,0.903,610,3.335,626,2.087,627,1.614,628,4.25,745,1.267,812,1.885,813,1.203,842,1.438,890,1.316,895,1.539,908,1.244,952,1.267,953,2.686,974,1.316,979,2.227,980,1.193,996,2.163,999,1.588,1004,1.563,1040,2.297,1049,2.297,1063,1.588,1094,2.812,1099,1.588,1107,1.388,1428,1.517,1435,1.588,1476,1.588,1753,5.044,1755,2.003,1756,1.614,1757,5.181,1758,3.389,1759,2.003,1760,3.389,1761,4.404,1762,2.003,1763,2.003,1764,2.003,1765,3.389,1766,3.389,1767,3.389,1768,1.879,1769,4.257,1770,4.404,1771,1.936,1772,3.389,1773,2.003,1774,1.674,1775,1.421,1776,2.003,1777,2.003,1778,1.936,1779,2.003,1780,2.003,1781,2.003,1782,1.707,1783,2.003,1784,5.007]],["component/50",[1,0.442]],["title/51-1",[744,35.103,745,32.039]],["name/51-1",[]],["text/51-1",[]],["component/51-1",[]],["title/51-2",[75,27.783,1787,44.096]],["name/51-2",[]],["text/51-2",[]],["component/51-2",[]],["title/51-3",[209,31.194,585,22.84]],["name/51-3",[]],["text/51-3",[]],["component/51-3",[]],["title/51-4",[585,22.84,1790,46.238]],["name/51-4",[]],["text/51-4",[]],["component/51-4",[]],["title/51-5",[388,41.638]],["name/51-5",[]],["text/51-5",[]],["component/51-5",[]],["title/51-6",[64,29.652]],["name/51-6",[]],["text/51-6",[]],["component/51-6",[]],["title/51-7",[478,32.341]],["name/51-7",[]],["text/51-7",[]],["component/51-7",[]],["title/51-8",[18,29.459,48,27.592]],["name/51-8",[]],["text/51-8",[]],["component/51-8",[]],["title/51-9",[53,22.229,60,19.025,478,21.536]],["name/51-9",[]],["text/51-9",[]],["component/51-9",[]],["title/51-10",[585,19.025,850,32.418,1791,32.914]],["name/51-10",[]],["text/51-10",[]],["component/51-10",[]],["title/51",[1440,34.279]],["name/51",[1440,0.998]],["text/51",[1,1.604,4,1.227,7,3.857,11,1.414,12,1.239,14,1.575,17,0.974,18,1.2,20,0.374,21,1.89,22,0.527,24,1.028,27,0.437,28,0.366,31,0.74,32,0.444,34,2.312,38,1.347,39,0.759,40,1.976,41,1.455,44,0.37,48,2.747,49,2.159,51,0.738,52,1.635,53,2.372,54,1.251,60,1.737,61,1.022,64,1.627,65,0.727,66,1.543,67,0.613,68,0.665,69,0.835,74,1.837,75,2.624,76,0.551,77,3.054,78,1.831,80,0.928,82,0.399,83,0.995,85,0.423,88,0.48,103,0.999,120,0.773,123,0.92,124,0.42,128,0.928,140,0.45,147,0.533,155,0.718,158,1.377,159,1.563,166,0.835,169,0.946,179,0.738,181,1.041,185,0.423,189,1.306,193,0.645,195,0.423,196,0.955,197,0.629,202,0.539,204,0.985,208,2.366,209,2.772,214,0.889,218,0.389,239,0.587,242,0.847,251,0.527,261,2.606,262,0.645,264,1.173,266,0.995,270,0.434,273,0.558,278,1.638,280,0.48,282,0.587,283,0.522,287,2.006,288,0.409,289,1.282,291,0.587,295,0.468,300,0.551,301,0.476,305,0.527,314,0.565,317,1.227,321,0.551,322,2.194,356,1.275,360,0.604,365,1.017,372,1.173,382,2.508,388,2.009,391,0.551,402,0.425,413,1.314,417,0.48,420,0.874,422,0.484,429,0.835,440,0.412,441,1.377,447,0.539,458,0.512,473,0.738,474,0.572,477,1.318,478,2.696,485,0.738,514,1.53,516,2.409,517,0.565,518,1.227,524,1.017,525,0.551,528,1.163,529,0.539,554,1.01,557,0.522,558,2.24,561,0.533,571,0.545,574,0.645,575,0.604,576,1.227,583,0.489,585,2.658,586,2.429,587,1.61,589,1.204,600,0.718,606,2.332,624,0.738,626,0.904,631,1.111,634,0.7,636,1.609,637,0.904,656,0.579,657,0.604,691,1.054,744,1.795,745,2.436,760,1.307,764,0.685,765,1.883,771,1.163,789,0.545,808,0.985,809,0.623,813,0.472,832,0.738,850,2.349,854,1.586,860,1.251,865,1.183,883,0.657,896,1.041,899,1.156,900,0.738,948,0.645,952,2.198,963,1.204,987,1.054,996,1.653,1043,0.645,1049,1.756,1050,1.609,1066,0.613,1073,0.738,1096,1.377,1098,1.054,1099,0.623,1216,0.67,1248,0.657,1279,1.377,1378,1.081,1425,0.493,1440,1.401,1727,0.613,1737,0.507,1741,0.657,1785,0.685,1786,0.718,1787,1.797,1788,2.723,1790,1.884,1791,2.385,1792,0.685,1793,0.76,1794,0.786,1795,0.786,1796,0.76,1797,3.516,1798,0.786,1799,0.786,1800,0.786,1801,0.786,1802,0.786,1803,0.786,1804,0.786,1805,0.786,1806,0.786,1807,0.786,1808,1.725,1809,0.786,1810,0.786,1811,1.586,1812,2.429,1813,0.738,1814,0.645,1815,0.76,1816,0.786,1817,0.786,1818,0.685,1819,0.623,1820,0.685,1821,0.595,1822,0.786,1823,0.786,1824,1.468,1825,1.468,1827,0.786,1828,0.786,1829,0.786,1830,0.76,1831,0.786,1832,0.786,1837,1.636,1839,1.468,1840,0.786,1841,0.786,1842,0.786,1843,0.76,1844,0.786,1845,1.468,1846,1.838,1847,1.468,1848,1.468,1849,1.468,1850,0.786,1852,0.818,1853,0.818,1854,0.7,1855,1.527,1856,0.786,1857,0.818,1858,0.818,1859,1.527,1860,1.307,1861,1.307,1862,1.527,1863,1.527,1864,2.147,1865,1.227,1866,1.307,1867,1.419,1869,0.818,1870,1.096,1906,0.738,1998,0.76,2014,0.738,2016,0.623,2027,1.34,2043,0.738,2142,1.377,2143,0.786,2228,0.818,2229,1.699,2230,1.699,2231,1.699,2232,2.251,2233,0.91,2234,0.91,2235,0.91,2236,0.91,2237,0.91,2238,0.786,2239,0.91,2240,0.91,2241,1.699,2242,0.91,2243,0.91,2244,0.91,2245,0.738,2246,0.91,2247,0.91,2248,0.91,2249,1.527,2250,0.818,2251,0.818,2252,0.818,2253,0.818,2254,0.818,2255,0.91,2256,0.91,2257,0.858,2258,0.76,2259,0.858,2260,0.91,2261,0.858,2262,0.91,2263,0.91]],["component/51",[1,0.442]],["title/52-1",[183,38.355,202,34.713]],["name/52-1",[]],["text/52-1",[]],["component/52-1",[]],["title/52-2",[52,23.836,77,32.337]],["name/52-2",[]],["text/52-2",[]],["component/52-2",[]],["title/52-3",[12,20.519,39,26.18]],["name/52-3",[]],["text/52-3",[]],["component/52-3",[]],["title/52-4",[22,33.975,61,25.087]],["name/52-4",[]],["text/52-4",[]],["component/52-4",[]],["title/52-5",[12,17.092,19,26.446,60,19.025]],["name/52-5",[]],["text/52-5",[]],["component/52-5",[]],["title/52-6",[12,20.519,1871,44.096]],["name/52-6",[]],["text/52-6",[]],["component/52-6",[]],["title/52-7",[855,54.971]],["name/52-7",[]],["text/52-7",[]],["component/52-7",[]],["title/52",[478,32.341]],["name/52",[478,0.942]],["text/52",[7,4.336,11,4.122,12,1.279,15,0.757,16,1.944,19,0.816,21,1.423,39,1.203,49,2.308,52,0.612,60,2.567,61,3.12,69,1.794,77,2.452,88,1.421,89,0.763,123,0.816,129,1.671,181,4.038,189,0.656,195,0.699,208,1.781,218,1.152,274,0.972,285,1.944,288,0.677,366,1.631,424,2.502,440,0.681,477,0.831,481,1.133,487,1.067,516,0.902,562,1.067,571,1.613,572,3.714,576,3.69,585,1.991,596,0.763,606,0.724,626,1.433,762,1.133,763,4.27,808,2.117,819,1.133,821,1.067,862,3.274,980,0.775,986,0.958,1263,1,1267,3.044,1837,3.5,1860,3.932,1861,1.159,1865,1.944,1866,2.072,1868,1.22,1871,1.133,1872,1.301,1873,3.841,1874,2.327,1875,3.156,1876,1.301,1877,1.301,1878,1.301,1879,1.301,1880,2.327,1881,3.841,1882,1.595,1883,2.327,1884,2.327,1885,1.301,1886,1.301,1887,5.326,1888,5.326,1889,2.327,1890,1.301,1891,0.985,1892,1.301,1893,1.301,1894,2.327,1895,1.301,1896,1.301,1897,1.301,1898,1.301,1899,4.27,1900,5.693,1901,3.841,1902,5.693,1903,1.301,1904,1.301,1905,1.301,1906,3.602,1907,3.841,1908,3.841,1909,1.301,1910,1.301,1911,1.301,1912,3.841,1913,3.841,1914,1.301,1915,3.156,1916,1.301,1917,1.301,1918,3.156,1919,1.301,1920,1.301,1921,3.156,1922,1.301,1923,1.301,1924,3.156,1925,3.156,1926,1.301,1927,3.156,1928,4.904,1929,1.301,1930,1.301,1931,2.124,1932,2.182,1933,2.327,1934,2.327,1935,2.327,1936,2.327,1937,3.156,1938,2.327,1939,2.327,1940,2.327,1941,2.327,1942,1.301,1943,2.327,1944,1.22,1945,1.301,1946,2.327,1947,2.327,1948,1.301,1949,1.301,1950,1.301,1951,1.301,1952,1.301,1953,1.301,1954,1.301,1955,1.301,1956,1.301,1957,1.301,1958,1.301,1959,1.301,1960,1.188,1961,1.301,1962,1.301,1963,2.327]],["component/52",[1,0.442]],["title/53-1",[288,32.954]],["name/53-1",[]],["text/53-1",[]],["component/53-1",[]],["title/53",[476,33.381]],["name/53",[476,0.972]],["text/53",[1,2.15,10,3.768,11,4.119,12,2.435,13,3.592,14,1.691,15,2.406,16,2.547,17,2.746,18,3.496,19,3.768,20,2.86,21,1.865,31,2.086,34,2.124,36,3.047,44,1.946,58,3.279,59,3.279,60,1.865,61,2.049,64,2.813,66,2.669,68,3.21,80,2.616,84,4.166,95,3.279,108,2.444,124,2.208,138,2.269,140,2.369,163,4.264,164,2.97,169,2.666,171,3.132,185,2.223,186,2.285,187,2.718,188,2.835,251,4.032,285,2.547,360,3.178,440,2.165,514,2.444,525,4.214,551,3.178,553,3.279,554,2.025,567,3.047,610,3.132,656,3.047,774,3.457,878,3.178,899,2.317,1209,3.334,1785,5.233,1814,3.393,2070,3.879,2264,4.789,2265,4.51,2266,4.789,2267,4.51,2268,4.789,2269,4.789]],["component/53",[1,0.442]],["title/54-1",[64,29.652]],["name/54-1",[]],["text/54-1",[]],["component/54-1",[]],["title/54-2",[14,20.71,1050,31.468]],["name/54-2",[]],["text/54-2",[]],["component/54-2",[]],["title/54-3",[38,21.945,41,20.075,185,22.673]],["name/54-3",[]],["text/54-3",[]],["component/54-3",[]],["title/54",[1964,49.427]],["name/54",[1964,1.439]],["text/54",[1,1.699,7,3.878,13,0.958,14,0.974,15,0.777,17,0.472,24,0.354,27,1.571,31,1.201,32,0.754,34,0.97,36,0.524,38,2.911,39,0.367,41,0.635,44,1.12,48,0.387,49,1.034,60,0.32,61,0.352,62,0.936,64,2.53,65,0.935,66,1.254,68,1.625,75,0.732,78,0.703,81,0.886,82,0.361,83,1.28,89,0.417,103,1.735,110,0.915,117,0.936,120,0.703,130,0.606,138,1.036,154,1.162,166,2.226,185,3.564,186,0.737,187,0.877,188,0.915,189,0.952,191,0.45,197,1.808,200,0.487,202,1.294,226,0.395,240,0.869,242,0.771,243,0.407,251,0.477,258,0.554,259,0.947,261,0.727,264,0.404,266,0.905,270,1.315,280,0.434,287,1.351,288,0.694,290,0.467,296,0.546,297,0.795,299,1.644,301,0.808,303,0.594,304,2.316,305,0.477,310,1.162,312,1.99,317,0.594,321,0.936,329,0.759,354,1.153,356,0.93,357,1.095,365,0.493,372,0.404,373,0.43,374,0.546,381,0.573,388,0.467,391,0.498,406,0.583,411,0.493,417,0.434,418,1.162,420,0.423,422,0.438,429,0.759,440,0.372,445,1.803,446,1.162,447,0.487,452,2.714,458,0.462,474,0.517,475,1.076,486,0.573,493,0.808,516,0.493,546,0.42,553,0.563,554,0.924,556,0.959,558,1.217,579,0.487,581,0.905,585,0.32,593,0.563,596,0.783,604,0.51,605,1.724,606,1.05,616,0.947,619,0.606,626,1.466,630,0.413,636,4.12,637,3.204,639,1.205,657,1.451,659,0.524,758,1.52,759,1.143,771,1.058,784,0.594,788,1.011,789,0.925,806,0.554,808,0.477,812,0.743,813,0.802,831,0.524,842,0.959,854,0.546,857,0.619,868,0.546,869,0.462,877,0.984,890,0.877,895,0.546,899,1.582,909,0.524,912,0.959,918,0.583,920,1.026,966,0.984,978,0.487,995,0.619,1050,0.442,1059,0.606,1064,1.116,1092,1.914,1209,0.573,1234,1.138,1236,2.316,1238,0.606,1248,1.116,1250,2.073,1252,1.162,1263,0.546,1267,4.124,1364,0.583,1369,1.138,1378,1.391,1432,0.563,1442,0.619,1505,1.99,1567,0.606,1720,0.619,1727,0.554,1737,0.86,1756,0.573,1774,1.116,1775,0.504,1782,0.606,1791,1.042,1808,1.99,1811,0.546,1814,1.095,1819,2.238,1820,0.619,1821,2.44,1870,0.531,1882,0.487,1891,0.538,1965,0.711,1966,0.711,1967,0.687,1970,2.381,1971,2.381,1972,2.381,1973,1.335,1974,2.381,1975,2.03,1976,3.954,1979,2.381,1980,2.233,1981,2.381,1982,1.219,1983,0.711,1984,1.335,1985,1.252,1986,1.29,1987,1.335,1989,0.711,2001,0.711,2002,0.711,2003,0.711,2004,1.888,2005,1.888,2006,0.667,2007,0.711,2008,0.711,2009,1.29,2010,0.711,2011,0.711,2012,0.711,2013,0.711,2014,0.667,2015,0.687,2016,1.058,2017,1.953,2018,1.578,2019,0.619,2020,0.619,2021,0.619,2022,1.219,2023,0.606,2024,1.335,2025,0.711,2026,0.649,2027,1.219,2028,0.649,2029,1.219,2030,0.711,2031,1.335,2032,1.335,2033,4.53,2034,4.216,2035,2.381,2036,1.335,2037,1.335,2038,1.888,2039,1.335,2040,1.252,2041,0.711,2042,0.633,2043,0.667,2044,0.687,2045,0.583,2046,0.667,2047,0.619,2048,0.711,2049,0.711,2050,0.711,2051,1.335,2052,1.335,2053,0.619,2054,0.711,2055,0.711,2056,1.335,2057,1.335,2058,0.711,2059,0.711,2060,0.687,2061,0.711,2062,0.711,2063,0.711,2064,2.381,2065,0.711,2066,1.335,2067,0.711,2068,1.162,2069,1.29,2070,0.667,2071,0.711,2072,0.711,2073,0.711,2078,0.711,2079,0.711,2080,0.619,2081,0.619,2082,0.619,2083,0.619,2084,0.711,2085,0.711,2086,0.711,2087,0.711,2088,0.649,2089,0.711,2090,0.633,2091,0.711,2092,0.554,2093,0.619,2094,0.711,2095,0.649,2096,0.649,2097,0.667,2098,0.711,2099,0.711,2100,0.711,2101,0.711,2102,0.711,2103,0.711,2104,1.335,2105,1.335,2106,4.984,2107,4.984,2108,1.335,2111,4.493,2112,1.335,2113,1.335,2114,3.914,2115,1.219,2116,3.223,2117,1.335,2118,1.335,2119,0.687,2120,1.095,2121,0.667,2122,0.711,2123,0.687,2124,0.711,2125,0.711,2126,0.711,2127,0.687,2128,0.711,2129,0.711,2130,0.667,2131,0.711,2132,1.335,2270,2.757,2271,2.757,2272,1.546,2273,0.775]],["component/54",[1,0.442]],["title/55-1",[14,17.25,1882,28.914,2092,32.914]],["name/55-1",[]],["text/55-1",[]],["component/55-1",[]],["title/55-2",[585,19.025,1425,26.446,2135,34.005]],["name/55-2",[]],["text/55-2",[]],["component/55-2",[]],["title/55-3",[49,15.455,1737,27.191,1775,29.929]],["name/55-3",[]],["text/55-3",[]],["component/55-3",[]],["title/55-4",[48,19.694,810,28.656,909,26.633,2159,31.473]],["name/55-4",[]],["text/55-4",[]],["component/55-4",[]],["title/55",[2161,49.427]],["name/55",[2161,1.439]],["text/55",[1,1.729,7,2.818,12,0.788,14,1.762,18,1.922,21,1.49,24,1.647,28,2.366,38,1.012,41,1.573,44,1.555,48,3.102,49,1.579,52,1.555,60,1.49,61,0.963,64,1.547,65,1.637,66,1.468,76,1.364,84,1.348,85,1.045,88,1.188,89,1.14,90,1.473,93,1.254,103,0.941,108,1.149,117,2.317,185,2.316,189,0.981,196,1.266,197,0.834,218,0.963,226,1.082,259,1.38,263,1.517,270,1.826,288,1.719,294,1.278,297,1.158,300,1.364,301,2.001,311,1.131,315,1.319,351,1.414,354,2.018,365,1.348,371,1.658,372,1.879,377,1.319,388,1.278,391,1.364,417,1.188,429,1.106,440,1.73,445,2.503,447,1.333,448,3.363,515,1.23,524,1.348,549,1.414,557,1.291,558,1.254,569,1.452,581,1.319,585,0.877,606,2.398,626,2.654,630,1.131,636,4.503,637,3.507,649,1.625,652,1.473,659,1.433,691,1.397,744,2.291,745,2.091,759,2.61,765,1.414,774,1.625,788,1.473,789,3.947,808,1.305,809,1.542,810,1.542,812,1.839,813,1.985,824,3.674,844,1.348,868,5.075,869,1.266,877,1.433,886,1.693,899,1.09,909,1.433,978,1.333,1017,1.693,1041,1.542,1092,2.241,1098,1.397,1166,1.693,1425,1.219,1430,1.473,1440,1.052,1737,1.254,1775,1.38,1792,1.693,1818,1.693,1819,1.542,1821,3.264,1870,2.468,1882,1.333,1891,1.473,1899,3.752,1964,1.517,2016,1.542,2017,2.711,2018,3.602,2019,1.693,2020,1.693,2021,1.693,2023,1.658,2045,2.711,2047,2.878,2068,1.693,2080,1.693,2081,1.693,2082,1.693,2083,1.693,2092,1.517,2093,1.693,2120,1.596,2135,4.991,2159,1.693,2162,3.195,2163,1.945,2164,1.945,2165,1.945,2166,1.732,2167,1.945,2168,1.88,2169,1.945,2170,1.945,2171,1.945,2172,1.945,2173,1.945,2174,1.945,2175,1.776,2176,1.945,2177,1.945,2178,1.88,2179,1.945,2180,1.945,2181,1.945,2182,1.945,2183,1.945,2184,1.945,2185,1.945,2186,1.88,2187,1.945,2188,1.776,2189,1.945,2190,1.824,2191,1.945,2192,1.88,2193,1.945,2194,1.945,2195,1.945,2196,1.945,2197,1.945,2198,1.945]],["component/55",[1,0.442]],["title/56-1",[0,63.355]],["name/56-1",[]],["text/56-1",[]],["component/56-1",[]],["title/56",[1,19.237]],["name/56",[2,1.513]],["text/56",[1,1.735,3,2.916,4,2.437,5,2.916,6,2.916,7,1.244,8,2.916,9,2.916,10,1.828,11,1.998,12,2.866,13,2.338,14,1.885,15,3.324,16,3.52,17,3.06,18,3.324,19,2.889,20,1.387,21,1.315,22,1.956,23,2.818,24,2.296,25,2.538,26,2.916,27,1.622,28,1.357,29,2.662,30,2.392,31,1.47,32,2.601,33,1.936,34,1.498,35,2.275,36,2.148,37,2.538,38,1.517,39,1.507,40,2.62,41,2.72,42,2.916,43,1.828,44,2.169,45,2.044,46,2.392,47,1.897,48,3.114,49,1.068,50,2.916,51,2.735,52,1.372,53,2.428,54,2.485,55,2.392,56,3.274,57,2.839,58,4.53,59,2.311,60,1.315,61,1.444,62,2.044,63,1.956,64,1.365,65,2.283,66,1.295,67,2.275,68,1.322,69,1.658,70,2.35,71,2.735,72,2.916,73,2.311,74,2.068,75,1.599,76,2.044,77,1.861,78,1.536,79,2.916,80,1.844,81,1.936,82,2.338,83,1.977,84,2.021,85,1.567,86,2.916,87,2.437,88,1.78,89,1.709,90,4.328,91,2.538,92,2.916,93,3.684,94,1.879,95,2.311,96,2.916,97,2.916,98,1.546,99,2.916,100,2.538,101,2.538,102,2.485,103,1.411,104,2.916,105,2.916,106,2.916,107,2.392,108,1.723,109,2.597,110,1.998,111,2.916,112,2.916,113,2.538,114,2.735,115,2.916,116,2.818]],["component/56",[1,0.442]],["title/57-1",[117,44.415]],["name/57-1",[]],["text/57-1",[]],["component/57-1",[]],["title/57-2",[118,63.355]],["name/57-2",[]],["text/57-2",[]],["component/57-2",[]],["title/57-3",[119,50.65,120,26.687]],["name/57-3",[]],["text/57-3",[]],["component/57-3",[]],["title/57-4",[121,41.549,122,31.468]],["name/57-4",[]],["text/57-4",[]],["component/57-4",[]],["title/57-5",[13,25.697,121,41.549]],["name/57-5",[]],["text/57-5",[]],["component/57-5",[]],["title/57-6",[123,39.713]],["name/57-6",[]],["text/57-6",[]],["component/57-6",[]],["title/57",[124,27.039,125,32.644]],["name/57",[124,0.553,125,0.667]],["text/57",[1,1.402,13,1.084,14,2.458,16,1.316,18,2.081,21,2.082,28,1.666,31,1.078,34,1.098,38,2.808,39,1.104,40,1.215,41,1.703,43,1.339,49,2.382,56,1.224,57,1.316,61,1.058,64,1.675,66,0.949,68,0.969,69,2.034,80,1.352,82,1.084,83,1.449,85,1.148,88,2.185,94,1.377,103,2.234,107,1.753,108,1.262,117,1.498,120,1.126,122,2.868,123,3.384,124,2.882,125,1.377,126,3.578,127,2.137,128,2.92,129,1.534,130,1.821,131,2.004,132,2.137,133,3.115,134,1.667,135,2.137,136,5.233,137,3.578,138,1.963,139,2.065,140,1.224,141,1.574,142,1.722,143,1.786,144,2.99,145,2.137,146,2.004,147,2.426,148,1.078,149,1.86,150,1.574,151,1.86,152,2.137,153,2.137,154,1.86,155,1.951,156,2.137,157,2.137,158,3.356,159,1.618,160,2.065,161,3.357,162,3.199,163,2.538,164,1.534,165,3.578,166,1.215,167,4.264,168,2.137,169,1.377,170,3.578,171,1.618,172,1.86,173,2.065,174,2.137,175,2.004,176,2.137,177,2.065,178,2.137,179,2.004,180,2.137,181,1.516,182,2.884,183,2.71,184,2.137,185,1.148,186,1.18,187,1.404,188,1.464,189,1.804,190,2.137,191,1.352,192,1.753,193,2.935,194,1.86,195,1.148,196,1.391,197,1.534,198,1.86,200,1.464,202,1.464,203,1.328,204,1.433,205,2.137,206,1.554,207,1.554,208,1.206,209,1.316,210,2.004,211,2.065,212,2.636,213,2.137,214,1.294,215,1.694,216,2.137,217,1.148,218,1.058,219,2.137,220,1.694,221,1.694,222,1.364,223,1.404,224,2.137,225,2.137,226,1.189,227,2.065,228,2.137,229,1.86,230,2.935,231,2.137,232,2.137,233,1.722,234,1.86,235,1.86,236,1.86,237,1.86,238,1.86,239,1.596,240,1.391,241,1.753,242,1.233,243,1.224,249,2.836,250,1.951,251,1.433,252,2.137,253,2.137,254,2.137,255,2.137,256,2.137,257,1.464,258,1.667,259,1.516,260,2.137,261,1.164,262,1.753,263,1.667,264,1.215,265,2.137]],["component/57",[1,0.442]],["title/58-1",[38,21.945,185,22.673,266,28.602]],["name/58-1",[]],["text/58-1",[]],["component/58-1",[]],["title/58-2",[267,31.624,268,30.567,269,31.624,270,17.469,271,28.87]],["name/58-2",[]],["text/58-2",[]],["component/58-2",[]],["title/58-3",[34,21.67,49,15.455,120,22.229]],["name/58-3",[]],["text/58-3",[]],["component/58-3",[]],["title/58-4",[85,22.673,120,22.229,203,26.211]],["name/58-4",[]],["text/58-4",[]],["component/58-4",[]],["title/58-5",[120,26.687,272,43.174]],["name/58-5",[]],["text/58-5",[]],["component/58-5",[]],["title/58-6",[120,26.687,273,35.931]],["name/58-6",[]],["text/58-6",[]],["component/58-6",[]],["title/58-7",[274,37.822,275,39.515]],["name/58-7",[]],["text/58-7",[]],["component/58-7",[]],["title/58-8",[276,42.951]],["name/58-8",[]],["text/58-8",[]],["component/58-8",[]],["title/58",[64,23.706,207,36.832]],["name/58",[120,0.545,273,0.734]],["text/58",[1,0.811,7,1.834,12,0.43,13,0.539,14,0.434,15,0.618,20,0.922,21,1.938,24,0.965,27,0.591,28,0.902,30,0.872,31,1.347,32,1.094,33,0.705,34,0.995,36,1.427,37,0.925,38,1.714,40,1.102,41,0.506,43,0.666,44,0.5,45,0.745,47,1.738,49,1.403,52,1.257,55,0.872,57,0.654,62,0.745,63,2.21,64,2.203,65,1.898,66,2.639,67,0.829,68,2.694,69,1.102,75,1.465,85,1.771,89,1.136,93,0.685,94,0.685,103,2.08,108,0.628,110,0.728,120,3.656,134,0.829,138,1.063,140,2.462,144,0.888,161,0.773,163,2.337,166,1.519,172,0.925,181,1.895,185,4.088,188,1.328,189,0.977,197,1.145,200,0.728,202,0.728,203,4.407,207,0.773,208,1.094,209,0.654,214,0.643,217,0.571,227,1.542,240,0.691,242,0.613,243,0.609,246,0.97,251,0.713,261,0.579,266,2.914,273,2.718,277,3.143,278,1.226,279,1.652,280,3.629,281,3.088,282,0.793,283,1.286,284,0.872,285,0.654,286,1.604,287,1.278,288,1.008,289,0.66,290,1.755,291,2.861,292,2.277,293,0.888,294,1.755,295,1.154,296,2.052,297,0.633,298,1.769,299,0.925,300,1.358,301,0.643,302,0.925,303,1.619,304,2.191,305,1.3,306,1.062,307,0.925,308,1.062,309,0.649,310,0.925,311,1.553,312,3.592,313,0.906,314,0.763,315,1.314,316,0.996,317,0.888,318,1.062,319,1.536,320,1.447,321,0.745,322,1.398,323,2.325,324,1.062,325,0.925,326,1.409,327,2.277,328,1.062,329,1.519,330,1.062,331,1.062,332,1.062,333,1.062,334,1.062,335,1.062,336,1.062,337,1.062,338,1.062,339,1.062,340,1.062,341,1.062,342,1.062,343,1.062,344,1.062,345,1.062,346,1.062,347,1.062,348,1.062,349,1.062,350,0.906,351,0.773,352,1.687,353,0.925,354,1.183,355,1.062,356,0.523,357,1.589,358,1.512,359,1.489,360,0.816,361,1.938,362,2.868,363,0.946,364,1.173,365,1.343,366,1.358,367,0.906,368,1.273,369,0.805,370,1.062,371,0.906,372,1.102,373,1.173,374,0.816,375,2.187,376,1.261,377,1.314,378,0.906,379,2.868,380,1.062,381,4.086,382,1.589,383,1.062,384,1.062,385,2.052,386,0.829,387,1.938,388,1.273,389,1.062,390,0.783,391,0.745,392,0.691,393,3.831,394,1.062,395,1.062,396,1.566,397,1.062,398,0.842,399,1.062,400,0.773,401,1.938,402,1.783,403,1.938,404,1.062,405,2.671,406,1.589,407,0.925,408,0.763,409,0.773,410,1.619,411,0.736,412,1.062,413,1.355,414,0.996,415,1.489,416,1.938,417,0.649,418,0.925,419,1.409,420,1.154,421,1.062,422,0.654,423,0.705,424,0.842,425,0.925,426,1.062,427,0.97,428,0.925,429,0.604,430,1.062,431,0.816,432,1.062,433,0.946,434,1.062,435,1.062,436,0.906,437,1.062,438,1.062,439,0.638,440,0.556,441,0.996,442,1.062,443,1.062,444,1.062,445,0.805,446,0.925,447,0.728,448,0.829,449,1.062,450,1.062,451,1.027,452,0.805,453,1.062,454,0.925,455,1.062,456,1.062,457,1.619,458,0.691,459,1.062,460,0.816,461,0.925,462,1.062,463,1.062,464,1.062,465,0.925,466,1.062,467,1.062,468,1.062,469,0.856,470,0.97,471,1.062,472,1.062,473,0.996,474,0.773,475,0.856]],["component/58",[1,0.442]],["title/59-1",[476,33.381]],["name/59-1",[]],["text/59-1",[]],["component/59-1",[]],["title/59-2",[477,40.448]],["name/59-2",[]],["text/59-2",[]],["component/59-2",[]],["title/59-3",[124,33.822]],["name/59-3",[]],["text/59-3",[]],["component/59-3",[]],["title/59",[478,32.341]],["name/59",[478,0.942]],["text/59",[7,0.791,12,2.613,14,2.468,15,1.078,20,0.882,21,0.836,24,0.924,28,2.292,31,0.935,32,2.779,38,0.964,41,1.51,44,1.493,47,1.206,49,1.804,52,1.493,53,3.18,60,2.496,61,3.195,68,1.438,69,1.804,73,1.469,77,2.655,78,0.977,82,0.941,85,0.996,94,1.195,103,1.535,124,2.629,125,1.195,133,1.614,136,2.762,138,1.017,141,1.366,142,1.494,148,1.6,161,2.307,162,2.882,166,1.054,167,1.315,191,2.007,198,1.614,217,3.243,218,0.918,222,2.026,223,1.218,239,1.384,242,1.07,243,1.062,278,1.173,280,1.132,284,1.521,285,2.561,286,2.497,287,0.887,294,1.218,307,1.614,311,1.078,322,0.97,326,2.307,329,1.054,356,2.048,359,1.424,364,1.122,366,1.3,369,3.149,372,2.365,376,1.206,385,1.424,386,1.446,388,1.218,396,1.087,408,1.331,413,0.941,419,1.348,420,1.104,422,1.142,423,1.231,431,2.438,439,1.113,457,1.549,458,2.065,477,4.535,478,2.514,479,1.854,480,1.854,481,1.614,482,1.384,483,1.854,484,1.854,485,1.739,486,1.494,487,1.521,488,2.651,489,3.173,490,1.854,491,1.271,492,3.869,493,1.122,494,2.762,495,1.854,496,1.854,497,1.122,498,1.854,499,1.854,500,3.797,501,1.366,502,1.692,503,2.896,504,1.854,505,1.331,506,1.614,507,3.797,508,1.854,509,1.348,510,4.039,511,1.271,512,3.621,513,1.989,514,1.095,515,1.173,516,2.199,517,1.331,518,1.549,519,1.854,520,1.58,521,1.692,522,1.792,523,1.854,524,1.285,525,1.3,526,1.854,527,2.762,528,2.515,529,1.271,530,1.614,531,1.854,532,1.854,533,3.067,534,4.159,535,1.792,536,1.854,537,1.854,538,3.149,539,1.854,540,1.854,541,1.854,542,1.854,543,1.854,544,1.854,545,1.854,546,1.095,547,1.854,548,1.58,549,1.348,550,1.854,551,1.424,552,1.854,553,1.469,554,0.908,555,1.692,556,1.331,557,1.231,558,1.195,559,1.854,560,1.854,561,1.257,562,1.521,563,1.854,564,1.854,565,1.854]],["component/59",[1,0.442]],["title/60-1",[7,13.495,440,16.555,623,25.068,636,19.648,637,19.476]],["name/60-1",[]],["text/60-1",[]],["component/60-1",[]],["title/60-2",[1,15.38,638,33.626]],["name/60-2",[]],["text/60-2",[]],["component/60-2",[]],["title/60-3",[478,25.855,639,32.337]],["name/60-3",[]],["text/60-3",[]],["component/60-3",[]],["title/60-4",[195,19.428,196,23.525,572,27.376,639,23.08]],["name/60-4",[]],["text/60-4",[]],["component/60-4",[]],["title/60-5",[1,12.811,440,22.086,640,42.19]],["name/60-5",[]],["text/60-5",[]],["component/60-5",[]],["title/60-6",[1,15.38,641,44.096]],["name/60-6",[]],["text/60-6",[]],["component/60-6",[]],["title/60",[561,28.602,616,29.929,642,36.73]],["name/60",[643,1.844]],["text/60",[1,0.645,7,4.118,10,0.737,13,1.078,21,0.958,27,1.182,28,1.353,32,0.664,34,1.091,40,0.669,44,0.553,49,0.431,52,0.553,63,2.389,66,0.522,69,0.669,74,2.061,75,1.594,83,0.797,85,0.632,93,0.758,103,0.569,110,0.806,123,0.737,128,0.744,149,1.024,166,2.025,167,1.507,169,0.758,194,1.024,195,3.22,196,2.68,199,1.811,204,0.789,240,0.765,243,0.674,251,0.789,257,0.806,261,0.641,270,0.65,274,0.878,276,0.797,288,0.612,309,0.718,315,0.797,321,0.824,329,0.669,354,0.718,356,0.579,362,1.85,417,0.718,420,1.265,425,1.024,429,0.669,440,3.272,454,1.024,458,1.382,477,3.641,478,2.102,497,1.286,509,0.855,525,0.824,538,1.609,551,0.903,554,0.576,561,2.414,572,1.609,574,0.965,581,0.797,596,1.245,618,1.073,623,0.932,631,1.609,636,1.805,637,0.724,638,1.41,639,3.99,641,2.53,642,7.847,644,1.137,645,0.866,646,1.103,647,1.176,648,1.103,649,0.983,650,1.176,651,1.103,652,0.89,653,1.103,654,1.176,655,1.586,656,0.866,657,0.903,658,1.85,659,1.565,660,1.176,661,3.561,662,1.176,663,3.561,664,2.906,665,2.124,666,1.176,667,1.176,668,1.85,669,2.53,670,3.34,671,1.176,672,1.176,673,1.176,674,1.176,675,1.176,677,1.176,678,2.124,679,1.176,680,2.124,681,1.176,682,1.176,683,1.176,684,1.137,685,1.176,686,1.176,687,1.176,688,2.906,689,1.176,690,1.176,691,0.844,692,1.176,693,1.176,694,1.176,695,1.176,696,1.176,697,1.176,698,1.176,699,1.176,700,1.176,701,1.993,702,0.932,704,1.176,705,1.176,706,2.053,707,1.176,708,2.053,709,1.657,710,1.176,711,1.176,712,1.176,713,1.176,714,1.176,715,5.703,716,1.176,717,1.176,718,1.176,719,1.176,720,1.176,721,1.176,722,1.176,723,1.176,724,1.176,725,1.176,726,1.176,727,1.176,728,1.176,729,1.176,730,1.176,731,1.176,732,1.176,733,1.176,734,1.176,735,1.176,736,1.176,737,1.176,738,1.176,739,1.176,740,1.176,741,1.176,742,1.176,743,1.176,744,2.014,745,0.744,746,1.176,747,5.441,748,1.176,749,1.176,750,2.906,751,1.176,752,2.124,753,1.176,754,2.124,755,1.176,756,1.176,757,1.176,758,0.751,759,0.712,760,1.892,761,1.176,762,1.024,763,1.024,764,1.024,765,0.855,766,1.137,767,2.906,768,2.124,769,1.176,770,1.176,771,0.932,772,0.983,773,0.932,774,0.983,775,1.176,776,2.906,777,1.176,778,1.176,779,1.176,780,1.176,781,1.176,782,1.176,783,1.047,784,0.983,785,1.176,786,1.176,787,4.118,788,0.89,789,0.815,790,1.176,791,1.176,792,1.176,793,1.176,794,1.176,795,1.176,796,1.176,797,1.176,798,1.176,799,1.176,800,1.176,801,1.176,802,1.176,803,1.176,804,1.176,805,1.176,806,0.917,807,1.176,808,2.389,809,0.932,810,0.932,811,1.024,812,1.182,813,1.276,814,1.024,815,1.024,2226,1.282,2227,1.361]],["component/60",[1,0.442]],["title/61-1",[195,27.22,571,35.103]],["name/61-1",[]],["text/61-1",[]],["component/61-1",[]],["title/61-2",[20,24.101,195,27.22]],["name/61-2",[]],["text/61-2",[]],["component/61-2",[]],["title/61-3",[195,27.22,571,35.103]],["name/61-3",[]],["text/61-3",[]],["component/61-3",[]],["title/61-4",[478,32.341]],["name/61-4",[]],["text/61-4",[]],["component/61-4",[]],["title/61-5",[276,42.951]],["name/61-5",[]],["text/61-5",[]],["component/61-5",[]],["title/61",[195,27.22,580,37.315]],["name/61",[195,0.991]],["text/61",[7,0.717,11,0.624,12,0.681,13,1.479,14,0.687,15,0.978,16,2.621,17,1.936,18,0.978,19,0.57,20,2.824,21,0.41,22,0.61,24,1.167,27,0.935,28,0.782,31,1.181,32,0.949,33,0.604,34,1.203,35,1.311,39,0.869,40,0.517,41,1.114,43,2.668,44,1.102,45,1.178,46,0.746,47,1.094,48,2.983,49,1.688,53,1.536,57,1.035,59,0.721,60,1.541,63,1.127,64,0.426,65,0.832,66,1.715,76,4.007,77,1.861,80,0.576,82,0.462,88,0.556,89,1.373,91,1.463,94,0.586,95,0.721,98,0.483,103,0.44,108,0.538,122,1.811,123,0.57,128,1.063,129,1.207,134,1.311,140,2.212,141,0.67,148,1.181,150,0.67,151,0.792,159,0.689,162,2.021,163,0.645,167,0.645,171,0.689,183,0.689,185,1.259,189,0.459,191,1.481,195,3.298,203,0.565,204,1.571,206,0.662,214,1.418,218,0.451,233,0.733,240,1.524,242,0.97,258,0.71,264,0.517,272,2.485,276,0.617,280,1.026,282,1.255,283,1.116,285,1.796,286,1.009,287,0.435,288,0.473,294,0.598,295,0.542,296,1.291,301,1.018,302,0.792,305,0.61,311,0.529,313,0.776,315,1.139,320,0.679,322,0.476,323,0.792,326,1.222,329,0.517,350,0.776,353,1.463,356,0.828,358,0.71,359,0.699,366,0.638,367,0.776,373,2.069,374,0.699,375,0.604,376,0.592,377,1.588,379,0.792,385,1.291,386,1.311,392,0.592,396,0.985,400,1.703,402,1.849,407,0.792,409,0.662,411,1.165,417,1.026,419,0.662,420,1.001,422,0.56,423,0.604,424,0.721,429,0.517,452,0.689,460,0.699,465,0.792,474,1.703,476,0.886,477,1.861,478,2.173,482,2.552,493,2.338,497,0.551,509,0.662,510,5.997,514,0.538,520,0.776,524,1.165,527,0.792,528,0.721,529,1.152,530,2.976,538,0.689,548,0.776,549,1.222,551,1.291,554,0.823,557,0.604,569,0.679,571,4.382,575,2.626,579,0.624,581,0.617,585,0.758,591,0.831,596,0.533,611,0.81,627,0.733,630,0.529,637,1.796,638,0.604,747,0.792,758,0.581,772,0.76,816,1.681,817,0.879,818,0.91,819,0.792,820,0.91,821,1.379,822,0.645,823,0.792,824,0.776,825,0.91,826,0.831,827,0.792,828,0.879,829,0.91,830,0.91,831,1.238,832,0.853,833,4.455,834,0.91,835,0.879,836,0.853,837,1.433,838,1.625,839,2.437,840,0.91,841,1.625,842,1.682,843,0.91,844,2.021,845,0.76,846,0.91,847,0.853,848,0.91,849,0.91,850,4.991,851,0.879,852,0.91,853,0.91,854,1.291,855,0.721,856,0.879,857,1.463,858,3.439,859,0.81,860,1.996,861,0.91,862,0.776,863,0.91,864,1.888,865,0.733,866,0.91,867,2.818,868,0.699,869,1.094,870,0.792,871,0.91,872,0.91,873,2.916,874,0.91,875,2.275,876,0.76,877,0.67,878,0.699,879,0.91,880,2.24,881,0.91,882,0.91,883,3.227,884,2.197,885,0.81,886,2.976,887,0.91,888,0.91,889,0.879,890,0.598,891,0.91,892,1.576,893,0.879,894,1.576,895,0.699,896,0.645,897,0.91,898,0.776,899,1.634,900,1.576,901,0.91,902,0.831,903,3.418,904,1.625,905,0.91,906,0.853,907,0.91,908,0.565,909,0.67,910,0.91,911,0.879,912,0.653,913,0.91,914,0.91,915,0.721,916,0.91,917,0.91,918,0.746,919,0.91,920,1.291,921,0.879,922,0.91,923,0.91,924,0.91,925,1.497,926,0.91,927,0.91,928,0.91,929,2.916,930,1.311,931,0.76,932,0.91,933,0.91,934,1.681,935,0.879,936,0.853,937,0.81,938,0.91,939,0.776,940,0.91,941,0.91,942,0.776,943,0.831,944,0.91,945,0.91,946,0.91,947,0.853,948,0.746,949,0.831,950,0.91,951,0.91,952,0.576,953,0.721,954,0.91,955,0.81,956,0.91,957,0.879,958,0.91,959,0.91,960,0.91,961,0.853,962,0.91,963,0.746]],["component/61",[1,0.442]],["title/62-1",[476,33.381]],["name/62-1",[]],["text/62-1",[]],["component/62-1",[]],["title/62-2",[217,22.673,218,20.897,513,26.446]],["name/62-2",[]],["text/62-2",[]],["component/62-2",[]],["title/62-3",[439,30.414,964,40.149]],["name/62-3",[]],["text/62-3",[]],["component/62-3",[]],["title/62-4",[13,25.697,203,31.468]],["name/62-4",[]],["text/62-4",[]],["component/62-4",[]],["title/62-5",[148,25.541,965,37.315]],["name/62-5",[]],["text/62-5",[]],["component/62-5",[]],["title/62-6",[290,33.288,965,37.315]],["name/62-6",[]],["text/62-6",[]],["component/62-6",[]],["title/62-7",[203,31.468,966,37.315]],["name/62-7",[]],["text/62-7",[]],["component/62-7",[]],["title/62-8",[967,44.096,968,40.149]],["name/62-8",[]],["text/62-8",[]],["component/62-8",[]],["title/62",[82,25.697,197,21.719]],["name/62",[197,0.444,969,0.901]],["text/62",[7,2.206,12,0.809,13,2.23,14,2.735,20,2.091,21,1.524,28,1.573,41,1.608,49,2.3,52,0.94,53,1.781,57,1.23,65,0.989,66,0.887,78,1.052,140,2.517,148,1.704,166,1.135,191,2.138,197,2.48,200,1.369,203,3.212,217,3.375,218,1.674,227,3.624,257,1.369,261,1.088,262,1.638,278,2.138,286,3.473,287,0.956,290,1.313,295,1.189,322,2.301,356,0.983,368,1.313,373,1.209,396,1.981,402,1.081,408,2.427,413,1.013,420,1.189,439,4.551,491,5.021,501,1.471,511,3.012,513,3.241,546,1.18,554,0.978,583,1.241,587,2.637,638,1.326,812,1.111,837,1.702,890,2.888,908,1.241,952,4.449,964,3.483,965,1.471,966,2.49,968,3.483,970,1.997,971,1.739,972,1.997,973,1.997,974,2.221,975,3.801,976,5.467,977,1.558,978,1.369,979,1.313,980,1.189,981,1.153,982,1.997,983,4.998,984,1.997,985,1.93,986,1.471,987,1.434,988,4.395,989,3.38,990,4.395,991,1.535,992,1.739,993,3.38,994,1.997,995,2.943,996,2.158,997,1.997,998,1.93,999,1.583,1000,1.739,1001,1.583,1002,3.38,1003,1.739,1004,1.558,1005,1.997,1006,1.997,1007,1.997,1008,1.997,1009,1.997,1010,1.997,1011,1.997,1012,1.997,1013,1.997,1014,1.997,1015,1.739,1016,1.997,1017,1.739,1018,1.583,1019,1.997,1020,1.583,1021,1.997,1022,1.997,1023,1.997,1024,1.997,1025,1.997,1026,1.997,1027,1.997,1028,1.997,1029,1.997,1030,1.997,1031,1.997,1032,1.997,1033,1.558,1034,1.702,1035,3.38,1036,1.997,1037,1.997,1038,3.826,1039,1.997,1040,1.354,1041,1.583,1042,1.739,1043,1.638,1044,1.997,1045,1.739,1046,1.997,1047,1.739,1048,3.38,1049,1.354]],["component/62",[1,0.442]],["title/63-1",[476,33.381]],["name/63-1",[]],["text/63-1",[]],["component/63-1",[]],["title/63-2",[287,24.236,981,29.234]],["name/63-2",[]],["text/63-2",[]],["component/63-2",[]],["title/63-3",[322,26.515,981,29.234]],["name/63-3",[]],["text/63-3",[]],["component/63-3",[]],["title/63-4",[413,25.697,981,29.234]],["name/63-4",[]],["text/63-4",[]],["component/63-4",[]],["title/63-5",[981,29.234,996,32.337]],["name/63-5",[]],["text/63-5",[]],["component/63-5",[]],["title/63-6",[812,23.47,981,24.351,1049,28.602]],["name/63-6",[]],["text/63-6",[]],["component/63-6",[]],["title/63",[215,40.149,1050,31.468]],["name/63",[812,0.576,1050,0.643]],["text/63",[1,1.223,7,3.14,13,2.992,14,2.657,15,1.434,16,1.519,19,1.546,20,3.887,21,2.303,28,1.875,31,2.032,44,1.896,49,2.555,66,1.095,68,1.826,85,3.169,208,1.392,240,1.605,270,1.362,285,1.519,287,1.928,289,1.532,295,3.042,311,1.434,322,1.291,354,1.506,364,1.493,368,1.621,375,2.675,376,3.324,390,1.817,392,1.605,396,3.456,408,1.771,413,1.251,415,1.895,419,3.714,431,1.895,513,2.525,546,1.457,554,1.207,567,1.817,575,1.895,606,1.372,669,5.658,758,1.575,759,3.57,811,2.147,812,2.241,823,3.507,878,1.895,908,1.532,931,2.061,939,2.102,964,4.048,974,1.621,975,3.875,979,3.875,981,3.403,1050,3.663,1051,3.894,1052,2.466,1053,2.466,1054,2.466,1055,2.102,1056,2.384,1057,2.466,1058,4.029,1059,2.102,1060,2.061,1061,3.507,1062,2.313,1063,3.193,1064,3.367,1065,2.466,1066,1.924,1067,3.434,1068,2.466,1069,2.384,1070,5.107,1071,4.029,1072,5.107,1073,2.313,1074,4.029,1075,2.466,1076,2.466,1077,2.466,1078,2.466,1079,4.029,1080,2.466,1081,2.466,1082,3.507,1083,4.029,1084,2.384,1085,2.466,1086,2.147,1087,2.466,1088,2.466,1089,2.466,1090,2.466,1091,2.384,1092,1.672,1093,2.466,1094,1.575,1095,2.313,1096,2.313]],["component/63",[1,0.442]],["title/64-1",[476,33.381]],["name/64-1",[]],["text/64-1",[]],["component/64-1",[]],["title/64",[14,20.71,122,31.468]],["name/64",[2,1.513]],["text/64",[4,2.774,7,3.386,12,2.515,14,2.085,20,2.954,27,1.846,31,1.674,44,1.562,49,3.124,53,2.686,60,2.299,61,2.525,78,2.686,80,2.099,122,3.857,138,1.821,148,1.674,171,2.513,197,1.423,208,1.873,214,2.009,215,2.631,226,1.846,261,1.808,286,1.993,287,1.588,290,2.181,295,3.698,300,3.574,321,2.327,369,2.513,413,1.684,422,2.044,428,2.889,458,2.16,476,1.749,492,2.778,501,4.574,513,4.367,515,3.225,517,2.383,518,2.774,546,3.012,554,2.496,585,1.497,812,2.836,813,3.728,814,2.889,815,2.889,876,2.774,908,2.062,971,2.889,974,4.578,975,3.351,976,2.889,977,3.978,979,2.181,1050,3.168,1055,2.829,1063,2.631,1067,2.829,1086,5.405,1094,2.119,1097,3.319,1098,2.383,1099,4.921,1100,3.319,1101,3.319,1102,3.319,1103,3.319,1104,3.319,1105,2.889,1106,2.445,1107,2.3,1108,3.319]],["component/64",[1,0.442]],["title/65-1",[186,23.305,604,30.296,930,32.914]],["name/65-1",[]],["text/65-1",[]],["component/65-1",[]],["title/65-2",[186,23.305,604,30.296,1109,35.962]],["name/65-2",[]],["text/65-2",[]],["component/65-2",[]],["title/65-3",[186,27.978,1110,40.149]],["name/65-3",[]],["text/65-3",[]],["component/65-3",[]],["title/65-4",[187,41.638]],["name/65-4",[]],["text/65-4",[]],["component/65-4",[]],["title/65-5",[186,27.978,1111,40.149]],["name/65-5",[]],["text/65-5",[]],["component/65-5",[]],["title/65-6",[186,23.305,1111,33.442,1112,42.19]],["name/65-6",[]],["text/65-6",[]],["component/65-6",[]],["title/65-7",[1113,50.219]],["name/65-7",[]],["text/65-7",[]],["component/65-7",[]],["title/65-8",[1114,55.157]],["name/65-8",[]],["text/65-8",[]],["component/65-8",[]],["title/65-9",[197,27.167]],["name/65-9",[]],["text/65-9",[]],["component/65-9",[]],["title/65-10",[197,21.719,325,44.096]],["name/65-10",[]],["text/65-10",[]],["component/65-10",[]],["title/65-11",[197,21.719,1115,50.65]],["name/65-11",[]],["text/65-11",[]],["component/65-11",[]],["title/65-12",[1116,37.822,1117,44.096]],["name/65-12",[]],["text/65-12",[]],["component/65-12",[]],["title/65-13",[297,30.166,1110,40.149]],["name/65-13",[]],["text/65-13",[]],["component/65-13",[]],["title/65-14",[197,21.719,1113,40.149]],["name/65-14",[]],["text/65-14",[]],["component/65-14",[]],["title/65-15",[197,21.719,966,37.315]],["name/65-15",[]],["text/65-15",[]],["component/65-15",[]],["title/65-16",[197,21.719,1118,44.096]],["name/65-16",[]],["text/65-16",[]],["component/65-16",[]],["title/65",[138,27.783,148,25.541]],["name/65",[138,0.568,148,0.522]],["text/65",[7,0.907,12,0.329,14,2.373,19,0.949,20,0.72,21,0.683,27,0.452,28,2.14,31,0.41,39,0.783,40,2.437,41,0.387,43,0.51,47,0.529,49,0.298,53,1.402,56,0.867,65,0.75,68,0.686,76,0.57,78,0.428,82,0.412,85,0.437,93,0.524,124,1.675,129,1.526,138,1.721,140,2.455,148,1.071,166,0.462,186,1.967,187,0.995,188,0.557,189,0.41,197,1.838,200,0.557,209,0.932,214,0.492,217,2.623,218,2.874,223,0.534,227,0.874,264,1.208,276,1.026,279,1.291,286,3.23,287,1.704,290,1.396,291,1.987,292,0.693,297,1.265,301,0.492,309,0.496,322,2.064,326,1.101,356,0.4,365,0.563,368,0.534,372,0.462,376,0.529,391,0.57,396,1.56,398,0.644,402,0.44,409,0.591,410,0.679,411,1.049,413,1.592,429,0.462,447,0.557,469,1.22,491,1.038,497,0.492,505,0.584,506,0.708,511,1.038,514,0.48,529,1.038,546,0.48,554,0.398,557,0.54,558,0.524,598,0.708,606,0.452,630,0.473,638,0.54,645,0.599,659,2.311,691,1.526,702,1.2,709,0.634,806,0.634,827,0.708,842,2.831,845,0.679,869,1.732,890,0.995,908,0.505,930,1.181,942,1.291,952,2.494,965,1.115,967,0.708,968,0.644,979,0.534,986,0.599,987,1.087,992,0.708,996,2.517,1001,0.644,1003,2.317,1004,1.658,1015,1.318,1018,0.644,1020,0.644,1033,0.634,1038,3.432,1040,2.672,1042,0.708,1045,1.318,1047,1.318,1049,2.127,1061,0.708,1092,1.026,1094,0.519,1098,1.526,1107,1.049,1109,1.811,1110,5.018,1111,0.644,1113,0.644,1114,0.708,1116,1.131,1117,1.318,1118,0.708,1119,1.993,1120,0.786,1121,1.181,1122,1.514,1123,0.813,1124,1.514,1125,0.813,1126,1.514,1127,0.813,1128,1.514,1129,0.813,1130,1.514,1131,0.813,1132,1.514,1133,0.813,1134,1.514,1135,0.813,1136,1.514,1137,0.813,1138,0.813,1139,0.813,1140,2.125,1141,0.813,1142,1.514,1143,0.813,1144,0.813,1145,0.813,1146,0.813,1147,0.813,1148,0.813,1149,0.813,1150,0.813,1151,0.813,1152,0.813,1153,0.813,1154,2.125,1155,1.514,1156,2.662,1157,0.813,1158,1.514,1159,1.514,1160,0.813,1161,0.813,1162,2.573,1163,1.514,1164,2.125,1165,3.251,1166,2.731,1167,0.813,1168,1.514,1169,1.514,1170,1.265,1171,0.786,1172,0.813,1173,0.813,1174,0.813,1175,0.813,1176,0.786,1177,1.514,1178,1.514,1179,0.813,1180,1.514,1181,0.813,1182,1.514,1183,0.813,1184,0.813,1185,0.813,1186,0.813,1187,0.813,1188,0.813,1189,0.813,1190,0.813,1191,0.813,1192,0.813,1193,0.813,1194,0.813,1195,0.813,1196,0.813,1197,1.514,1198,0.813,1199,0.813,1200,0.813,1201,0.813,1202,0.813,1203,0.813,1204,1.242,1205,0.813,1206,0.813,1207,0.813,1208,0.813,1209,0.655,1210,0.813,1211,0.813,1212,0.813,1213,0.813,1214,0.813,1215,0.813,1216,0.693,1217,0.813,1218,0.813,1219,0.813,1220,0.813,1221,0.813,1222,0.813,1223,0.813,1224,0.813,1225,0.813,1226,0.813,1227,1.85,1228,0.813,1229,1.85,1230,0.813,1231,0.813,1232,0.813,1233,0.813,1234,0.693,1235,0.813,1236,0.667,1237,0.813,1238,0.693,1239,0.813,1240,0.813,1241,0.763,1242,0.813,1243,0.813,1244,0.813,1245,0.813,1246,0.813,1247,0.813,1248,0.679,1249,0.813,1250,0.708,1251,0.813,1252,0.708,1253,0.813,1254,0.813,1255,0.813,1256,0.813,1257,0.786,1258,0.813,1259,0.786,1260,0.813,1261,0.693,1262,0.813,1263,0.625,1264,0.813,1265,0.742,1266,0.813,1267,0.644,1268,0.813,1269,0.813,1270,0.813,1271,0.813,1272,0.813,1273,0.813,1274,0.813,1275,0.813,1276,0.813,1277,0.813,1278,0.813,1279,0.763,1280,0.813,1281,6.167,1282,0.813,1283,0.813,1284,0.813,1285,0.813,1286,0.813,1287,0.813,1288,0.708,1289,0.813,1290,0.813,1291,0.813,1292,0.813,1293,0.813,1294,0.813,1295,0.813,1296,1.514,1297,0.813,1298,1.514,1299,0.813,1300,1.514,1301,0.813,1302,1.514,1303,0.813,1304,0.708,1305,0.813,1306,0.813,1307,0.813,1308,0.708,1309,0.813,1310,0.708,1311,0.813,1312,0.708,1313,0.813,1314,0.708,1315,0.813,1316,0.813,1317,0.813,1318,0.708,1319,0.813,1320,0.708,1321,0.813,1322,0.813,1323,0.813,1324,0.763,1325,0.813,1326,0.763,1327,0.813,1328,0.813,1329,0.813,1330,0.813,1331,0.813,1332,0.813,1333,0.813,1334,0.813,1335,0.813,1336,0.813,1337,0.813,1338,0.813,1339,0.813,1340,0.813,1341,0.813,1342,0.813,1343,0.813,1344,0.813,1345,0.813,1346,0.813,1347,0.813,1348,0.813,1349,0.813,1350,0.813,1351,0.813,1352,0.813,1353,0.813,1354,0.813,1355,0.813,1356,0.813,1357,0.813,1358,0.813,1359,0.813,1360,2.125,1361,0.786,1362,0.813,1363,0.813,1364,0.667,1365,0.813,1366,0.813,1367,0.813,1368,0.813,1369,0.693,1370,1.514,1371,0.813,1372,1.514,1373,0.813,1374,0.813,1375,0.813,1376,0.813,1377,2.662,1378,0.599,1379,0.786,1380,0.813,1381,0.763,1382,0.813,1383,0.813,1384,1.42,1385,0.813,1386,0.813,1387,0.813,1388,1.514,1389,2.662,1390,0.813,1391,0.708,1392,0.813,1393,0.813,1394,0.813,1395,0.813,1396,0.813,1397,0.813,1398,0.813,1399,0.708,1400,0.708,1401,1.514,1402,0.813,1403,0.708,1404,0.813,1405,0.708,1406,0.813,1407,0.813,1408,0.813,1409,0.813,1410,0.813,1411,0.813,1412,0.813,1413,2.662,1414,0.813,1415,0.813,1416,0.813,1417,0.813,1418,0.813,1419,0.813,1420,0.813,1421,0.708,1422,0.708]],["component/65",[1,0.442]],["title/66-1",[476,33.381]],["name/66-1",[]],["text/66-1",[]],["component/66-1",[]],["title/66-2",[1423,46.675]],["name/66-2",[]],["text/66-2",[]],["component/66-2",[]],["title/66-3",[217,27.22,492,27.592]],["name/66-3",[]],["text/66-3",[]],["component/66-3",[]],["title/66-4",[53,26.687,1106,37.315]],["name/66-4",[]],["text/66-4",[]],["component/66-4",[]],["title/66-5",[513,31.749,975,33.288]],["name/66-5",[]],["text/66-5",[]],["component/66-5",[]],["title/66-6",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/66-6",[]],["text/66-6",[]],["component/66-6",[]],["title/66",[12,14.645,61,17.906,402,19.56,492,19.694]],["name/66",[492,0.564,1106,0.763]],["text/66",[1,1.174,10,1.47,12,1.998,14,0.959,20,2.347,21,1.744,24,1.169,28,2.296,33,2.567,49,2.638,53,3.014,61,2.834,65,1.915,68,1.063,74,1.664,94,1.512,103,1.135,108,1.386,124,1.252,128,1.484,164,3.542,166,1.334,169,1.512,197,1.006,206,1.706,209,2.381,217,4.317,218,2.443,220,1.859,221,1.859,222,3.652,223,3.76,226,2.151,242,1.354,257,1.608,263,1.83,286,2.962,287,1.122,289,1.457,294,2.541,295,1.397,297,1.397,311,1.364,322,2.024,329,1.334,356,1.904,364,2.341,368,3.76,372,1.334,377,1.59,396,1.375,402,2.669,409,1.706,413,1.19,439,1.408,491,4.337,492,3.923,493,1.42,494,3.366,497,1.42,513,3.092,514,1.386,515,2.446,546,2.914,633,1.999,645,2.848,655,1.752,759,1.42,765,1.706,812,1.305,813,3.435,831,1.728,880,1.802,890,1.542,896,1.664,898,1.999,912,1.684,915,1.859,969,2.042,974,4.159,975,2.541,977,1.83,979,2.541,980,1.397,981,2.232,991,1.802,996,1.498,1000,3.366,1041,1.859,1094,2.468,1105,2.042,1106,4.662,1121,1.83,1170,1.96,1261,1.999,1423,2.848,1425,1.47,1427,3.366,1428,1.776,1429,2.042,1430,1.776,1431,2.042,1432,1.859,1433,2.346,1434,2.346,1435,1.859,1436,2.267,1437,2.346,1438,2.346,1439,1.891,1440,2.092,1441,2.346,1442,2.042,1443,2.346,1444,2.346,1445,2.042,1446,2.042]],["component/66",[1,0.442]],["title/67-1",[476,33.381]],["name/67-1",[]],["text/67-1",[]],["component/67-1",[]],["title/67-2",[1423,46.675]],["name/67-2",[]],["text/67-2",[]],["component/67-2",[]],["title/67-3",[217,27.22,492,27.592]],["name/67-3",[]],["text/67-3",[]],["component/67-3",[]],["title/67-4",[60,19.025,297,25.127,1447,36.73]],["name/67-4",[]],["text/67-4",[]],["component/67-4",[]],["title/67-5",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/67-5",[]],["text/67-5",[]],["component/67-5",[]],["title/67-6",[218,20.897,505,30.296,517,30.296]],["name/67-6",[]],["text/67-6",[]],["component/67-6",[]],["title/67-7",[223,27.727,249,33.442,1448,36.73]],["name/67-7",[]],["text/67-7",[]],["component/67-7",[]],["title/67-8",[1449,55.157]],["name/67-8",[]],["text/67-8",[]],["component/67-8",[]],["title/67-9",[1450,55.157]],["name/67-9",[]],["text/67-9",[]],["component/67-9",[]],["title/67-10",[52,29.815]],["name/67-10",[]],["text/67-10",[]],["component/67-10",[]],["title/67-11",[392,32.961,1451,44.096]],["name/67-11",[]],["text/67-11",[]],["component/67-11",[]],["title/67",[12,14.645,60,16.302,402,19.56,492,19.694]],["name/67",[60,0.467,492,0.564]],["text/67",[1,0.318,7,3.32,10,0.345,12,1.32,14,0.428,20,0.91,21,0.248,24,0.522,28,0.487,33,0.695,40,0.595,49,0.384,52,0.9,53,0.552,58,0.436,60,1.818,65,0.947,68,0.867,75,1.049,78,0.79,80,0.348,81,0.365,82,0.531,84,1.039,100,0.479,101,1.664,102,0.892,103,0.266,108,0.325,122,0.341,124,1.223,128,0.348,147,0.373,148,1.33,164,1.076,169,0.966,189,0.277,192,0.451,197,0.449,204,0.702,206,0.4,208,1.079,209,0.339,214,0.333,217,1.591,218,0.519,220,0.436,221,0.436,222,0.668,223,1.734,226,0.582,249,2.582,257,1.31,261,0.299,275,0.429,278,0.348,286,1.777,287,1.096,289,0.341,294,0.688,297,0.327,305,0.369,309,0.336,311,0.32,322,1.001,352,2.577,356,0.271,364,0.333,368,0.985,376,0.358,377,0.373,396,0.614,398,1.515,402,0.297,413,0.761,415,0.422,423,0.365,439,1.375,488,0.459,491,2.232,492,1.248,493,0.333,497,0.634,501,0.405,505,1.645,511,0.718,512,0.479,514,0.619,515,1.209,517,1.076,525,0.734,546,1.353,554,1.449,567,0.405,606,0.834,610,0.416,628,0.451,630,0.32,645,1.687,655,0.41,668,1.664,691,0.752,702,0.436,709,0.429,758,0.351,759,0.634,813,1.148,844,0.381,855,1.815,869,0.976,880,2.027,896,0.39,899,0.308,912,0.395,915,0.436,952,1.872,953,0.436,974,0.985,975,0.688,981,0.317,986,0.405,987,0.395,991,0.422,996,0.957,999,0.83,1001,1.815,1018,0.436,1020,0.436,1033,0.429,1034,0.469,1040,1.296,1043,0.451,1049,1.553,1060,0.459,1092,0.373,1094,0.957,1098,1.076,1107,0.381,1116,0.41,1121,0.817,1227,0.911,1229,0.479,1288,0.911,1304,0.479,1308,1.994,1310,0.911,1312,1.994,1314,0.479,1318,0.911,1320,1.305,1378,0.405,1391,1.305,1399,0.479,1400,0.479,1403,0.479,1405,0.479,1421,0.479,1422,0.479,1423,0.771,1425,0.656,1427,0.911,1428,0.416,1429,0.911,1430,0.416,1431,0.479,1432,0.83,1445,0.911,1446,0.479,1447,0.911,1448,1.994,1449,0.911,1450,1.305,1451,1.664,1452,0.49,1453,0.479,1454,1.047,1455,1.047,1456,0.55,1457,1.449,1458,1.047,1459,1.047,1460,0.55,1461,1.047,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.047,1469,0.55,1470,1.047,1471,2.96,1472,0.531,1473,0.55,1474,0.55,1475,0.55,1476,1.188,1477,0.55,1478,0.55,1479,0.502,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.29,1485,0.55,1486,5.348,1487,1.912,1488,2.29,1489,1.499,1490,1.499,1491,1.499,1492,2.29,1493,1.912,1494,2.29,1495,1.912,1496,1.047,1497,1.047,1498,2.638,1499,1.047,1500,1.449,1501,2.29,1502,0.55,1503,1.912,1504,1.047,1505,0.459,1506,1.499,1507,2.96,1508,1.912,1509,1.047,1510,1.499,1511,0.55,1512,0.55,1513,1.912,1514,1.047,1515,1.912,1516,1.449,1517,1.047,1518,1.499,1519,1.499,1520,2.638,1521,0.55,1522,1.047,1523,1.912,1524,0.55,1525,1.499,1526,1.912,1527,1.047,1528,0.55,1529,2.29,1530,2.29,1531,2.638,1532,2.29,1533,1.499,1534,1.912,1535,1.047,1536,1.499,1537,1.912,1538,1.499,1539,1.499,1540,2.96,1541,0.55,1542,1.912,1543,1.912,1544,1.047,1545,0.932,1546,1.912,1547,1.499,1548,2.29,1549,0.55,1550,2.29,1551,0.55,1552,1.047,1553,0.55,1554,1.047,1555,3.257,1556,1.912,1557,1.499,1558,1.499,1559,1.047,1560,1.047,1561,0.55,1562,2.638,1563,1.499,1564,1.912,1565,1.912,1566,1.912,1567,1.278,1568,0.55,1569,1.912,1570,1.047,1571,1.047,1572,1.499,1573,1.912,1574,1.047,1575,1.499,1576,2.29,1577,1.499,1578,1.912,1579,1.499,1580,1.499,1581,1.047,1582,1.912,1583,0.55,1584,1.499,1585,1.047,1586,1.499,1587,1.047,1588,1.912,1589,0.55,1590,1.912,1591,0.55,1592,1.499,1593,1.047,1594,1.912,1595,1.047,1596,1.499,1597,1.912,1598,0.55,1599,1.499,1600,1.499,1601,1.047,1602,1.912,1603,1.047,1604,1.047,1605,1.499,1606,1.047,1607,0.55,1608,1.912,1609,1.499,1610,2.96,1611,1.047,1612,1.047,1613,0.55,1614,1.499,1615,1.912,1616,1.499,1617,0.55,1618,1.047,1619,0.55,1620,1.499,1621,0.55,1622,1.047,1623,1.047,1624,1.047,1625,1.499,1626,0.55,1627,1.912,1628,1.047,1629,1.912,1630,1.499,1631,1.499,1632,1.499,1633,0.55,1634,0.55,1635,1.912,1636,1.499,1637,0.55,1638,1.047,1639,0.55,1640,0.55,1641,1.047,1642,1.912,1643,0.55,1644,0.55,1645,1.047,1646,0.55,1647,1.047,1648,0.55,1649,1.047,1650,1.047,1651,0.55,1652,0.55,1653,1.047,1654,1.912,1655,1.912,1656,0.55,1657,1.047,1658,1.047,1659,0.55,1660,1.047,1661,1.047,1662,0.55,1663,1.499,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.499,1670,2.29,1671,1.047,1672,1.047,1673,1.047,1674,0.55,1675,0.55,1676,1.047,1677,1.499,1678,0.55,1679,0.55,1680,1.047,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.502,1686,1.499,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.047,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.047,1704,1.047,1705,1.047,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.531,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.516,1717,0.55,1718,0.55,1719,0.55,1720,0.479,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.531,1726,0.55,1727,0.817,1728,0.55,1729,0.55,1730,0.55,1731,0.531,1732,0.55,1733,0.531,1734,0.55,1735,0.55,1736,0.55,1737,0.354,1738,0.516,1739,0.502,1740,0.531,1741,0.459,1742,1.047,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.047,1750,0.55,1751,1.047,1752,0.55,1753,0.479,1754,0.55]],["component/67",[1,0.442]],["title/68-1",[476,33.381]],["name/68-1",[]],["text/68-1",[]],["component/68-1",[]],["title/68-2",[82,25.697,226,28.177]],["name/68-2",[]],["text/68-2",[]],["component/68-2",[]],["title/68-3",[227,29.234,392,32.961]],["name/68-3",[]],["text/68-3",[]],["component/68-3",[]],["title/68-4",[227,36.567]],["name/68-4",[]],["text/68-4",[]],["component/68-4",[]],["title/68-5",[264,36.021]],["name/68-5",[]],["text/68-5",[]],["component/68-5",[]],["title/68-6",[439,38.043]],["name/68-6",[]],["text/68-6",[]],["component/68-6",[]],["title/68-7",[227,29.234,390,37.315]],["name/68-7",[]],["text/68-7",[]],["component/68-7",[]],["title/68-8",[227,36.567]],["name/68-8",[]],["text/68-8",[]],["component/68-8",[]],["title/68",[226,35.245]],["name/68",[226,1.026]],["text/68",[7,2.211,12,0.811,14,0.819,22,1.344,24,3.133,28,2.05,31,1.01,32,1.913,44,0.943,49,1.613,52,1.595,60,0.903,61,0.992,65,1.678,82,1.719,84,1.388,122,3.219,124,2.351,125,1.291,140,1.147,147,1.358,148,1.01,159,3.335,162,1.388,169,1.291,189,1.709,197,0.859,217,1.076,218,0.992,226,3.499,227,4.884,229,1.744,234,1.744,235,1.744,236,3.834,237,1.744,238,1.744,239,1.496,241,1.643,242,1.156,243,1.147,259,1.421,264,4.811,278,1.267,285,1.234,287,3.205,295,1.193,309,1.223,314,3.163,322,3.033,351,2.464,356,0.986,364,1.213,373,1.213,390,4.633,392,3.77,413,2.628,422,1.234,429,1.139,436,1.707,439,3.479,461,1.744,493,2.052,497,3.137,511,1.373,515,1.267,554,0.981,561,1.358,585,0.903,610,3.335,626,2.087,627,1.614,628,4.25,745,1.267,812,1.885,813,1.203,842,1.438,890,1.316,895,1.539,908,1.244,952,1.267,953,2.686,974,1.316,979,2.227,980,1.193,996,2.163,999,1.588,1004,1.563,1040,2.297,1049,2.297,1063,1.588,1094,2.812,1099,1.588,1107,1.388,1428,1.517,1435,1.588,1476,1.588,1753,5.044,1755,2.003,1756,1.614,1757,5.181,1758,3.389,1759,2.003,1760,3.389,1761,4.404,1762,2.003,1763,2.003,1764,2.003,1765,3.389,1766,3.389,1767,3.389,1768,1.879,1769,4.257,1770,4.404,1771,1.936,1772,3.389,1773,2.003,1774,1.674,1775,1.421,1776,2.003,1777,2.003,1778,1.936,1779,2.003,1780,2.003,1781,2.003,1782,1.707,1783,2.003,1784,5.007]],["component/68",[1,0.442]],["title/69-1",[744,35.103,745,32.039]],["name/69-1",[]],["text/69-1",[]],["component/69-1",[]],["title/69-2",[75,27.783,1787,44.096]],["name/69-2",[]],["text/69-2",[]],["component/69-2",[]],["title/69-3",[209,31.194,585,22.84]],["name/69-3",[]],["text/69-3",[]],["component/69-3",[]],["title/69-4",[585,22.84,1790,46.238]],["name/69-4",[]],["text/69-4",[]],["component/69-4",[]],["title/69-5",[388,41.638]],["name/69-5",[]],["text/69-5",[]],["component/69-5",[]],["title/69-6",[64,29.652]],["name/69-6",[]],["text/69-6",[]],["component/69-6",[]],["title/69-7",[478,32.341]],["name/69-7",[]],["text/69-7",[]],["component/69-7",[]],["title/69-8",[18,29.459,48,27.592]],["name/69-8",[]],["text/69-8",[]],["component/69-8",[]],["title/69-9",[53,22.229,60,19.025,478,21.536]],["name/69-9",[]],["text/69-9",[]],["component/69-9",[]],["title/69-10",[585,19.025,850,32.418,1791,32.914]],["name/69-10",[]],["text/69-10",[]],["component/69-10",[]],["title/69",[1440,34.279]],["name/69",[1440,0.998]],["text/69",[1,1.604,4,1.227,7,3.857,11,1.414,12,1.239,14,1.575,17,0.974,18,1.2,20,0.374,21,1.89,22,0.527,24,1.028,27,0.437,28,0.366,31,0.74,32,0.444,34,2.312,38,1.347,39,0.759,40,1.976,41,1.455,44,0.37,48,2.747,49,2.159,51,0.738,52,1.635,53,2.372,54,1.251,60,1.737,61,1.022,64,1.627,65,0.727,66,1.543,67,0.613,68,0.665,69,0.835,74,1.837,75,2.624,76,0.551,77,3.054,78,1.831,80,0.928,82,0.399,83,0.995,85,0.423,88,0.48,103,0.999,120,0.773,123,0.92,124,0.42,128,0.928,140,0.45,147,0.533,155,0.718,158,1.377,159,1.563,166,0.835,169,0.946,179,0.738,181,1.041,185,0.423,189,1.306,193,0.645,195,0.423,196,0.955,197,0.629,202,0.539,204,0.985,208,2.366,209,2.772,214,0.889,218,0.389,239,0.587,242,0.847,251,0.527,261,2.606,262,0.645,264,1.173,266,0.995,270,0.434,273,0.558,278,1.638,280,0.48,282,0.587,283,0.522,287,2.006,288,0.409,289,1.282,291,0.587,295,0.468,300,0.551,301,0.476,305,0.527,314,0.565,317,1.227,321,0.551,322,2.194,356,1.275,360,0.604,365,1.017,372,1.173,382,2.508,388,2.009,391,0.551,402,0.425,413,1.314,417,0.48,420,0.874,422,0.484,429,0.835,440,0.412,441,1.377,447,0.539,458,0.512,473,0.738,474,0.572,477,1.318,478,2.696,485,0.738,514,1.53,516,2.409,517,0.565,518,1.227,524,1.017,525,0.551,528,1.163,529,0.539,554,1.01,557,0.522,558,2.24,561,0.533,571,0.545,574,0.645,575,0.604,576,1.227,583,0.489,585,2.658,586,2.429,587,1.61,589,1.204,600,0.718,606,2.332,624,0.738,626,0.904,631,1.111,634,0.7,636,1.609,637,0.904,656,0.579,657,0.604,691,1.054,744,1.795,745,2.436,760,1.307,764,0.685,765,1.883,771,1.163,789,0.545,808,0.985,809,0.623,813,0.472,832,0.738,850,2.349,854,1.586,860,1.251,865,1.183,883,0.657,896,1.041,899,1.156,900,0.738,948,0.645,952,2.198,963,1.204,987,1.054,996,1.653,1043,0.645,1049,1.756,1050,1.609,1066,0.613,1073,0.738,1096,1.377,1098,1.054,1099,0.623,1216,0.67,1248,0.657,1279,1.377,1378,1.081,1425,0.493,1440,1.401,1727,0.613,1737,0.507,1741,0.657,1785,0.685,1786,0.718,1787,1.797,1788,2.723,1790,1.884,1791,2.385,1792,0.685,1793,0.76,1794,0.786,1795,0.786,1796,0.76,1797,3.516,1798,0.786,1799,0.786,1800,0.786,1801,0.786,1802,0.786,1803,0.786,1804,0.786,1805,0.786,1806,0.786,1807,0.786,1808,1.725,1809,0.786,1810,0.786,1811,1.586,1812,2.429,1813,0.738,1814,0.645,1815,0.76,1816,0.786,1817,0.786,1818,0.685,1819,0.623,1820,0.685,1821,0.595,1822,0.786,1823,0.786,1824,1.468,1825,1.468,1827,0.786,1828,0.786,1829,0.786,1830,0.76,1831,0.786,1832,0.786,1837,1.636,1839,1.468,1840,0.786,1841,0.786,1842,0.786,1843,0.76,1844,0.786,1845,1.468,1846,1.838,1847,1.468,1848,1.468,1849,1.468,1850,0.786,1852,0.818,1853,0.818,1854,0.7,1855,1.527,1856,0.786,1857,0.818,1858,0.818,1859,1.527,1860,1.307,1861,1.307,1862,1.527,1863,1.527,1864,2.147,1865,1.227,1866,1.307,1867,1.419,1869,0.818,1870,1.096,1906,0.738,1998,0.76,2014,0.738,2016,0.623,2027,1.34,2043,0.738,2142,1.377,2143,0.786,2228,0.818,2229,1.699,2230,1.699,2231,1.699,2232,2.251,2233,0.91,2234,0.91,2235,0.91,2236,0.91,2237,0.91,2238,0.786,2239,0.91,2240,0.91,2241,1.699,2242,0.91,2243,0.91,2244,0.91,2245,0.738,2246,0.91,2247,0.91,2248,0.91,2249,1.527,2250,0.818,2251,0.818,2252,0.818,2253,0.818,2254,0.818,2255,0.91,2256,0.91,2257,0.858,2258,0.76,2259,0.858,2260,0.91,2261,0.858,2262,0.91,2263,0.91]],["component/69",[1,0.442]],["title/70-1",[183,38.355,202,34.713]],["name/70-1",[]],["text/70-1",[]],["component/70-1",[]],["title/70-2",[52,23.836,77,32.337]],["name/70-2",[]],["text/70-2",[]],["component/70-2",[]],["title/70-3",[12,20.519,39,26.18]],["name/70-3",[]],["text/70-3",[]],["component/70-3",[]],["title/70-4",[22,33.975,61,25.087]],["name/70-4",[]],["text/70-4",[]],["component/70-4",[]],["title/70-5",[12,17.092,19,26.446,60,19.025]],["name/70-5",[]],["text/70-5",[]],["component/70-5",[]],["title/70-6",[12,20.519,1871,44.096]],["name/70-6",[]],["text/70-6",[]],["component/70-6",[]],["title/70-7",[855,54.971]],["name/70-7",[]],["text/70-7",[]],["component/70-7",[]],["title/70",[478,32.341]],["name/70",[478,0.942]],["text/70",[7,4.336,11,4.122,12,1.279,15,0.757,16,1.944,19,0.816,21,1.423,39,1.203,49,2.308,52,0.612,60,2.567,61,3.12,69,1.794,77,2.452,88,1.421,89,0.763,123,0.816,129,1.671,181,4.038,189,0.656,195,0.699,208,1.781,218,1.152,274,0.972,285,1.944,288,0.677,366,1.631,424,2.502,440,0.681,477,0.831,481,1.133,487,1.067,516,0.902,562,1.067,571,1.613,572,3.714,576,3.69,585,1.991,596,0.763,606,0.724,626,1.433,762,1.133,763,4.27,808,2.117,819,1.133,821,1.067,862,3.274,980,0.775,986,0.958,1263,1,1267,3.044,1837,3.5,1860,3.932,1861,1.159,1865,1.944,1866,2.072,1868,1.22,1871,1.133,1872,1.301,1873,3.841,1874,2.327,1875,3.156,1876,1.301,1877,1.301,1878,1.301,1879,1.301,1880,2.327,1881,3.841,1882,1.595,1883,2.327,1884,2.327,1885,1.301,1886,1.301,1887,5.326,1888,5.326,1889,2.327,1890,1.301,1891,0.985,1892,1.301,1893,1.301,1894,2.327,1895,1.301,1896,1.301,1897,1.301,1898,1.301,1899,4.27,1900,5.693,1901,3.841,1902,5.693,1903,1.301,1904,1.301,1905,1.301,1906,3.602,1907,3.841,1908,3.841,1909,1.301,1910,1.301,1911,1.301,1912,3.841,1913,3.841,1914,1.301,1915,3.156,1916,1.301,1917,1.301,1918,3.156,1919,1.301,1920,1.301,1921,3.156,1922,1.301,1923,1.301,1924,3.156,1925,3.156,1926,1.301,1927,3.156,1928,4.904,1929,1.301,1930,1.301,1931,2.124,1932,2.182,1933,2.327,1934,2.327,1935,2.327,1936,2.327,1937,3.156,1938,2.327,1939,2.327,1940,2.327,1941,2.327,1942,1.301,1943,2.327,1944,1.22,1945,1.301,1946,2.327,1947,2.327,1948,1.301,1949,1.301,1950,1.301,1951,1.301,1952,1.301,1953,1.301,1954,1.301,1955,1.301,1956,1.301,1957,1.301,1958,1.301,1959,1.301,1960,1.188,1961,1.301,1962,1.301,1963,2.327]],["component/70",[1,0.442]],["title/71-1",[288,32.954]],["name/71-1",[]],["text/71-1",[]],["component/71-1",[]],["title/71",[476,33.381]],["name/71",[476,0.972]],["text/71",[1,2.15,10,3.768,11,4.119,12,2.435,13,3.592,14,1.691,15,2.406,16,2.547,17,2.746,18,3.496,19,3.768,20,2.86,21,1.865,31,2.086,34,2.124,36,3.047,44,1.946,58,3.279,59,3.279,60,1.865,61,2.049,64,2.813,66,2.669,68,3.21,80,2.616,84,4.166,95,3.279,108,2.444,124,2.208,138,2.269,140,2.369,163,4.264,164,2.97,169,2.666,171,3.132,185,2.223,186,2.285,187,2.718,188,2.835,251,4.032,285,2.547,360,3.178,440,2.165,514,2.444,525,4.214,551,3.178,553,3.279,554,2.025,567,3.047,610,3.132,656,3.047,774,3.457,878,3.178,899,2.317,1209,3.334,1785,5.233,1814,3.393,2070,3.879,2264,4.789,2265,4.51,2266,4.789,2267,4.51,2268,4.789,2269,4.789]],["component/71",[1,0.442]],["title/72-1",[64,29.652]],["name/72-1",[]],["text/72-1",[]],["component/72-1",[]],["title/72-2",[14,20.71,1050,31.468]],["name/72-2",[]],["text/72-2",[]],["component/72-2",[]],["title/72-3",[38,21.945,41,20.075,185,22.673]],["name/72-3",[]],["text/72-3",[]],["component/72-3",[]],["title/72",[1964,49.427]],["name/72",[1964,1.439]],["text/72",[1,1.699,7,3.878,13,0.958,14,0.974,15,0.777,17,0.472,24,0.354,27,1.571,31,1.201,32,0.754,34,0.97,36,0.524,38,2.911,39,0.367,41,0.635,44,1.12,48,0.387,49,1.034,60,0.32,61,0.352,62,0.936,64,2.53,65,0.935,66,1.254,68,1.625,75,0.732,78,0.703,81,0.886,82,0.361,83,1.28,89,0.417,103,1.735,110,0.915,117,0.936,120,0.703,130,0.606,138,1.036,154,1.162,166,2.226,185,3.564,186,0.737,187,0.877,188,0.915,189,0.952,191,0.45,197,1.808,200,0.487,202,1.294,226,0.395,240,0.869,242,0.771,243,0.407,251,0.477,258,0.554,259,0.947,261,0.727,264,0.404,266,0.905,270,1.315,280,0.434,287,1.351,288,0.694,290,0.467,296,0.546,297,0.795,299,1.644,301,0.808,303,0.594,304,2.316,305,0.477,310,1.162,312,1.99,317,0.594,321,0.936,329,0.759,354,1.153,356,0.93,357,1.095,365,0.493,372,0.404,373,0.43,374,0.546,381,0.573,388,0.467,391,0.498,406,0.583,411,0.493,417,0.434,418,1.162,420,0.423,422,0.438,429,0.759,440,0.372,445,1.803,446,1.162,447,0.487,452,2.714,458,0.462,474,0.517,475,1.076,486,0.573,493,0.808,516,0.493,546,0.42,553,0.563,554,0.924,556,0.959,558,1.217,579,0.487,581,0.905,585,0.32,593,0.563,596,0.783,604,0.51,605,1.724,606,1.05,616,0.947,619,0.606,626,1.466,630,0.413,636,4.12,637,3.204,639,1.205,657,1.451,659,0.524,758,1.52,759,1.143,771,1.058,784,0.594,788,1.011,789,0.925,806,0.554,808,0.477,812,0.743,813,0.802,831,0.524,842,0.959,854,0.546,857,0.619,868,0.546,869,0.462,877,0.984,890,0.877,895,0.546,899,1.582,909,0.524,912,0.959,918,0.583,920,1.026,966,0.984,978,0.487,995,0.619,1050,0.442,1059,0.606,1064,1.116,1092,1.914,1209,0.573,1234,1.138,1236,2.316,1238,0.606,1248,1.116,1250,2.073,1252,1.162,1263,0.546,1267,4.124,1364,0.583,1369,1.138,1378,1.391,1432,0.563,1442,0.619,1505,1.99,1567,0.606,1720,0.619,1727,0.554,1737,0.86,1756,0.573,1774,1.116,1775,0.504,1782,0.606,1791,1.042,1808,1.99,1811,0.546,1814,1.095,1819,2.238,1820,0.619,1821,2.44,1870,0.531,1882,0.487,1891,0.538,1965,0.711,1966,0.711,1967,0.687,1970,2.381,1971,2.381,1972,2.381,1973,1.335,1974,2.381,1975,2.03,1976,3.954,1979,2.381,1980,2.233,1981,2.381,1982,1.219,1983,0.711,1984,1.335,1985,1.252,1986,1.29,1987,1.335,1989,0.711,2001,0.711,2002,0.711,2003,0.711,2004,1.888,2005,1.888,2006,0.667,2007,0.711,2008,0.711,2009,1.29,2010,0.711,2011,0.711,2012,0.711,2013,0.711,2014,0.667,2015,0.687,2016,1.058,2017,1.953,2018,1.578,2019,0.619,2020,0.619,2021,0.619,2022,1.219,2023,0.606,2024,1.335,2025,0.711,2026,0.649,2027,1.219,2028,0.649,2029,1.219,2030,0.711,2031,1.335,2032,1.335,2033,4.53,2034,4.216,2035,2.381,2036,1.335,2037,1.335,2038,1.888,2039,1.335,2040,1.252,2041,0.711,2042,0.633,2043,0.667,2044,0.687,2045,0.583,2046,0.667,2047,0.619,2048,0.711,2049,0.711,2050,0.711,2051,1.335,2052,1.335,2053,0.619,2054,0.711,2055,0.711,2056,1.335,2057,1.335,2058,0.711,2059,0.711,2060,0.687,2061,0.711,2062,0.711,2063,0.711,2064,2.381,2065,0.711,2066,1.335,2067,0.711,2068,1.162,2069,1.29,2070,0.667,2071,0.711,2072,0.711,2073,0.711,2078,0.711,2079,0.711,2080,0.619,2081,0.619,2082,0.619,2083,0.619,2084,0.711,2085,0.711,2086,0.711,2087,0.711,2088,0.649,2089,0.711,2090,0.633,2091,0.711,2092,0.554,2093,0.619,2094,0.711,2095,0.649,2096,0.649,2097,0.667,2098,0.711,2099,0.711,2100,0.711,2101,0.711,2102,0.711,2103,0.711,2104,1.335,2105,1.335,2106,4.984,2107,4.984,2108,1.335,2111,4.493,2112,1.335,2113,1.335,2114,3.914,2115,1.219,2116,3.223,2117,1.335,2118,1.335,2119,0.687,2120,1.095,2121,0.667,2122,0.711,2123,0.687,2124,0.711,2125,0.711,2126,0.711,2127,0.687,2128,0.711,2129,0.711,2130,0.667,2131,0.711,2132,1.335,2270,2.757,2271,2.757,2272,1.546,2273,0.775]],["component/72",[1,0.442]],["title/73-1",[14,17.25,1882,28.914,2092,32.914]],["name/73-1",[]],["text/73-1",[]],["component/73-1",[]],["title/73-2",[585,19.025,1425,26.446,2135,34.005]],["name/73-2",[]],["text/73-2",[]],["component/73-2",[]],["title/73-3",[49,15.455,1737,27.191,1775,29.929]],["name/73-3",[]],["text/73-3",[]],["component/73-3",[]],["title/73-4",[48,19.694,810,28.656,909,26.633,2159,31.473]],["name/73-4",[]],["text/73-4",[]],["component/73-4",[]],["title/73",[2161,49.427]],["name/73",[2161,1.439]],["text/73",[1,1.729,7,2.818,12,0.788,14,1.762,18,1.922,21,1.49,24,1.647,28,2.366,38,1.012,41,1.573,44,1.555,48,3.102,49,1.579,52,1.555,60,1.49,61,0.963,64,1.547,65,1.637,66,1.468,76,1.364,84,1.348,85,1.045,88,1.188,89,1.14,90,1.473,93,1.254,103,0.941,108,1.149,117,2.317,185,2.316,189,0.981,196,1.266,197,0.834,218,0.963,226,1.082,259,1.38,263,1.517,270,1.826,288,1.719,294,1.278,297,1.158,300,1.364,301,2.001,311,1.131,315,1.319,351,1.414,354,2.018,365,1.348,371,1.658,372,1.879,377,1.319,388,1.278,391,1.364,417,1.188,429,1.106,440,1.73,445,2.503,447,1.333,448,3.363,515,1.23,524,1.348,549,1.414,557,1.291,558,1.254,569,1.452,581,1.319,585,0.877,606,2.398,626,2.654,630,1.131,636,4.503,637,3.507,649,1.625,652,1.473,659,1.433,691,1.397,744,2.291,745,2.091,759,2.61,765,1.414,774,1.625,788,1.473,789,3.947,808,1.305,809,1.542,810,1.542,812,1.839,813,1.985,824,3.674,844,1.348,868,5.075,869,1.266,877,1.433,886,1.693,899,1.09,909,1.433,978,1.333,1017,1.693,1041,1.542,1092,2.241,1098,1.397,1166,1.693,1425,1.219,1430,1.473,1440,1.052,1737,1.254,1775,1.38,1792,1.693,1818,1.693,1819,1.542,1821,3.264,1870,2.468,1882,1.333,1891,1.473,1899,3.752,1964,1.517,2016,1.542,2017,2.711,2018,3.602,2019,1.693,2020,1.693,2021,1.693,2023,1.658,2045,2.711,2047,2.878,2068,1.693,2080,1.693,2081,1.693,2082,1.693,2083,1.693,2092,1.517,2093,1.693,2120,1.596,2135,4.991,2159,1.693,2162,3.195,2163,1.945,2164,1.945,2165,1.945,2166,1.732,2167,1.945,2168,1.88,2169,1.945,2170,1.945,2171,1.945,2172,1.945,2173,1.945,2174,1.945,2175,1.776,2176,1.945,2177,1.945,2178,1.88,2179,1.945,2180,1.945,2181,1.945,2182,1.945,2183,1.945,2184,1.945,2185,1.945,2186,1.88,2187,1.945,2188,1.776,2189,1.945,2190,1.824,2191,1.945,2192,1.88,2193,1.945,2194,1.945,2195,1.945,2196,1.945,2197,1.945,2198,1.945]],["component/73",[1,0.442]],["title/74-1",[0,63.355]],["name/74-1",[]],["text/74-1",[]],["component/74-1",[]],["title/74",[1,19.237]],["name/74",[2,1.513]],["text/74",[1,1.735,3,2.916,4,2.437,5,2.916,6,2.916,7,1.244,8,2.916,9,2.916,10,1.828,11,1.998,12,2.866,13,2.338,14,1.885,15,3.324,16,3.52,17,3.06,18,3.324,19,2.889,20,1.387,21,1.315,22,1.956,23,2.818,24,2.296,25,2.538,26,2.916,27,1.622,28,1.357,29,2.662,30,2.392,31,1.47,32,2.601,33,1.936,34,1.498,35,2.275,36,2.148,37,2.538,38,1.517,39,1.507,40,2.62,41,2.72,42,2.916,43,1.828,44,2.169,45,2.044,46,2.392,47,1.897,48,3.114,49,1.068,50,2.916,51,2.735,52,1.372,53,2.428,54,2.485,55,2.392,56,3.274,57,2.839,58,4.53,59,2.311,60,1.315,61,1.444,62,2.044,63,1.956,64,1.365,65,2.283,66,1.295,67,2.275,68,1.322,69,1.658,70,2.35,71,2.735,72,2.916,73,2.311,74,2.068,75,1.599,76,2.044,77,1.861,78,1.536,79,2.916,80,1.844,81,1.936,82,2.338,83,1.977,84,2.021,85,1.567,86,2.916,87,2.437,88,1.78,89,1.709,90,4.328,91,2.538,92,2.916,93,3.684,94,1.879,95,2.311,96,2.916,97,2.916,98,1.546,99,2.916,100,2.538,101,2.538,102,2.485,103,1.411,104,2.916,105,2.916,106,2.916,107,2.392,108,1.723,109,2.597,110,1.998,111,2.916,112,2.916,113,2.538,114,2.735,115,2.916,116,2.818]],["component/74",[1,0.442]],["title/75-1",[476,33.381]],["name/75-1",[]],["text/75-1",[]],["component/75-1",[]],["title/75",[585,28.569]],["name/75",[2,1.513]],["text/75",[1,2.406,12,2.51,14,2.533,20,2.948,32,4.473,64,2.9,68,3.592,81,4.113,141,4.564,242,3.576,289,3.849,375,4.113,514,3.66,554,3.033,583,3.849,585,2.794,606,3.447,858,5.518,948,5.082,980,3.69,1440,3.352,2258,5.988,2274,7.173,2275,6.444,2276,7.806,2277,7.806]],["component/75",[1,0.442]],["title/76-1",[961,59.423]],["name/76-1",[]],["text/76-1",[]],["component/76-1",[]],["title/76-2",[554,24.795,925,45.11]],["name/76-2",[]],["text/76-2",[]],["component/76-2",[]],["title/76-3",[125,27.191,773,33.442,2278,43.884]],["name/76-3",[]],["text/76-3",[]],["component/76-3",[]],["title/76-4",[27,20.111,78,19.047,773,28.656,2278,37.603]],["name/76-4",[]],["text/76-4",[]],["component/76-4",[]],["title/76-5",[1440,34.279]],["name/76-5",[]],["text/76-5",[]],["component/76-5",[]],["title/76-6",[27,17.593,78,16.662,266,21.439,2190,29.662,2278,32.894]],["name/76-6",[]],["text/76-6",[]],["component/76-6",[]],["title/76-7",[52,23.836,1440,27.404]],["name/76-7",[]],["text/76-7",[]],["component/76-7",[]],["title/76-8",[1364,51.971]],["name/76-8",[]],["text/76-8",[]],["component/76-8",[]],["title/76-9",[420,37.733]],["name/76-9",[]],["text/76-9",[]],["component/76-9",[]],["title/76-10",[2279,73.351]],["name/76-10",[]],["text/76-10",[]],["component/76-10",[]],["title/76-11",[242,24.351,870,36.73,2161,32.914]],["name/76-11",[]],["text/76-11",[]],["component/76-11",[]],["title/76",[1440,22.827,2275,43.884,2280,43.884]],["name/76",[2275,1.919]],["text/76",[7,3.816,18,0.95,27,1.582,28,1.324,32,0.922,33,1.084,34,1.94,41,1.353,44,2.126,49,1.042,52,1.338,56,1.629,57,1.006,60,0.736,64,0.764,66,0.725,67,1.274,68,1.712,73,2.254,75,1.56,78,1.99,81,1.084,82,1.443,84,2.618,103,1.828,114,1.532,125,1.053,155,1.491,164,1.173,166,0.928,169,1.053,183,2.153,185,0.878,189,0.823,212,2.095,218,0.809,242,0.943,261,0.89,266,3.063,270,0.902,276,1.928,293,1.365,305,1.095,312,1.365,315,2.561,329,0.928,377,1.928,400,1.188,420,1.694,440,0.855,514,1.68,515,1.799,538,2.153,549,1.188,554,0.799,557,1.084,558,1.053,585,1.282,596,0.957,626,1.006,630,0.95,631,2.86,649,2.377,653,2.667,655,1.219,656,1.203,744,1.132,771,1.294,773,4.457,813,0.981,870,2.476,876,1.365,898,1.392,899,0.915,904,1.578,908,1.015,925,1.454,948,1.34,952,1.033,961,1.532,980,2.25,1121,1.274,1364,4.612,1381,1.532,1435,1.294,1440,3.042,1453,1.422,1505,1.365,1725,1.578,1789,1.578,1797,1.491,1808,1.365,1811,1.255,1812,1.532,1837,1.294,1846,1.454,1891,2.153,1931,1.491,1932,1.532,1975,1.392,1980,1.532,2033,1.422,2090,1.454,2142,1.532,2161,1.274,2175,1.491,2190,4.804,2245,2.667,2249,1.699,2250,2.958,2251,1.699,2252,1.699,2253,1.699,2254,1.699,2274,1.891,2275,7.936,2278,7.518,2279,7.415,2280,2.958,2281,2.058,2282,2.058,2283,2.058,2284,2.058,2285,2.058,2286,2.058,2287,2.058,2288,2.058,2289,2.058,2290,2.058,2291,2.058,2292,2.058,2293,2.058,2294,2.058,2295,2.058,2296,2.058,2297,2.058,2298,2.058,2299,2.058,2300,2.058,2301,2.058,2302,2.058,2303,2.058,2304,2.058,2305,2.058,2306,2.058,2307,2.058,2308,2.058,2309,2.058,2310,2.058,2311,2.058,2312,2.058,2313,2.058,2314,2.058,2315,2.058,2316,2.058,2317,2.058,2318,2.058,2319,2.058,2320,2.058,2321,2.058,2322,2.058,2323,2.058,2324,2.058,2325,2.058,2326,2.058,2327,2.058,2328,2.058,2329,3.583,2330,3.583,2331,2.058,2332,2.058,2333,2.058,2334,2.058,2335,2.058,2336,1.891,2337,1.891,2338,1.891,2339,1.781,2340,1.633,2341,2.058,2342,2.058,2343,2.058,2344,2.058,2345,2.058,2346,2.058,2347,2.058,2348,2.058,2349,2.058,2350,2.058,2351,2.058,2352,2.058,2353,1.699,2354,1.891,2355,2.058,2356,2.058,2357,2.058,2358,2.058,2359,2.058,2360,2.058,2361,2.058,2362,1.699,2363,4.759,2364,2.058,2365,2.058,2366,2.058,2367,2.058,2368,2.058,2369,2.058,2370,2.058]],["component/76",[1,0.442]],["title/77-1",[56,20.708,579,24.776,583,22.46,980,21.531]],["name/77-1",[]],["text/77-1",[]],["component/77-1",[]],["title/77-2",[2133,65.899]],["name/77-2",[]],["text/77-2",[]],["component/77-2",[]],["title/77-3",[22,21.213,56,18.115,583,19.648,2134,31.624,2135,25.49]],["name/77-3",[]],["text/77-3",[]],["component/77-3",[]],["title/77-4",[56,20.708,63,24.249,859,32.197,2136,39.421]],["name/77-4",[]],["text/77-4",[]],["component/77-4",[]],["title/77-5",[1116,37.822,1440,27.404]],["name/77-5",[]],["text/77-5",[]],["component/77-5",[]],["title/77",[583,39.361]],["name/77",[583,1.146]],["text/77",[1,0.934,7,3.648,14,1.258,21,1.387,24,1.533,49,1.127,52,1.447,56,4.604,68,2.179,89,1.803,131,2.885,161,4.303,214,1.862,261,2.619,264,1.749,270,1.699,280,1.878,283,2.042,288,3.078,291,3.589,309,1.878,314,2.209,320,2.297,329,1.749,356,1.515,358,2.4,373,1.862,382,2.523,440,3.097,460,2.363,509,2.237,516,2.132,558,1.982,579,2.108,580,3.541,583,5.311,585,2.668,606,2.674,619,2.622,630,2.796,744,3.331,745,1.946,845,2.57,859,2.739,875,3.75,878,2.363,899,1.723,920,2.363,925,2.739,980,2.863,1116,2.297,1165,4.388,1324,2.885,1326,2.885,1440,1.664,1453,2.678,1737,3.098,1811,2.363,1837,2.438,1846,2.739,1870,2.297,1882,2.108,1944,5.55,1975,2.622,2033,2.678,2120,3.943,2133,6.154,2134,3.076,2135,2.479,2137,3.561,2138,3.354,2139,5.242,2140,3.354,2141,3.354,2142,2.885,2143,3.076,2144,3.354,2145,3.354,2146,3.354,2147,3.354,2148,3.354,2149,3.561,2150,3.354,2151,3.561,2152,3.561,2153,3.354,2154,3.561,2155,3.561,2156,5.565,2157,3.199,2158,3.561]],["component/77",[1,0.442]],["title/78-1",[117,44.415]],["name/78-1",[]],["text/78-1",[]],["component/78-1",[]],["title/78-2",[118,63.355]],["name/78-2",[]],["text/78-2",[]],["component/78-2",[]],["title/78-3",[119,50.65,120,26.687]],["name/78-3",[]],["text/78-3",[]],["component/78-3",[]],["title/78-4",[121,41.549,122,31.468]],["name/78-4",[]],["text/78-4",[]],["component/78-4",[]],["title/78-5",[13,25.697,121,41.549]],["name/78-5",[]],["text/78-5",[]],["component/78-5",[]],["title/78-6",[123,39.713]],["name/78-6",[]],["text/78-6",[]],["component/78-6",[]],["title/78",[124,27.039,125,32.644]],["name/78",[124,0.553,125,0.667]],["text/78",[1,1.334,13,1.013,14,2.365,16,2.082,18,1.966,21,2.332,28,1.573,31,1.007,34,1.026,38,2.689,39,1.032,40,1.135,41,1.608,43,1.252,49,2.45,56,1.144,57,1.23,61,0.989,64,1.582,66,0.887,68,0.905,69,1.922,80,1.263,82,1.013,83,1.354,85,1.073,88,2.064,94,1.287,103,2.502,107,1.638,108,1.18,110,1.369,117,2.37,120,1.052,122,2.73,123,3.241,124,2.76,125,1.287,126,3.38,127,1.997,128,2.78,129,1.434,130,1.702,131,1.873,132,1.997,133,2.943,134,1.558,135,1.997,136,5.035,137,3.38,138,1.854,139,1.93,140,1.144,141,1.471,142,1.61,143,1.669,144,2.825,145,1.997,146,1.873,147,2.292,148,1.007,149,1.739,150,1.471,151,1.739,152,1.997,153,1.997,154,1.739,155,1.823,156,1.997,157,1.997,158,3.17,159,1.512,160,3.267,161,3.196,162,3.583,163,2.398,164,1.434,165,3.38,166,1.135,167,3.668,168,1.997,169,1.287,170,4.395,171,1.512,172,1.739,173,1.93,174,1.997,175,1.873,176,1.997,177,1.93,178,1.997,179,1.873,180,1.997,181,1.417,182,2.724,183,2.56,184,1.997,185,1.817,186,1.103,187,1.313,188,1.369,189,1.704,190,1.997,191,2.138,192,2.773,193,3.605,194,1.739,195,1.073,196,1.3,197,1.884,198,1.739,199,1.702,200,1.369,201,1.93,202,1.369,203,2.73,204,1.34,205,1.997,206,1.452,207,1.452,208,1.127,209,1.23,210,1.873,211,1.93,212,2.49,213,1.997,214,1.209,215,1.583,216,1.997,217,1.073,218,0.989,219,1.997,220,1.583,221,1.583,222,1.275,223,1.313,224,1.997,225,1.997,226,1.111,227,1.951,228,1.997,229,1.739,230,2.773,231,1.997,232,1.997,233,1.61,234,1.739,235,1.739,236,1.739,237,1.739,238,1.739,239,1.491,240,1.3,241,1.638,242,1.153,243,1.144,244,2.178,245,2.077,246,1.823,247,2.077,248,2.178,249,2.679,250,1.823,251,1.34,252,1.997,253,1.997,254,1.997,255,1.997,256,1.997,257,1.369,258,1.558,259,1.417,260,1.997,261,1.088,262,1.638,263,1.558,264,1.135,265,1.997]],["component/78",[1,0.442]],["title/79-1",[38,21.945,185,22.673,266,28.602]],["name/79-1",[]],["text/79-1",[]],["component/79-1",[]],["title/79-2",[267,31.624,268,30.567,269,31.624,270,17.469,271,28.87]],["name/79-2",[]],["text/79-2",[]],["component/79-2",[]],["title/79-3",[34,21.67,49,15.455,120,22.229]],["name/79-3",[]],["text/79-3",[]],["component/79-3",[]],["title/79-4",[85,22.673,120,22.229,203,26.211]],["name/79-4",[]],["text/79-4",[]],["component/79-4",[]],["title/79-5",[120,26.687,272,43.174]],["name/79-5",[]],["text/79-5",[]],["component/79-5",[]],["title/79-6",[120,26.687,273,35.931]],["name/79-6",[]],["text/79-6",[]],["component/79-6",[]],["title/79-7",[274,37.822,275,39.515]],["name/79-7",[]],["text/79-7",[]],["component/79-7",[]],["title/79-8",[276,42.951]],["name/79-8",[]],["text/79-8",[]],["component/79-8",[]],["title/79",[64,23.706,207,36.832]],["name/79",[120,0.545,273,0.734]],["text/79",[1,0.811,7,1.834,12,0.43,13,0.539,14,0.434,15,0.618,20,0.922,21,1.938,24,0.965,27,0.591,28,0.902,30,0.872,31,1.347,32,1.094,33,0.705,34,0.995,36,1.427,37,0.925,38,1.714,40,1.102,41,0.506,43,0.666,44,0.5,45,0.745,47,1.738,49,1.403,52,1.257,55,0.872,57,0.654,62,0.745,63,2.21,64,2.203,65,1.898,66,2.639,67,0.829,68,2.694,69,1.102,75,1.465,85,1.771,89,1.136,93,0.685,94,0.685,103,2.08,108,0.628,110,0.728,120,3.656,134,0.829,138,1.063,140,2.462,144,0.888,161,0.773,163,2.337,166,1.519,172,0.925,181,1.895,185,4.088,188,1.328,189,0.977,197,1.145,200,0.728,202,0.728,203,4.407,207,0.773,208,1.094,209,0.654,214,0.643,217,0.571,227,1.542,240,0.691,242,0.613,243,0.609,246,0.97,251,0.713,261,0.579,266,2.914,273,2.718,277,3.143,278,1.226,279,1.652,280,3.629,281,3.088,282,0.793,283,1.286,284,0.872,285,0.654,286,1.604,287,1.278,288,1.008,289,0.66,290,1.755,291,2.861,292,2.277,293,0.888,294,1.755,295,1.154,296,2.052,297,0.633,298,1.769,299,0.925,300,1.358,301,0.643,302,0.925,303,1.619,304,2.191,305,1.3,306,1.062,307,0.925,308,1.062,309,0.649,310,0.925,311,1.553,312,3.592,313,0.906,314,0.763,315,1.314,316,0.996,317,0.888,318,1.062,319,1.536,320,1.447,321,0.745,322,1.398,323,2.325,324,1.062,325,0.925,326,1.409,327,2.277,328,1.062,329,1.519,330,1.062,331,1.062,332,1.062,333,1.062,334,1.062,335,1.062,336,1.062,337,1.062,338,1.062,339,1.062,340,1.062,341,1.062,342,1.062,343,1.062,344,1.062,345,1.062,346,1.062,347,1.062,348,1.062,349,1.062,350,0.906,351,0.773,352,1.687,353,0.925,354,1.183,355,1.062,356,0.523,357,1.589,358,1.512,359,1.489,360,0.816,361,1.938,362,2.868,363,0.946,364,1.173,365,1.343,366,1.358,367,0.906,368,1.273,369,0.805,370,1.062,371,0.906,372,1.102,373,1.173,374,0.816,375,2.187,376,1.261,377,1.314,378,0.906,379,2.868,380,1.062,381,4.086,382,1.589,383,1.062,384,1.062,385,2.052,386,0.829,387,1.938,388,1.273,389,1.062,390,0.783,391,0.745,392,0.691,393,3.831,394,1.062,395,1.062,396,1.566,397,1.062,398,0.842,399,1.062,400,0.773,401,1.938,402,1.783,403,1.938,404,1.062,405,2.671,406,1.589,407,0.925,408,0.763,409,0.773,410,1.619,411,0.736,412,1.062,413,1.355,414,0.996,415,1.489,416,1.938,417,0.649,418,0.925,419,1.409,420,1.154,421,1.062,422,0.654,423,0.705,424,0.842,425,0.925,426,1.062,427,0.97,428,0.925,429,0.604,430,1.062,431,0.816,432,1.062,433,0.946,434,1.062,435,1.062,436,0.906,437,1.062,438,1.062,439,0.638,440,0.556,441,0.996,442,1.062,443,1.062,444,1.062,445,0.805,446,0.925,447,0.728,448,0.829,449,1.062,450,1.062,451,1.027,452,0.805,453,1.062,454,0.925,455,1.062,456,1.062,457,1.619,458,0.691,459,1.062,460,0.816,461,0.925,462,1.062,463,1.062,464,1.062,465,0.925,466,1.062,467,1.062,468,1.062,469,0.856,470,0.97,471,1.062,472,1.062,473,0.996,474,0.773,475,0.856]],["component/79",[1,0.442]],["title/80-1",[476,33.381]],["name/80-1",[]],["text/80-1",[]],["component/80-1",[]],["title/80-2",[477,40.448]],["name/80-2",[]],["text/80-2",[]],["component/80-2",[]],["title/80-3",[124,33.822]],["name/80-3",[]],["text/80-3",[]],["component/80-3",[]],["title/80",[478,32.341]],["name/80",[478,0.942]],["text/80",[7,0.791,12,2.613,14,2.468,15,1.078,20,0.882,21,0.836,24,0.924,28,2.292,31,0.935,32,2.779,38,0.964,41,1.51,44,1.493,47,1.206,49,1.804,52,1.493,53,3.18,60,2.496,61,3.195,68,1.438,69,1.804,73,1.469,77,2.655,78,0.977,82,0.941,85,0.996,94,1.195,103,1.535,124,2.629,125,1.195,133,1.614,136,2.762,138,1.017,141,1.366,142,1.494,148,1.6,161,2.307,162,2.882,166,1.054,167,1.315,191,2.007,198,1.614,217,3.243,218,0.918,222,2.026,223,1.218,239,1.384,242,1.07,243,1.062,278,1.173,280,1.132,284,1.521,285,2.561,286,2.497,287,0.887,294,1.218,307,1.614,311,1.078,322,0.97,326,2.307,329,1.054,356,2.048,359,1.424,364,1.122,366,1.3,369,3.149,372,2.365,376,1.206,385,1.424,386,1.446,388,1.218,396,1.087,408,1.331,413,0.941,419,1.348,420,1.104,422,1.142,423,1.231,431,2.438,439,1.113,457,1.549,458,2.065,477,4.535,478,2.514,479,1.854,480,1.854,481,1.614,482,1.384,483,1.854,484,1.854,485,1.739,486,1.494,487,1.521,488,2.651,489,3.173,490,1.854,491,1.271,492,3.869,493,1.122,494,2.762,495,1.854,496,1.854,497,1.122,498,1.854,499,1.854,500,3.797,501,1.366,502,1.692,503,2.896,504,1.854,505,1.331,506,1.614,507,3.797,508,1.854,509,1.348,510,4.039,511,1.271,512,3.621,513,1.989,514,1.095,515,1.173,516,2.199,517,1.331,518,1.549,519,1.854,520,1.58,521,1.692,522,1.792,523,1.854,524,1.285,525,1.3,526,1.854,527,2.762,528,2.515,529,1.271,530,1.614,531,1.854,532,1.854,533,3.067,534,4.159,535,1.792,536,1.854,537,1.854,538,3.149,539,1.854,540,1.854,541,1.854,542,1.854,543,1.854,544,1.854,545,1.854,546,1.095,547,1.854,548,1.58,549,1.348,550,1.854,551,1.424,552,1.854,553,1.469,554,0.908,555,1.692,556,1.331,557,1.231,558,1.195,559,1.854,560,1.854,561,1.257,562,1.521,563,1.854,564,1.854,565,1.854]],["component/80",[1,0.442]],["title/81-1",[38,26.346,39,26.18]],["name/81-1",[]],["text/81-1",[]],["component/81-1",[]],["title/81-2",[38,26.346,61,25.087]],["name/81-2",[]],["text/81-2",[]],["component/81-2",[]],["title/81-3",[38,21.945,138,23.142,185,22.673]],["name/81-3",[]],["text/81-3",[]],["component/81-3",[]],["title/81-4",[41,15.048,120,16.662,207,22.997,273,22.434,402,17.111]],["name/81-4",[]],["text/81-4",[]],["component/81-4",[]],["title/81-5",[66,22.491,566,55.231]],["name/81-5",[]],["text/81-5",[]],["component/81-5",[]],["title/81-6",[12,25.666]],["name/81-6",[]],["text/81-6",[]],["component/81-6",[]],["title/81",[288,32.954]],["name/81",[288,0.959]],["text/81",[1,1.201,12,1.908,13,0.88,14,0.709,15,1.009,17,1.151,18,1.009,20,1.426,21,2.397,24,1.493,31,1.511,32,0.979,34,2.031,36,2.207,38,3.026,39,0.896,40,0.986,41,1.882,43,1.878,44,1.861,47,1.129,49,2.131,52,0.816,53,2.801,55,1.423,56,1.716,57,1.068,60,1.351,61,1.959,62,1.216,64,0.812,66,2.769,68,2.41,69,0.986,75,0.951,77,1.913,78,1.578,81,1.151,82,0.88,85,0.932,87,1.449,88,1.059,103,3.191,109,1.545,110,1.189,120,0.914,121,1.423,124,1.599,138,1.643,140,0.993,143,1.449,147,1.176,150,1.278,162,1.202,163,1.23,166,0.986,167,1.23,182,1.398,185,3.543,186,1.655,187,1.969,189,1.994,191,1.097,192,1.423,195,2.857,196,1.129,199,1.478,201,2.896,204,2.01,207,2.179,208,2.232,218,0.859,222,1.107,230,1.423,233,1.398,250,1.583,266,1.176,270,0.958,275,1.353,277,2.458,280,3.552,281,1.398,284,1.423,285,1.068,288,1.558,300,1.216,304,1.423,305,2.01,309,1.059,319,3.732,329,1.703,358,1.353,360,2.302,364,1.05,365,1.202,366,1.216,369,1.313,372,0.986,373,1.05,378,1.478,396,1.017,400,2.179,402,0.938,406,1.423,417,1.829,420,1.784,422,1.068,423,1.151,429,0.986,440,0.908,452,2.269,460,1.333,477,2.525,478,2.404,482,1.295,486,1.398,487,1.423,492,0.945,493,1.05,500,1.583,502,1.583,507,1.583,510,1.423,521,1.583,529,1.189,554,1.467,561,1.176,567,1.278,568,1.891,569,1.295,570,1.891,571,2.741,572,1.313,573,1.891,574,1.423,575,1.333,576,1.449,577,1.891,578,1.891,579,1.189,580,1.278,581,1.176,582,3.267,583,1.077,584,1.891,585,1.783,586,2.81,587,2.337,588,1.804,589,1.423,590,3.267,591,1.583,592,1.891,593,1.375,594,3.267,595,1.804,596,1.756,597,1.891,598,1.51,599,1.676,600,1.583,601,1.891,602,1.627,603,1.891,604,1.245,605,1.583,606,0.965,607,1.891,608,1.891,609,1.891,610,1.313,611,1.545,612,1.891,613,1.804,614,1.891,615,1.891,616,1.23,617,1.804,618,1.583,619,1.478,620,1.891,621,1.891,622,1.545,623,1.375,624,1.627,625,1.804,626,1.068,627,1.398,628,1.423,629,1.891,630,1.009,631,1.313,632,1.676,633,1.478,634,1.545,635,1.891]],["component/81",[1,0.442]],["title/82-1",[7,13.495,440,16.555,623,25.068,636,19.648,637,19.476]],["name/82-1",[]],["text/82-1",[]],["component/82-1",[]],["title/82-2",[1,15.38,638,33.626]],["name/82-2",[]],["text/82-2",[]],["component/82-2",[]],["title/82-3",[478,25.855,639,32.337]],["name/82-3",[]],["text/82-3",[]],["component/82-3",[]],["title/82-4",[195,19.428,196,23.525,572,27.376,639,23.08]],["name/82-4",[]],["text/82-4",[]],["component/82-4",[]],["title/82-5",[1,12.811,440,22.086,640,42.19]],["name/82-5",[]],["text/82-5",[]],["component/82-5",[]],["title/82-6",[1,15.38,641,44.096]],["name/82-6",[]],["text/82-6",[]],["component/82-6",[]],["title/82",[561,28.602,616,29.929,642,36.73]],["name/82",[643,1.844]],["text/82",[1,0.642,7,4.115,10,0.733,13,1.073,21,0.953,27,1.176,28,1.347,32,0.66,34,1.086,40,0.665,44,0.55,49,0.428,52,0.55,63,2.379,66,0.519,68,0.53,69,0.665,74,2.053,75,1.587,83,0.793,85,0.629,93,0.754,103,0.566,110,0.802,123,0.733,128,0.74,149,1.018,166,2.017,167,1.5,169,0.754,194,1.018,195,3.211,196,2.67,199,1.802,204,0.785,240,0.761,243,0.67,251,0.785,257,0.802,261,0.637,270,0.646,274,0.873,276,0.793,288,0.608,309,0.714,315,0.793,321,0.82,329,0.665,354,0.714,356,0.576,362,1.841,417,0.714,420,1.259,425,1.018,429,0.665,440,3.263,454,1.018,458,1.376,477,3.631,478,2.094,497,1.28,509,0.851,525,0.82,538,1.601,551,0.899,554,0.573,561,2.404,572,1.601,574,0.959,581,0.793,596,1.239,618,1.068,623,0.927,631,1.601,636,1.798,637,0.72,638,1.404,639,3.98,641,2.519,642,7.875,644,1.131,645,0.862,646,1.097,647,1.17,648,1.097,649,0.978,650,1.17,651,1.097,652,0.886,653,1.097,654,1.17,655,1.579,656,0.862,657,0.899,658,1.841,659,1.558,660,1.17,661,3.547,662,1.17,663,3.547,664,2.893,665,2.114,666,1.17,667,1.17,668,1.841,669,2.519,670,3.327,671,1.17,672,1.17,673,1.17,674,1.17,675,1.17,676,1.275,677,1.17,678,2.114,679,1.17,680,2.114,681,1.17,682,1.17,683,1.17,684,1.131,685,1.17,686,1.17,687,1.17,688,2.893,689,1.17,690,1.17,691,0.84,692,1.17,693,1.17,694,1.17,695,1.17,696,1.17,697,1.17,698,1.17,699,1.17,700,1.17,701,1.983,702,0.927,703,1.354,704,1.17,705,1.17,706,2.044,707,1.17,708,2.044,709,1.65,710,1.17,711,1.17,712,1.17,713,1.17,714,1.17,715,5.687,716,1.17,717,1.17,718,1.17,719,1.17,720,1.17,721,1.17,722,1.17,723,1.17,724,1.17,725,1.17,726,1.17,727,1.17,728,1.17,729,1.17,730,1.17,731,1.17,732,1.17,733,1.17,734,1.17,735,1.17,736,1.17,737,1.17,738,1.17,739,1.17,740,1.17,741,1.17,742,1.17,743,1.17,744,2.005,745,0.74,746,1.17,747,5.427,748,1.17,749,1.17,750,2.893,751,1.17,752,2.114,753,1.17,754,2.114,755,1.17,756,1.17,757,1.17,758,0.747,759,0.708,760,1.883,761,1.17,762,1.018,763,1.018,764,1.018,765,0.851,766,1.131,767,2.893,768,2.114,769,1.17,770,1.17,771,0.927,772,0.978,773,0.927,774,0.978,775,1.17,776,2.893,777,1.17,778,1.17,779,1.17,780,1.17,781,1.17,782,1.17,783,1.042,784,0.978,785,1.17,786,1.17,787,4.581,788,0.886,789,0.811,790,1.17,791,1.17,792,1.17,793,1.17,794,1.17,795,1.17,796,1.17,797,1.17,798,1.17,799,1.17,800,1.17,801,1.17,802,1.17,803,1.17,804,1.17,805,1.17,806,0.913,807,1.17,808,2.379,809,0.927,810,0.927,811,1.018,812,1.176,813,1.27,814,1.018,815,1.018]],["component/82",[1,0.442]],["title/83-1",[195,27.22,571,35.103]],["name/83-1",[]],["text/83-1",[]],["component/83-1",[]],["title/83-2",[20,24.101,195,27.22]],["name/83-2",[]],["text/83-2",[]],["component/83-2",[]],["title/83-3",[195,27.22,571,35.103]],["name/83-3",[]],["text/83-3",[]],["component/83-3",[]],["title/83-4",[478,32.341]],["name/83-4",[]],["text/83-4",[]],["component/83-4",[]],["title/83-5",[276,42.951]],["name/83-5",[]],["text/83-5",[]],["component/83-5",[]],["title/83",[195,27.22,580,37.315]],["name/83",[195,0.991]],["text/83",[7,0.717,11,0.624,12,0.681,13,1.479,14,0.687,15,0.978,16,2.621,17,1.936,18,0.978,19,0.57,20,2.824,21,0.41,22,0.61,24,1.167,27,0.935,28,0.782,31,1.181,32,0.949,33,0.604,34,1.203,35,1.311,39,0.869,40,0.517,41,1.114,43,2.668,44,1.102,45,1.178,46,0.746,47,1.094,48,2.983,49,1.688,53,1.536,57,1.035,59,0.721,60,1.541,63,1.127,64,0.426,65,0.832,66,1.715,76,4.007,77,1.861,80,0.576,82,0.462,88,0.556,89,1.373,91,1.463,94,0.586,95,0.721,98,0.483,103,0.44,108,0.538,122,1.811,123,0.57,128,1.063,129,1.207,134,1.311,140,2.212,141,0.67,148,1.181,150,0.67,151,0.792,159,0.689,162,2.021,163,0.645,167,0.645,171,0.689,183,0.689,185,1.259,189,0.459,191,1.481,195,3.298,203,0.565,204,1.571,206,0.662,214,1.418,218,0.451,233,0.733,240,1.524,242,0.97,258,0.71,264,0.517,272,2.485,276,0.617,280,1.026,282,1.255,283,1.116,285,1.796,286,1.009,287,0.435,288,0.473,294,0.598,295,0.542,296,1.291,301,1.018,302,0.792,305,0.61,311,0.529,313,0.776,315,1.139,320,0.679,322,0.476,323,0.792,326,1.222,329,0.517,350,0.776,353,1.463,356,0.828,358,0.71,359,0.699,366,0.638,367,0.776,373,2.069,374,0.699,375,0.604,376,0.592,377,1.588,379,0.792,385,1.291,386,1.311,392,0.592,396,0.985,400,1.703,402,1.849,407,0.792,409,0.662,411,1.165,417,1.026,419,0.662,420,1.001,422,0.56,423,0.604,424,0.721,429,0.517,452,0.689,460,0.699,465,0.792,474,1.703,476,0.886,477,1.861,478,2.173,482,2.552,493,2.338,497,0.551,509,0.662,510,5.997,514,0.538,520,0.776,524,1.165,527,0.792,528,0.721,529,1.152,530,2.976,538,0.689,548,0.776,549,1.222,551,1.291,554,0.823,557,0.604,569,0.679,571,4.382,575,2.626,579,0.624,581,0.617,585,0.758,591,0.831,596,0.533,611,0.81,627,0.733,630,0.529,637,1.796,638,0.604,747,0.792,758,0.581,772,0.76,816,1.681,817,0.879,818,0.91,819,0.792,820,0.91,821,1.379,822,0.645,823,0.792,824,0.776,825,0.91,826,0.831,827,0.792,828,0.879,829,0.91,830,0.91,831,1.238,832,0.853,833,4.455,834,0.91,835,0.879,836,0.853,837,1.433,838,1.625,839,2.437,840,0.91,841,1.625,842,1.682,843,0.91,844,2.021,845,0.76,846,0.91,847,0.853,848,0.91,849,0.91,850,4.991,851,0.879,852,0.91,853,0.91,854,1.291,855,0.721,856,0.879,857,1.463,858,3.439,859,0.81,860,1.996,861,0.91,862,0.776,863,0.91,864,1.888,865,0.733,866,0.91,867,2.818,868,0.699,869,1.094,870,0.792,871,0.91,872,0.91,873,2.916,874,0.91,875,2.275,876,0.76,877,0.67,878,0.699,879,0.91,880,2.24,881,0.91,882,0.91,883,3.227,884,2.197,885,0.81,886,2.976,887,0.91,888,0.91,889,0.879,890,0.598,891,0.91,892,1.576,893,0.879,894,1.576,895,0.699,896,0.645,897,0.91,898,0.776,899,1.634,900,1.576,901,0.91,902,0.831,903,3.418,904,1.625,905,0.91,906,0.853,907,0.91,908,0.565,909,0.67,910,0.91,911,0.879,912,0.653,913,0.91,914,0.91,915,0.721,916,0.91,917,0.91,918,0.746,919,0.91,920,1.291,921,0.879,922,0.91,923,0.91,924,0.91,925,1.497,926,0.91,927,0.91,928,0.91,929,2.916,930,1.311,931,0.76,932,0.91,933,0.91,934,1.681,935,0.879,936,0.853,937,0.81,938,0.91,939,0.776,940,0.91,941,0.91,942,0.776,943,0.831,944,0.91,945,0.91,946,0.91,947,0.853,948,0.746,949,0.831,950,0.91,951,0.91,952,0.576,953,0.721,954,0.91,955,0.81,956,0.91,957,0.879,958,0.91,959,0.91,960,0.91,961,0.853,962,0.91,963,0.746]],["component/83",[1,0.442]],["title/84-1",[476,33.381]],["name/84-1",[]],["text/84-1",[]],["component/84-1",[]],["title/84-2",[217,22.673,218,20.897,513,26.446]],["name/84-2",[]],["text/84-2",[]],["component/84-2",[]],["title/84-3",[439,30.414,964,40.149]],["name/84-3",[]],["text/84-3",[]],["component/84-3",[]],["title/84-4",[13,25.697,203,31.468]],["name/84-4",[]],["text/84-4",[]],["component/84-4",[]],["title/84-5",[148,25.541,965,37.315]],["name/84-5",[]],["text/84-5",[]],["component/84-5",[]],["title/84-6",[290,33.288,965,37.315]],["name/84-6",[]],["text/84-6",[]],["component/84-6",[]],["title/84-7",[203,31.468,966,37.315]],["name/84-7",[]],["text/84-7",[]],["component/84-7",[]],["title/84-8",[967,44.096,968,40.149]],["name/84-8",[]],["text/84-8",[]],["component/84-8",[]],["title/84",[82,25.697,197,21.719]],["name/84",[197,0.444,969,0.901]],["text/84",[7,2.206,12,0.809,13,2.23,14,2.735,20,2.091,21,1.524,28,1.573,41,1.608,49,2.3,52,0.94,53,1.781,57,1.23,65,0.989,66,0.887,78,1.052,140,2.517,148,1.704,166,1.135,191,2.138,197,2.48,200,1.369,203,3.212,217,3.375,218,1.674,227,3.624,257,1.369,261,1.088,262,1.638,278,2.138,286,3.473,287,0.956,290,1.313,295,1.189,322,2.301,356,0.983,368,1.313,373,1.209,396,1.981,402,1.081,408,2.427,413,1.013,420,1.189,439,4.551,491,5.021,501,1.471,511,3.012,513,3.241,546,1.18,554,0.978,583,1.241,587,2.637,638,1.326,812,1.111,837,1.702,890,2.888,908,1.241,952,4.449,964,3.483,965,1.471,966,2.49,968,3.483,970,1.997,971,1.739,972,1.997,973,1.997,974,2.221,975,3.801,976,5.467,977,1.558,978,1.369,979,1.313,980,1.189,981,1.153,982,1.997,983,4.998,984,1.997,985,1.93,986,1.471,987,1.434,988,4.395,989,3.38,990,4.395,991,1.535,992,1.739,993,3.38,994,1.997,995,2.943,996,2.158,997,1.997,998,1.93,999,1.583,1000,1.739,1001,1.583,1002,3.38,1003,1.739,1004,1.558,1005,1.997,1006,1.997,1007,1.997,1008,1.997,1009,1.997,1010,1.997,1011,1.997,1012,1.997,1013,1.997,1014,1.997,1015,1.739,1016,1.997,1017,1.739,1018,1.583,1019,1.997,1020,1.583,1021,1.997,1022,1.997,1023,1.997,1024,1.997,1025,1.997,1026,1.997,1027,1.997,1028,1.997,1029,1.997,1030,1.997,1031,1.997,1032,1.997,1033,1.558,1034,1.702,1035,3.38,1036,1.997,1037,1.997,1038,3.826,1039,1.997,1040,1.354,1041,1.583,1042,1.739,1043,1.638,1044,1.997,1045,1.739,1046,1.997,1047,1.739,1048,3.38,1049,1.354]],["component/84",[1,0.442]],["title/85-1",[476,33.381]],["name/85-1",[]],["text/85-1",[]],["component/85-1",[]],["title/85-2",[287,24.236,981,29.234]],["name/85-2",[]],["text/85-2",[]],["component/85-2",[]],["title/85-3",[322,26.515,981,29.234]],["name/85-3",[]],["text/85-3",[]],["component/85-3",[]],["title/85-4",[413,25.697,981,29.234]],["name/85-4",[]],["text/85-4",[]],["component/85-4",[]],["title/85-5",[981,29.234,996,32.337]],["name/85-5",[]],["text/85-5",[]],["component/85-5",[]],["title/85-6",[812,23.47,981,24.351,1049,28.602]],["name/85-6",[]],["text/85-6",[]],["component/85-6",[]],["title/85",[215,40.149,1050,31.468]],["name/85",[812,0.576,1050,0.643]],["text/85",[1,1.223,7,3.14,13,2.992,14,2.657,15,1.434,16,1.519,19,1.546,20,3.887,21,2.303,28,1.875,31,2.032,44,1.896,49,2.555,66,1.095,68,1.826,85,3.169,208,1.392,240,1.605,270,1.362,285,1.519,287,1.928,289,1.532,295,3.042,311,1.434,322,1.291,354,1.506,364,1.493,368,1.621,375,2.675,376,3.324,390,1.817,392,1.605,396,3.456,408,1.771,413,1.251,415,1.895,419,3.714,431,1.895,513,2.525,546,1.457,554,1.207,567,1.817,575,1.895,606,1.372,669,5.658,758,1.575,759,3.57,811,2.147,812,2.241,823,3.507,878,1.895,908,1.532,931,2.061,939,2.102,964,4.048,974,1.621,975,3.875,979,3.875,981,3.403,1050,3.663,1051,3.894,1052,2.466,1053,2.466,1054,2.466,1055,2.102,1056,2.384,1057,2.466,1058,4.029,1059,2.102,1060,2.061,1061,3.507,1062,2.313,1063,3.193,1064,3.367,1065,2.466,1066,1.924,1067,3.434,1068,2.466,1069,2.384,1070,5.107,1071,4.029,1072,5.107,1073,2.313,1074,4.029,1075,2.466,1076,2.466,1077,2.466,1078,2.466,1079,4.029,1080,2.466,1081,2.466,1082,3.507,1083,4.029,1084,2.384,1085,2.466,1086,2.147,1087,2.466,1088,2.466,1089,2.466,1090,2.466,1091,2.384,1092,1.672,1093,2.466,1094,1.575,1095,2.313,1096,2.313]],["component/85",[1,0.442]],["title/86-1",[476,33.381]],["name/86-1",[]],["text/86-1",[]],["component/86-1",[]],["title/86",[14,20.71,122,31.468]],["name/86",[2,1.513]],["text/86",[4,2.774,7,3.386,12,2.515,14,2.085,20,2.954,27,1.846,31,1.674,44,1.562,49,3.124,53,2.686,60,2.299,61,2.525,78,2.686,80,2.099,122,3.857,138,1.821,148,1.674,171,2.513,197,1.423,208,1.873,214,2.009,215,2.631,226,1.846,261,1.808,286,1.993,287,1.588,290,2.181,295,3.698,300,3.574,321,2.327,369,2.513,413,1.684,422,2.044,428,2.889,458,2.16,476,1.749,492,2.778,501,4.574,513,4.367,515,3.225,517,2.383,518,2.774,546,3.012,554,2.496,585,1.497,812,2.836,813,3.728,814,2.889,815,2.889,876,2.774,908,2.062,971,2.889,974,4.578,975,3.351,976,2.889,977,3.978,979,2.181,1050,3.168,1055,2.829,1063,2.631,1067,2.829,1086,5.405,1094,2.119,1097,3.319,1098,2.383,1099,4.921,1100,3.319,1101,3.319,1102,3.319,1103,3.319,1104,3.319,1105,2.889,1106,2.445,1107,2.3,1108,3.319]],["component/86",[1,0.442]],["title/87-1",[186,23.305,604,30.296,930,32.914]],["name/87-1",[]],["text/87-1",[]],["component/87-1",[]],["title/87-2",[186,23.305,604,30.296,1109,35.962]],["name/87-2",[]],["text/87-2",[]],["component/87-2",[]],["title/87-3",[186,27.978,1110,40.149]],["name/87-3",[]],["text/87-3",[]],["component/87-3",[]],["title/87-4",[187,41.638]],["name/87-4",[]],["text/87-4",[]],["component/87-4",[]],["title/87-5",[186,27.978,1111,40.149]],["name/87-5",[]],["text/87-5",[]],["component/87-5",[]],["title/87-6",[186,23.305,1111,33.442,1112,42.19]],["name/87-6",[]],["text/87-6",[]],["component/87-6",[]],["title/87-7",[1113,50.219]],["name/87-7",[]],["text/87-7",[]],["component/87-7",[]],["title/87-8",[1114,55.157]],["name/87-8",[]],["text/87-8",[]],["component/87-8",[]],["title/87-9",[197,27.167]],["name/87-9",[]],["text/87-9",[]],["component/87-9",[]],["title/87-10",[197,21.719,325,44.096]],["name/87-10",[]],["text/87-10",[]],["component/87-10",[]],["title/87-11",[197,21.719,1115,50.65]],["name/87-11",[]],["text/87-11",[]],["component/87-11",[]],["title/87-12",[1116,37.822,1117,44.096]],["name/87-12",[]],["text/87-12",[]],["component/87-12",[]],["title/87-13",[297,30.166,1110,40.149]],["name/87-13",[]],["text/87-13",[]],["component/87-13",[]],["title/87-14",[197,21.719,1113,40.149]],["name/87-14",[]],["text/87-14",[]],["component/87-14",[]],["title/87-15",[197,21.719,966,37.315]],["name/87-15",[]],["text/87-15",[]],["component/87-15",[]],["title/87-16",[197,21.719,1118,44.096]],["name/87-16",[]],["text/87-16",[]],["component/87-16",[]],["title/87",[138,27.783,148,25.541]],["name/87",[138,0.568,148,0.522]],["text/87",[7,0.907,12,0.329,14,2.373,19,0.949,20,0.72,21,0.683,27,0.452,28,2.14,31,0.41,39,0.783,40,2.437,41,0.387,43,0.51,47,0.529,49,0.298,53,1.402,56,0.867,65,0.75,68,0.686,76,0.57,78,0.428,82,0.412,85,0.437,93,0.524,124,1.675,129,1.526,138,1.721,140,2.455,148,1.071,166,0.462,186,1.967,187,0.995,188,0.557,189,0.41,197,1.838,200,0.557,209,0.932,214,0.492,217,2.623,218,2.874,223,0.534,227,0.874,264,1.208,276,1.026,279,1.291,286,3.23,287,1.704,290,1.396,291,1.987,292,0.693,297,1.265,301,0.492,309,0.496,322,2.064,326,1.101,356,0.4,365,0.563,368,0.534,372,0.462,376,0.529,391,0.57,396,1.56,398,0.644,402,0.44,409,0.591,410,0.679,411,1.049,413,1.592,429,0.462,447,0.557,469,1.22,491,1.038,497,0.492,505,0.584,506,0.708,511,1.038,514,0.48,529,1.038,546,0.48,554,0.398,557,0.54,558,0.524,598,0.708,606,0.452,630,0.473,638,0.54,645,0.599,659,2.311,691,1.526,702,1.2,709,0.634,806,0.634,827,0.708,842,2.831,845,0.679,869,1.732,890,0.995,908,0.505,930,1.181,942,1.291,952,2.494,965,1.115,967,0.708,968,0.644,979,0.534,986,0.599,987,1.087,992,0.708,996,2.517,1001,0.644,1003,2.317,1004,1.658,1015,1.318,1018,0.644,1020,0.644,1033,0.634,1038,3.432,1040,2.672,1042,0.708,1045,1.318,1047,1.318,1049,2.127,1061,0.708,1092,1.026,1094,0.519,1098,1.526,1107,1.049,1109,1.811,1110,5.018,1111,0.644,1113,0.644,1114,0.708,1116,1.131,1117,1.318,1118,0.708,1119,1.993,1120,0.786,1121,1.181,1122,1.514,1123,0.813,1124,1.514,1125,0.813,1126,1.514,1127,0.813,1128,1.514,1129,0.813,1130,1.514,1131,0.813,1132,1.514,1133,0.813,1134,1.514,1135,0.813,1136,1.514,1137,0.813,1138,0.813,1139,0.813,1140,2.125,1141,0.813,1142,1.514,1143,0.813,1144,0.813,1145,0.813,1146,0.813,1147,0.813,1148,0.813,1149,0.813,1150,0.813,1151,0.813,1152,0.813,1153,0.813,1154,2.125,1155,1.514,1156,2.662,1157,0.813,1158,1.514,1159,1.514,1160,0.813,1161,0.813,1162,2.573,1163,1.514,1164,2.125,1165,3.251,1166,2.731,1167,0.813,1168,1.514,1169,1.514,1170,1.265,1171,0.786,1172,0.813,1173,0.813,1174,0.813,1175,0.813,1176,0.786,1177,1.514,1178,1.514,1179,0.813,1180,1.514,1181,0.813,1182,1.514,1183,0.813,1184,0.813,1185,0.813,1186,0.813,1187,0.813,1188,0.813,1189,0.813,1190,0.813,1191,0.813,1192,0.813,1193,0.813,1194,0.813,1195,0.813,1196,0.813,1197,1.514,1198,0.813,1199,0.813,1200,0.813,1201,0.813,1202,0.813,1203,0.813,1204,1.242,1205,0.813,1206,0.813,1207,0.813,1208,0.813,1209,0.655,1210,0.813,1211,0.813,1212,0.813,1213,0.813,1214,0.813,1215,0.813,1216,0.693,1217,0.813,1218,0.813,1219,0.813,1220,0.813,1221,0.813,1222,0.813,1223,0.813,1224,0.813,1225,0.813,1226,0.813,1227,1.85,1228,0.813,1229,1.85,1230,0.813,1231,0.813,1232,0.813,1233,0.813,1234,0.693,1235,0.813,1236,0.667,1237,0.813,1238,0.693,1239,0.813,1240,0.813,1241,0.763,1242,0.813,1243,0.813,1244,0.813,1245,0.813,1246,0.813,1247,0.813,1248,0.679,1249,0.813,1250,0.708,1251,0.813,1252,0.708,1253,0.813,1254,0.813,1255,0.813,1256,0.813,1257,0.786,1258,0.813,1259,0.786,1260,0.813,1261,0.693,1262,0.813,1263,0.625,1264,0.813,1265,0.742,1266,0.813,1267,0.644,1268,0.813,1269,0.813,1270,0.813,1271,0.813,1272,0.813,1273,0.813,1274,0.813,1275,0.813,1276,0.813,1277,0.813,1278,0.813,1279,0.763,1280,0.813,1281,6.167,1282,0.813,1283,0.813,1284,0.813,1285,0.813,1286,0.813,1287,0.813,1288,0.708,1289,0.813,1290,0.813,1291,0.813,1292,0.813,1293,0.813,1294,0.813,1295,0.813,1296,1.514,1297,0.813,1298,1.514,1299,0.813,1300,1.514,1301,0.813,1302,1.514,1303,0.813,1304,0.708,1305,0.813,1306,0.813,1307,0.813,1308,0.708,1309,0.813,1310,0.708,1311,0.813,1312,0.708,1313,0.813,1314,0.708,1315,0.813,1316,0.813,1317,0.813,1318,0.708,1319,0.813,1320,0.708,1321,0.813,1322,0.813,1323,0.813,1324,0.763,1325,0.813,1326,0.763,1327,0.813,1328,0.813,1329,0.813,1330,0.813,1331,0.813,1332,0.813,1333,0.813,1334,0.813,1335,0.813,1336,0.813,1337,0.813,1338,0.813,1339,0.813,1340,0.813,1341,0.813,1342,0.813,1343,0.813,1344,0.813,1345,0.813,1346,0.813,1347,0.813,1348,0.813,1349,0.813,1350,0.813,1351,0.813,1352,0.813,1353,0.813,1354,0.813,1355,0.813,1356,0.813,1357,0.813,1358,0.813,1359,0.813,1360,2.125,1361,0.786,1362,0.813,1363,0.813,1364,0.667,1365,0.813,1366,0.813,1367,0.813,1368,0.813,1369,0.693,1370,1.514,1371,0.813,1372,1.514,1373,0.813,1374,0.813,1375,0.813,1376,0.813,1377,2.662,1378,0.599,1379,0.786,1380,0.813,1381,0.763,1382,0.813,1383,0.813,1384,1.42,1385,0.813,1386,0.813,1387,0.813,1388,1.514,1389,2.662,1390,0.813,1391,0.708,1392,0.813,1393,0.813,1394,0.813,1395,0.813,1396,0.813,1397,0.813,1398,0.813,1399,0.708,1400,0.708,1401,1.514,1402,0.813,1403,0.708,1404,0.813,1405,0.708,1406,0.813,1407,0.813,1408,0.813,1409,0.813,1410,0.813,1411,0.813,1412,0.813,1413,2.662,1414,0.813,1415,0.813,1416,0.813,1417,0.813,1418,0.813,1419,0.813,1420,0.813,1421,0.708,1422,0.708]],["component/87",[1,0.442]],["title/88-1",[476,33.381]],["name/88-1",[]],["text/88-1",[]],["component/88-1",[]],["title/88-2",[1423,46.675]],["name/88-2",[]],["text/88-2",[]],["component/88-2",[]],["title/88-3",[217,27.22,492,27.592]],["name/88-3",[]],["text/88-3",[]],["component/88-3",[]],["title/88-4",[53,26.687,1106,37.315]],["name/88-4",[]],["text/88-4",[]],["component/88-4",[]],["title/88-5",[513,31.749,975,33.288]],["name/88-5",[]],["text/88-5",[]],["component/88-5",[]],["title/88-6",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/88-6",[]],["text/88-6",[]],["component/88-6",[]],["title/88",[12,14.645,61,17.906,402,19.56,492,19.694]],["name/88",[492,0.564,1106,0.763]],["text/88",[1,1.174,10,1.47,12,1.998,14,0.959,20,2.347,21,1.744,24,1.169,28,2.296,33,2.567,49,2.638,53,3.014,61,2.834,65,1.915,68,1.063,74,1.664,94,1.512,103,1.135,108,1.386,124,1.252,128,1.484,164,3.542,166,1.334,169,1.512,197,1.006,206,1.706,209,2.381,217,4.317,218,2.443,220,1.859,221,1.859,222,3.652,223,3.76,226,2.151,242,1.354,257,1.608,263,1.83,286,2.962,287,1.122,289,1.457,294,2.541,295,1.397,297,1.397,311,1.364,322,2.024,329,1.334,356,1.904,364,2.341,368,3.76,372,1.334,377,1.59,396,1.375,402,2.669,409,1.706,413,1.19,439,1.408,491,4.337,492,3.923,493,1.42,494,3.366,497,1.42,513,3.092,514,1.386,515,2.446,546,2.914,633,1.999,645,2.848,655,1.752,759,1.42,765,1.706,812,1.305,813,3.435,831,1.728,880,1.802,890,1.542,896,1.664,898,1.999,912,1.684,915,1.859,969,2.042,974,4.159,975,2.541,977,1.83,979,2.541,980,1.397,981,2.232,991,1.802,996,1.498,1000,3.366,1041,1.859,1094,2.468,1105,2.042,1106,4.662,1121,1.83,1170,1.96,1261,1.999,1423,2.848,1425,1.47,1427,3.366,1428,1.776,1429,2.042,1430,1.776,1431,2.042,1432,1.859,1433,2.346,1434,2.346,1435,1.859,1436,2.267,1437,2.346,1438,2.346,1439,1.891,1440,2.092,1441,2.346,1442,2.042,1443,2.346,1444,2.346,1445,2.042,1446,2.042]],["component/88",[1,0.442]],["title/89-1",[476,33.381]],["name/89-1",[]],["text/89-1",[]],["component/89-1",[]],["title/89-2",[1423,46.675]],["name/89-2",[]],["text/89-2",[]],["component/89-2",[]],["title/89-3",[217,27.22,492,27.592]],["name/89-3",[]],["text/89-3",[]],["component/89-3",[]],["title/89-4",[60,19.025,297,25.127,1447,36.73]],["name/89-4",[]],["text/89-4",[]],["component/89-4",[]],["title/89-5",[222,23.08,1424,31.473,1425,22.661,1426,29.138]],["name/89-5",[]],["text/89-5",[]],["component/89-5",[]],["title/89-6",[218,20.897,505,30.296,517,30.296]],["name/89-6",[]],["text/89-6",[]],["component/89-6",[]],["title/89-7",[223,27.727,249,33.442,1448,36.73]],["name/89-7",[]],["text/89-7",[]],["component/89-7",[]],["title/89-8",[1449,55.157]],["name/89-8",[]],["text/89-8",[]],["component/89-8",[]],["title/89-9",[1450,55.157]],["name/89-9",[]],["text/89-9",[]],["component/89-9",[]],["title/89-10",[52,29.815]],["name/89-10",[]],["text/89-10",[]],["component/89-10",[]],["title/89-11",[392,32.961,1451,44.096]],["name/89-11",[]],["text/89-11",[]],["component/89-11",[]],["title/89",[12,14.645,60,16.302,402,19.56,492,19.694]],["name/89",[60,0.467,492,0.564]],["text/89",[1,0.318,7,3.32,10,0.345,12,1.32,14,0.428,20,0.91,21,0.248,24,0.522,28,0.487,33,0.695,40,0.595,49,0.384,52,0.9,53,0.552,58,0.436,60,1.818,65,0.947,68,0.867,75,1.049,78,0.79,80,0.348,81,0.365,82,0.531,84,1.039,100,0.479,101,1.664,102,0.892,103,0.266,108,0.325,122,0.341,124,1.223,128,0.348,147,0.373,148,1.33,164,1.076,169,0.966,189,0.277,192,0.451,197,0.449,204,0.702,206,0.4,208,1.079,209,0.339,214,0.333,217,1.591,218,0.519,220,0.436,221,0.436,222,0.668,223,1.734,226,0.582,249,2.582,257,1.31,261,0.299,275,0.429,278,0.348,286,1.777,287,1.096,289,0.341,294,0.688,297,0.327,305,0.369,309,0.336,311,0.32,322,1.001,352,2.577,356,0.271,364,0.333,368,0.985,376,0.358,377,0.373,396,0.614,398,1.515,402,0.297,413,0.761,415,0.422,423,0.365,439,1.375,488,0.459,491,2.232,492,1.248,493,0.333,497,0.634,501,0.405,505,1.645,511,0.718,512,0.479,514,0.619,515,1.209,517,1.076,525,0.734,546,1.353,554,1.449,567,0.405,606,0.834,610,0.416,628,0.451,630,0.32,645,1.687,655,0.41,668,1.664,691,0.752,702,0.436,709,0.429,758,0.351,759,0.634,813,1.148,844,0.381,855,1.815,869,0.976,880,2.027,896,0.39,899,0.308,912,0.395,915,0.436,952,1.872,953,0.436,974,0.985,975,0.688,981,0.317,986,0.405,987,0.395,991,0.422,996,0.957,999,0.83,1001,1.815,1018,0.436,1020,0.436,1033,0.429,1034,0.469,1040,1.296,1043,0.451,1049,1.553,1060,0.459,1092,0.373,1094,0.957,1098,1.076,1107,0.381,1116,0.41,1121,0.817,1227,0.911,1229,0.479,1288,0.911,1304,0.479,1308,1.994,1310,0.911,1312,1.994,1314,0.479,1318,0.911,1320,1.305,1378,0.405,1391,1.305,1399,0.479,1400,0.479,1403,0.479,1405,0.479,1421,0.479,1422,0.479,1423,0.771,1425,0.656,1427,0.911,1428,0.416,1429,0.911,1430,0.416,1431,0.479,1432,0.83,1445,0.911,1446,0.479,1447,0.911,1448,1.994,1449,0.911,1450,1.305,1451,1.664,1452,0.49,1453,0.479,1454,1.047,1455,1.047,1456,0.55,1457,1.449,1458,1.047,1459,1.047,1460,0.55,1461,1.047,1462,0.55,1463,0.55,1464,0.55,1465,0.55,1466,0.55,1467,0.55,1468,1.047,1469,0.55,1470,1.047,1471,2.96,1472,0.531,1473,0.55,1474,0.55,1475,0.55,1476,1.188,1477,0.55,1478,0.55,1479,0.502,1480,0.55,1481,0.55,1482,0.55,1483,0.55,1484,2.29,1485,0.55,1486,5.348,1487,1.912,1488,2.29,1489,1.499,1490,1.499,1491,1.499,1492,2.29,1493,1.912,1494,2.29,1495,1.912,1496,1.047,1497,1.047,1498,2.638,1499,1.047,1500,1.449,1501,2.29,1502,0.55,1503,1.912,1504,1.047,1505,0.459,1506,1.499,1507,2.96,1508,1.912,1509,1.047,1510,1.499,1511,0.55,1512,0.55,1513,1.912,1514,1.047,1515,1.912,1516,1.449,1517,1.047,1518,1.499,1519,1.499,1520,2.638,1521,0.55,1522,1.047,1523,1.912,1524,0.55,1525,1.499,1526,1.912,1527,1.047,1528,0.55,1529,2.29,1530,2.29,1531,2.638,1532,2.29,1533,1.499,1534,1.912,1535,1.047,1536,1.499,1537,1.912,1538,1.499,1539,1.499,1540,2.96,1541,0.55,1542,1.912,1543,1.912,1544,1.047,1545,0.932,1546,1.912,1547,1.499,1548,2.29,1549,0.55,1550,2.29,1551,0.55,1552,1.047,1553,0.55,1554,1.047,1555,3.257,1556,1.912,1557,1.499,1558,1.499,1559,1.047,1560,1.047,1561,0.55,1562,2.638,1563,1.499,1564,1.912,1565,1.912,1566,1.912,1567,1.278,1568,0.55,1569,1.912,1570,1.047,1571,1.047,1572,1.499,1573,1.912,1574,1.047,1575,1.499,1576,2.29,1577,1.499,1578,1.912,1579,1.499,1580,1.499,1581,1.047,1582,1.912,1583,0.55,1584,1.499,1585,1.047,1586,1.499,1587,1.047,1588,1.912,1589,0.55,1590,1.912,1591,0.55,1592,1.499,1593,1.047,1594,1.912,1595,1.047,1596,1.499,1597,1.912,1598,0.55,1599,1.499,1600,1.499,1601,1.047,1602,1.912,1603,1.047,1604,1.047,1605,1.499,1606,1.047,1607,0.55,1608,1.912,1609,1.499,1610,2.96,1611,1.047,1612,1.047,1613,0.55,1614,1.499,1615,1.912,1616,1.499,1617,0.55,1618,1.047,1619,0.55,1620,1.499,1621,0.55,1622,1.047,1623,1.047,1624,1.047,1625,1.499,1626,0.55,1627,1.912,1628,1.047,1629,1.912,1630,1.499,1631,1.499,1632,1.499,1633,0.55,1634,0.55,1635,1.912,1636,1.499,1637,0.55,1638,1.047,1639,0.55,1640,0.55,1641,1.047,1642,1.912,1643,0.55,1644,0.55,1645,1.047,1646,0.55,1647,1.047,1648,0.55,1649,1.047,1650,1.047,1651,0.55,1652,0.55,1653,1.047,1654,1.912,1655,1.912,1656,0.55,1657,1.047,1658,1.047,1659,0.55,1660,1.047,1661,1.047,1662,0.55,1663,1.499,1664,0.55,1665,0.55,1666,0.55,1667,0.55,1668,0.55,1669,1.499,1670,2.29,1671,1.047,1672,1.047,1673,1.047,1674,0.55,1675,0.55,1676,1.047,1677,1.499,1678,0.55,1679,0.55,1680,1.047,1681,0.55,1682,0.55,1683,0.55,1684,0.55,1685,0.502,1686,1.499,1687,0.55,1688,0.55,1689,0.55,1690,0.55,1691,0.55,1692,0.55,1693,0.55,1694,0.55,1695,0.55,1696,0.55,1697,1.047,1698,0.55,1699,0.55,1700,0.55,1701,0.55,1702,0.55,1703,1.047,1704,1.047,1705,1.047,1706,0.55,1707,0.55,1708,0.55,1709,0.55,1710,0.55,1711,0.531,1712,0.55,1713,0.55,1714,0.55,1715,0.55,1716,0.516,1717,0.55,1718,0.55,1719,0.55,1720,0.479,1721,0.55,1722,0.55,1723,0.55,1724,0.55,1725,0.531,1726,0.55,1727,0.817,1728,0.55,1729,0.55,1730,0.55,1731,0.531,1732,0.55,1733,0.531,1734,0.55,1735,0.55,1736,0.55,1737,0.354,1738,0.516,1739,0.502,1740,0.531,1741,0.459,1742,1.047,1743,0.55,1744,0.55,1745,0.55,1746,0.55,1747,0.55,1748,0.55,1749,1.047,1750,0.55,1751,1.047,1752,0.55,1753,0.479,1754,0.55]],["component/89",[1,0.442]],["title/90-1",[476,33.381]],["name/90-1",[]],["text/90-1",[]],["component/90-1",[]],["title/90-2",[82,25.697,226,28.177]],["name/90-2",[]],["text/90-2",[]],["component/90-2",[]],["title/90-3",[227,29.234,392,32.961]],["name/90-3",[]],["text/90-3",[]],["component/90-3",[]],["title/90-4",[227,36.567]],["name/90-4",[]],["text/90-4",[]],["component/90-4",[]],["title/90-5",[264,36.021]],["name/90-5",[]],["text/90-5",[]],["component/90-5",[]],["title/90-6",[439,38.043]],["name/90-6",[]],["text/90-6",[]],["component/90-6",[]],["title/90-7",[227,29.234,390,37.315]],["name/90-7",[]],["text/90-7",[]],["component/90-7",[]],["title/90-8",[227,36.567]],["name/90-8",[]],["text/90-8",[]],["component/90-8",[]],["title/90",[226,35.245]],["name/90",[226,1.026]],["text/90",[7,2.211,12,0.811,14,0.819,22,1.344,24,3.133,28,2.05,31,1.01,32,1.913,44,0.943,49,1.613,52,1.595,60,0.903,61,0.992,65,1.678,82,1.719,84,1.388,122,3.219,124,2.351,125,1.291,140,1.147,147,1.358,148,1.01,159,3.335,162,1.388,169,1.291,189,1.709,197,0.859,217,1.076,218,0.992,226,3.499,227,4.884,229,1.744,234,1.744,235,1.744,236,3.834,237,1.744,238,1.744,239,1.496,241,1.643,242,1.156,243,1.147,259,1.421,264,4.811,278,1.267,285,1.234,287,3.205,295,1.193,309,1.223,314,3.163,322,3.033,351,2.464,356,0.986,364,1.213,373,1.213,390,4.633,392,3.77,413,2.628,422,1.234,429,1.139,436,1.707,439,3.479,461,1.744,493,2.052,497,3.137,511,1.373,515,1.267,554,0.981,561,1.358,585,0.903,610,3.335,626,2.087,627,1.614,628,4.25,745,1.267,812,1.885,813,1.203,842,1.438,890,1.316,895,1.539,908,1.244,952,1.267,953,2.686,974,1.316,979,2.227,980,1.193,996,2.163,999,1.588,1004,1.563,1040,2.297,1049,2.297,1063,1.588,1094,2.812,1099,1.588,1107,1.388,1428,1.517,1435,1.588,1476,1.588,1753,5.044,1755,2.003,1756,1.614,1757,5.181,1758,3.389,1759,2.003,1760,3.389,1761,4.404,1762,2.003,1763,2.003,1764,2.003,1765,3.389,1766,3.389,1767,3.389,1768,1.879,1769,4.257,1770,4.404,1771,1.936,1772,3.389,1773,2.003,1774,1.674,1775,1.421,1776,2.003,1777,2.003,1778,1.936,1779,2.003,1780,2.003,1781,2.003,1782,1.707,1783,2.003,1784,5.007]],["component/90",[1,0.442]],["title/91-1",[744,35.103,745,32.039]],["name/91-1",[]],["text/91-1",[]],["component/91-1",[]],["title/91-2",[148,18.23,585,16.302,1066,28.203,1785,31.473]],["name/91-2",[]],["text/91-2",[]],["component/91-2",[]],["title/91-3",[16,19.476,18,18.393,20,15.048,656,23.298,1204,25.942]],["name/91-3",[]],["text/91-3",[]],["component/91-3",[]],["title/91-4",[630,29.459,1786,46.238]],["name/91-4",[]],["text/91-4",[]],["component/91-4",[]],["title/91-5",[75,27.783,1787,44.096]],["name/91-5",[]],["text/91-5",[]],["component/91-5",[]],["title/91-6",[209,31.194,585,22.84]],["name/91-6",[]],["text/91-6",[]],["component/91-6",[]],["title/91-7",[188,24.776,261,19.694,1788,32.197,1789,34.942]],["name/91-7",[]],["text/91-7",[]],["component/91-7",[]],["title/91-8",[585,22.84,1790,46.238]],["name/91-8",[]],["text/91-8",[]],["component/91-8",[]],["title/91-9",[388,41.638]],["name/91-9",[]],["text/91-9",[]],["component/91-9",[]],["title/91-10",[64,29.652]],["name/91-10",[]],["text/91-10",[]],["component/91-10",[]],["title/91-11",[478,32.341]],["name/91-11",[]],["text/91-11",[]],["component/91-11",[]],["title/91-12",[18,29.459,48,27.592]],["name/91-12",[]],["text/91-12",[]],["component/91-12",[]],["title/91-13",[585,19.025,850,32.418,1791,32.914]],["name/91-13",[]],["text/91-13",[]],["component/91-13",[]],["title/91-14",[53,22.229,60,19.025,478,21.536]],["name/91-14",[]],["text/91-14",[]],["component/91-14",[]],["title/91-15",[56,20.708,579,24.776,583,22.46,980,21.531]],["name/91-15",[]],["text/91-15",[]],["component/91-15",[]],["title/91",[1440,34.279]],["name/91",[1440,0.998]],["text/91",[1,1.585,7,3.094,11,0.862,12,1.244,14,0.514,16,1.39,17,1.498,18,2.509,20,2.052,21,1.688,28,1.05,32,0.71,34,1.923,38,1.174,39,0.65,40,2.729,41,1.782,44,0.592,48,2.843,49,2.046,52,1.762,53,1.973,54,1.923,60,1.018,64,1.752,65,0.623,66,1.663,68,1.391,69,0.715,73,0.997,74,2.178,75,3.064,77,2.754,78,2.273,80,1.427,83,1.53,88,0.768,95,0.997,103,1.486,120,1.189,123,0.788,124,0.671,125,0.81,140,0.72,148,0.634,163,0.892,181,1.601,182,1.013,189,1.138,193,1.031,197,0.968,202,0.862,208,2.113,209,1.89,242,1.302,251,0.843,259,2.178,261,3.375,264,1.745,266,1.53,270,0.694,273,0.892,277,1.031,278,0.795,283,1.498,287,1.08,288,0.654,289,1.907,300,0.881,301,1.366,322,1.607,354,0.768,356,1.511,372,2.968,373,0.761,382,3.538,391,0.881,402,1.221,413,0.638,417,0.768,429,0.715,447,0.862,477,1.441,478,1.567,514,3.491,516,1.564,528,0.997,529,0.862,554,0.615,557,0.835,558,1.978,574,1.031,576,1.051,585,2.665,589,1.851,598,1.095,600,1.148,604,0.903,606,2.083,624,1.179,626,1.39,630,1.312,631,2.835,634,1.12,636,2.326,637,1.39,656,3.845,744,2.595,745,3.036,760,2.01,764,1.095,765,2.723,789,0.871,808,1.514,809,0.997,850,2.877,854,2.359,865,1.819,883,1.051,896,1.601,899,1.264,952,0.795,963,1.851,987,1.62,1040,0.852,1050,0.781,1066,1.76,1099,0.997,1204,3.071,1216,1.072,1425,0.788,1440,0.68,1476,0.997,1727,0.981,1739,1.148,1741,1.051,1785,1.964,1786,2.06,1787,1.095,1788,2.734,1791,2.921,1792,1.095,1793,1.215,1794,1.257,1795,1.257,1796,1.215,1797,4.765,1798,1.257,1799,1.257,1800,1.257,1801,1.257,1802,1.257,1803,1.257,1804,1.257,1805,1.257,1806,1.257,1807,1.257,1808,1.886,1809,1.257,1810,1.257,1811,0.966,1812,1.179,1813,1.179,1814,1.031,1815,1.215,1816,1.257,1817,1.257,1818,1.095,1819,0.997,1820,1.095,1821,0.952,1822,1.257,1823,2.256,1824,3.07,1825,1.257,1826,2.612,1827,1.257,1828,1.257,1829,1.257,1830,1.215,1831,1.257,1832,1.257,1833,1.371,1834,1.371,1835,3.347,1836,1.371,1837,1.789,1838,1.308,1839,1.257,1840,1.257,1841,1.257,1842,1.257,1843,1.215,1844,1.257,1845,2.256,1846,1.12,1847,1.257,1848,1.257,1849,2.256,1850,1.257,1851,1.371,1852,1.308,1853,1.308,1854,1.12,1855,1.308,1856,1.257,1857,1.308,1858,1.308,1859,1.308,1860,1.12,1861,1.12,1862,1.308,1863,1.308,1864,1.308,1865,1.051,1866,1.12,1867,2.181,1868,1.179,1869,1.308,1870,0.939,2371,1.584]],["component/91",[1,0.442]],["title/92-1",[183,38.355,202,34.713]],["name/92-1",[]],["text/92-1",[]],["component/92-1",[]],["title/92-2",[52,23.836,77,32.337]],["name/92-2",[]],["text/92-2",[]],["component/92-2",[]],["title/92-3",[12,20.519,39,26.18]],["name/92-3",[]],["text/92-3",[]],["component/92-3",[]],["title/92-4",[22,33.975,61,25.087]],["name/92-4",[]],["text/92-4",[]],["component/92-4",[]],["title/92-5",[12,17.092,19,26.446,60,19.025]],["name/92-5",[]],["text/92-5",[]],["component/92-5",[]],["title/92-6",[12,20.519,1871,44.096]],["name/92-6",[]],["text/92-6",[]],["component/92-6",[]],["title/92-7",[855,54.971]],["name/92-7",[]],["text/92-7",[]],["component/92-7",[]],["title/92",[478,32.341]],["name/92",[478,0.942]],["text/92",[7,4.336,11,4.122,12,1.279,15,0.757,16,1.944,19,0.816,21,1.423,39,1.203,49,2.308,52,0.612,60,2.567,61,3.12,69,1.794,77,2.452,88,1.421,89,0.763,123,0.816,129,1.671,181,4.038,189,0.656,195,0.699,208,1.781,218,1.152,274,0.972,285,1.944,288,0.677,366,1.631,424,2.502,440,0.681,477,0.831,481,1.133,487,1.067,516,0.902,562,1.067,571,1.613,572,3.714,576,3.69,585,1.991,596,0.763,606,0.724,626,1.433,762,1.133,763,4.27,808,2.117,819,1.133,821,1.067,862,3.274,980,0.775,986,0.958,1263,1,1267,3.044,1837,3.5,1860,3.932,1861,1.159,1865,1.944,1866,2.072,1868,1.22,1871,1.133,1872,1.301,1873,3.841,1874,2.327,1875,3.156,1876,1.301,1877,1.301,1878,1.301,1879,1.301,1880,2.327,1881,3.841,1882,1.595,1883,2.327,1884,2.327,1885,1.301,1886,1.301,1887,5.326,1888,5.326,1889,2.327,1890,1.301,1891,0.985,1892,1.301,1893,1.301,1894,2.327,1895,1.301,1896,1.301,1897,1.301,1898,1.301,1899,4.27,1900,5.693,1901,3.841,1902,5.693,1903,1.301,1904,1.301,1905,1.301,1906,3.602,1907,3.841,1908,3.841,1909,1.301,1910,1.301,1911,1.301,1912,3.841,1913,3.841,1914,1.301,1915,3.156,1916,1.301,1917,1.301,1918,3.156,1919,1.301,1920,1.301,1921,3.156,1922,1.301,1923,1.301,1924,3.156,1925,3.156,1926,1.301,1927,3.156,1928,4.904,1929,1.301,1930,1.301,1931,2.124,1932,2.182,1933,2.327,1934,2.327,1935,2.327,1936,2.327,1937,3.156,1938,2.327,1939,2.327,1940,2.327,1941,2.327,1942,1.301,1943,2.327,1944,1.22,1945,1.301,1946,2.327,1947,2.327,1948,1.301,1949,1.301,1950,1.301,1951,1.301,1952,1.301,1953,1.301,1954,1.301,1955,1.301,1956,1.301,1957,1.301,1958,1.301,1959,1.301,1960,1.188,1961,1.301,1962,1.301,1963,2.327]],["component/92",[1,0.442]],["title/93-1",[64,29.652]],["name/93-1",[]],["text/93-1",[]],["component/93-1",[]],["title/93-2",[14,20.71,1050,31.468]],["name/93-2",[]],["text/93-2",[]],["component/93-2",[]],["title/93-3",[38,21.945,41,20.075,185,22.673]],["name/93-3",[]],["text/93-3",[]],["component/93-3",[]],["title/93",[1964,49.427]],["name/93",[1964,1.439]],["text/93",[1,1.774,7,3.946,10,0.672,13,0.778,14,0.799,15,0.892,17,0.374,24,0.281,27,1.301,28,0.262,31,1.357,32,0.605,34,1.003,36,0.415,38,2.56,39,0.291,41,0.51,43,0.353,44,1.266,48,0.307,49,1.105,60,0.254,61,0.279,62,0.752,64,2.463,65,0.759,66,1.597,68,1.748,75,0.841,78,1.029,81,0.712,82,0.286,83,1.039,89,0.33,103,1.46,110,0.735,117,1.37,120,0.565,123,0.353,130,0.48,138,0.841,154,0.933,166,2.192,185,3.699,186,0.847,187,1.008,188,0.735,189,1.179,191,0.356,197,1.542,200,0.386,202,1.844,226,0.313,240,0.998,242,0.619,243,0.323,251,0.378,258,0.44,259,0.76,261,0.584,264,0.32,266,0.727,270,1.833,280,0.344,287,1.119,288,0.558,290,0.37,296,0.433,297,1.163,299,1.335,301,0.649,303,0.471,304,2.208,305,0.719,310,1.335,312,1.633,317,0.471,321,0.752,329,0.872,354,1.643,356,0.962,357,1.258,365,0.391,372,0.32,373,0.649,374,0.433,381,0.454,388,0.37,391,0.395,406,0.462,411,0.391,413,0.778,417,0.344,418,1.701,420,0.336,422,0.347,429,0.872,440,0.295,445,2.284,446,0.933,447,0.386,452,2.284,458,0.367,469,0.454,474,0.41,475,0.864,486,0.454,493,0.928,516,0.391,546,0.333,553,0.447,554,0.751,556,0.77,558,1.507,579,0.386,581,0.727,585,0.254,593,0.447,596,0.628,602,0.529,604,0.405,605,1.4,606,0.853,616,1.088,619,0.48,626,1.44,630,0.624,633,0.48,636,4.277,637,3.031,639,1.247,652,0.427,657,2.764,659,0.79,758,1.247,759,1.416,771,0.85,784,0.471,788,0.812,789,0.743,806,0.44,808,0.378,812,0.596,813,1.173,831,0.415,842,0.77,844,0.391,854,0.433,857,0.491,868,0.824,869,0.698,870,0.491,877,1.13,890,0.705,895,0.824,899,1.508,909,0.415,912,0.77,918,0.462,920,0.824,966,0.79,978,0.735,995,0.491,1050,0.35,1059,0.48,1064,0.896,1092,1.585,1209,0.454,1234,0.914,1236,3.362,1238,0.48,1248,0.896,1250,1.701,1252,1.335,1263,0.433,1267,4.526,1364,0.462,1369,0.914,1378,1.13,1432,0.447,1442,0.491,1505,2.249,1567,0.48,1685,0.514,1720,0.491,1727,0.836,1737,0.691,1756,0.454,1774,0.896,1775,0.4,1782,0.914,1791,0.836,1808,2.521,1811,0.433,1814,1.258,1819,1.853,1820,0.491,1821,2.284,1870,0.421,1882,0.386,1891,0.427,1965,0.563,1966,0.563,1967,1.036,1968,0.514,1969,1.115,1970,3.017,1971,3.017,1972,3.017,1973,1.954,1974,3.017,1975,2.571,1976,3.844,1977,3.29,1978,2.935,1979,2.691,1980,2.524,1981,3.017,1982,1.4,1983,1.072,1984,1.533,1985,1.438,1986,1.482,1987,1.533,1988,1.672,1989,1.072,1990,0.586,1991,0.614,1992,0.586,1993,0.614,1994,0.614,1995,1.241,1996,1.241,1997,0.614,1998,0.545,1999,0.614,2000,0.614,2001,0.563,2002,0.563,2003,0.563,2004,1.533,2005,1.533,2006,0.529,2007,0.563,2008,0.563,2009,0.545,2010,0.563,2011,0.563,2012,0.563,2013,0.563,2014,0.529,2015,0.545,2016,0.85,2017,1.603,2018,1.954,2019,0.933,2020,0.933,2021,0.933,2022,1.783,2023,0.914,2024,1.954,2025,1.072,2026,0.979,2027,1.4,2028,0.979,2029,1.4,2030,0.563,2031,1.072,2032,1.072,2033,3.949,2034,3.597,2035,1.954,2036,1.072,2037,1.072,2038,1.533,2039,1.072,2040,1.005,2041,0.563,2042,0.502,2043,0.529,2044,0.545,2045,0.462,2046,0.529,2047,0.491,2048,0.563,2049,0.563,2050,0.563,2051,1.072,2052,1.072,2053,0.491,2054,0.563,2055,0.563,2056,1.072,2057,1.072,2058,0.563,2059,0.563,2060,0.545,2061,0.563,2062,0.563,2063,0.563,2064,1.954,2065,0.563,2066,1.072,2067,0.563,2068,0.933,2069,1.036,2070,0.529,2071,0.563,2072,0.563,2073,0.563,2074,0.614,2075,0.614,2076,0.614,2077,0.614,2078,0.563,2079,0.563,2080,0.491,2081,0.491,2082,0.491,2083,0.491,2084,0.563,2085,0.563,2086,0.563,2087,0.563,2088,0.514,2089,0.563,2090,0.502,2091,0.563,2092,0.44,2093,0.491,2094,0.563,2095,0.514,2096,0.514,2097,0.529,2098,0.563,2099,0.563,2100,0.563,2101,0.563,2102,0.563,2103,0.563,2104,1.072,2105,1.072,2106,4.324,2107,4.324,2108,1.072,2109,0.614,2110,0.614,2111,3.856,2112,1.072,2113,1.072,2114,3.318,2115,0.979,2116,2.691,2117,1.072,2118,1.072,2119,0.545,2120,0.879,2121,0.529,2122,0.563,2123,0.545,2124,0.563,2125,0.563,2126,0.563,2127,0.545,2128,0.563,2129,0.563,2130,0.529,2131,0.563,2132,1.072]],["component/93",[1,0.442]],["title/94-1",[14,17.25,1882,28.914,2092,32.914]],["name/94-1",[]],["text/94-1",[]],["component/94-1",[]],["title/94-2",[585,19.025,1425,26.446,2135,34.005]],["name/94-2",[]],["text/94-2",[]],["component/94-2",[]],["title/94-3",[49,15.455,1737,27.191,1775,29.929]],["name/94-3",[]],["text/94-3",[]],["component/94-3",[]],["title/94-4",[48,19.694,810,28.656,909,26.633,2159,31.473]],["name/94-4",[]],["text/94-4",[]],["component/94-4",[]],["title/94-5",[1854,45.11,2160,48.957]],["name/94-5",[]],["text/94-5",[]],["component/94-5",[]],["title/94",[2161,49.427]],["name/94",[2161,1.439]],["text/94",[1,1.518,7,2.682,12,0.637,14,1.499,18,1.6,21,1.24,24,1.37,28,2.327,38,0.818,41,1.309,44,1.294,48,2.724,49,1.343,52,1.726,60,1.24,61,0.779,63,1.054,64,1.287,65,1.362,66,1.221,68,0.713,76,1.102,81,1.044,84,1.089,85,0.845,88,0.96,89,0.921,90,1.19,93,1.013,103,0.761,108,0.929,117,1.928,141,1.158,185,1.971,189,0.793,196,1.023,197,0.674,208,0.887,218,0.779,226,0.874,241,1.289,259,1.115,263,1.226,270,1.519,287,1.316,288,1.431,294,1.033,297,0.936,300,1.102,301,1.665,311,0.914,314,1.129,315,1.066,329,0.894,351,1.143,354,1.679,365,1.089,371,1.34,372,1.564,375,1.044,377,1.066,388,1.033,391,1.102,413,0.798,417,1.679,429,0.894,440,2.303,445,3.786,447,1.077,448,2.861,470,1.435,515,1.74,524,1.089,549,1.143,557,1.044,558,1.013,569,1.174,581,1.066,585,0.709,596,1.612,606,2.04,626,2.71,630,0.914,636,4.1,637,3.079,649,1.314,652,1.19,658,1.369,659,1.158,691,1.129,744,1.906,745,1.74,759,2.22,765,1.143,774,1.314,788,1.19,789,4.105,808,1.054,809,2.18,810,1.246,812,1.53,813,1.652,824,3.126,844,1.089,868,4.551,869,1.023,875,1.226,877,2.702,886,1.369,899,0.881,909,1.158,978,1.077,1017,1.369,1041,1.246,1082,1.369,1092,1.865,1098,1.129,1166,1.369,1265,1.435,1425,1.724,1430,1.19,1440,0.85,1452,1.4,1737,1.013,1775,1.115,1792,1.369,1818,1.369,1819,1.246,1821,2.777,1865,1.314,1870,2.054,1882,1.077,1891,1.19,1899,3.193,1960,1.435,1964,1.226,2016,1.246,2017,3.008,2018,3.065,2019,1.369,2020,1.369,2021,1.369,2022,1.435,2023,1.34,2026,1.435,2028,1.435,2029,3.348,2045,3.008,2047,2.395,2068,1.369,2080,1.369,2081,1.369,2082,1.369,2083,1.369,2092,1.226,2093,1.369,2120,1.289,2135,4.433,2159,1.369,2160,1.519,2162,2.659,2163,1.572,2164,1.572,2165,1.572,2166,1.4,2167,1.572,2168,1.519,2169,1.572,2170,1.572,2171,1.572,2172,1.572,2173,1.572,2174,1.572,2175,1.435,2176,1.572,2177,1.572,2178,1.519,2179,2.751,2180,1.572,2181,1.572,2182,1.572,2183,1.572,2184,1.572,2185,1.572,2186,1.519,2187,1.572,2188,1.435,2189,1.572,2190,1.474,2191,1.572,2192,1.519,2193,1.572,2194,1.572,2195,1.572,2196,1.572,2197,1.572,2198,1.572,2199,1.714,2200,2.999,2201,1.714,2202,1.714,2203,1.714,2204,1.714,2205,1.714,2206,1.714,2207,1.714,2208,1.714,2209,1.714,2210,1.714,2211,1.714,2212,1.714,2213,1.714,2214,1.714,2215,1.714,2216,1.714,2217,3.999,2218,2.999,2219,1.714,2220,1.714,2221,1.714,2222,3.999,2223,1.635,2224,1.714,2225,1.714]],["component/94",[1,0.442]],["title/95-1",[68,28.719]],["name/95-1",[]],["text/95-1",[]],["component/95-1",[]],["title/95-2",[1440,34.279]],["name/95-2",[]],["text/95-2",[]],["component/95-2",[]],["title/95-3",[556,45.495]],["name/95-3",[]],["text/95-3",[]],["component/95-3",[]],["title/95-4",[2372,61.237]],["name/95-4",[]],["text/95-4",[]],["component/95-4",[]],["title/95-5",[2373,73.351]],["name/95-5",[]],["text/95-5",[]],["component/95-5",[]],["title/95-6",[329,23.987,658,36.73,2374,48.846]],["name/95-6",[]],["text/95-6",[]],["component/95-6",[]],["title/95-7",[875,49.427]],["name/95-7",[]],["text/95-7",[]],["component/95-7",[]],["title/95-8",[75,27.783,493,30.667]],["name/95-8",[]],["text/95-8",[]],["component/95-8",[]],["title/95",[309,30.927,585,22.84]],["name/95",[309,0.632,585,0.467]],["text/95",[11,1.861,24,2.17,28,1.264,33,1.803,44,2.936,49,0.995,52,2.049,64,2.038,65,1.345,66,1.934,68,1.231,69,1.544,73,2.152,74,3.089,75,2.991,76,1.904,78,2.295,82,1.378,83,1.841,98,2.31,103,1.314,128,1.718,140,2.495,147,1.841,182,2.189,208,1.533,239,2.028,243,1.555,261,1.479,264,1.544,270,1.5,274,2.028,280,1.658,281,2.189,283,1.803,288,1.412,293,3.64,309,1.658,311,1.579,314,1.95,316,2.547,329,3.1,354,3.809,356,2.685,373,1.644,374,2.086,388,1.785,392,1.767,433,2.418,440,3.575,509,1.975,538,2.056,549,1.975,554,1.329,556,3.915,567,2,585,3.703,596,1.592,626,1.672,630,1.579,639,1.734,657,2.086,658,2.364,745,1.718,773,5.778,844,1.882,875,3.398,877,3.208,899,2.44,920,3.346,942,2.315,947,2.547,948,2.227,978,2.985,1094,1.734,1216,2.315,1236,2.227,1379,2.625,1428,3.298,1430,2.056,1440,2.356,1737,2.807,1782,2.315,2046,2.547,2088,2.479,2223,2.824,2362,2.824,2372,2.625,2373,3.144,2374,5.042,2375,3.144,2376,3.144,2377,3.421,2378,3.421,2379,2.824,2380,2.625,2381,3.421,2382,3.421,2383,5.487,2384,3.144,2385,2.961,2386,5.042,2387,3.421,2388,2.715,2389,3.144,2390,3.144,2391,3.144,2392,3.421,2393,3.421,2394,5.042,2395,3.421,2396,2.961,2397,3.144,2398,3.421,2399,3.421,2400,3.421]],["component/95",[98,0.772]],["title/96-1",[12,20.519,34,26.016]],["name/96-1",[]],["text/96-1",[]],["component/96-1",[]],["title/96-2",[7,18.003,589,34.609,822,29.929]],["name/96-2",[]],["text/96-2",[]],["component/96-2",[]],["title/96-3",[622,56.426]],["name/96-3",[]],["text/96-3",[]],["component/96-3",[]],["title/96-4",[48,34.513]],["name/96-4",[]],["text/96-4",[]],["component/96-4",[]],["title/96",[423,33.626,476,26.687]],["name/96",[423,0.687,476,0.545]],["text/96",[1,0.608,7,0.855,12,2.099,13,1.719,14,1.386,16,3.191,17,1.33,19,1.256,20,1.612,21,1.528,24,2.581,31,1.709,34,1.741,35,4.042,39,2.276,40,1.927,41,1.612,43,1.256,44,0.943,48,3.156,49,2.454,53,1.055,56,1.147,57,1.234,60,0.903,61,1.678,62,1.404,64,3.135,66,3.257,68,2.851,70,1.614,82,1.016,85,1.076,88,1.223,90,1.517,94,1.291,98,2.336,114,1.879,117,1.404,138,1.859,142,1.614,143,1.674,144,1.674,147,1.358,150,2.496,160,1.936,161,3.203,163,1.421,171,1.517,173,1.936,181,1.421,185,2.784,187,1.316,189,1.709,191,1.267,193,1.643,196,1.303,204,1.344,206,1.457,210,1.879,214,1.213,243,1.147,258,1.563,261,1.091,270,1.872,271,1.829,275,1.563,277,1.643,278,2.144,280,3.163,282,1.496,283,1.33,285,1.234,288,2.291,295,1.193,298,1.829,320,1.496,354,1.223,364,1.213,366,2.376,372,1.139,377,1.358,381,1.614,385,1.539,388,1.316,400,1.457,411,3.052,422,1.234,423,1.33,440,1.049,451,1.936,474,2.464,476,1.055,493,1.213,514,1.183,529,1.373,569,3.868,575,1.539,580,1.476,587,3.436,589,3.613,593,1.588,596,1.986,616,3.675,622,1.784,623,1.588,625,2.083,636,1.244,638,2.25,652,1.517,771,1.588,783,1.784,788,1.517,822,4.11,841,3.275,844,2.348,847,1.879,868,1.539,869,1.303,885,1.784,894,1.879,899,2.468,937,3.018,955,3.018,963,1.643,978,1.373,1091,1.936,1119,1.879,1381,1.879,1430,2.566,1435,1.588,1737,1.291,2396,2.184,2401,2.524,2402,2.524,2403,2.524,2404,3.923,2405,4.803,2406,2.524,2407,4.27,2408,2.524,2409,2.524,2410,2.524,2411,2.524,2412,2.319,2413,2.083,2414,1.784,2415,2.083,2416,2.524,2417,2.524,2418,2.524,2419,2.524,2420,2.524,2421,2.524,2422,2.524,2423,2.319]],["component/96",[98,0.772]],["title/97-1",[788,38.355,883,42.329]],["name/97-1",[]],["text/97-1",[]],["component/97-1",[]],["title/97-2",[301,30.667,2424,58.642]],["name/97-2",[]],["text/97-2",[]],["component/97-2",[]],["title/97-3",[31,25.541,616,35.931]],["name/97-3",[]],["text/97-3",[]],["component/97-3",[]],["title/97-4",[212,37.315,616,35.931]],["name/97-4",[]],["text/97-4",[]],["component/97-4",[]],["title/97",[1440,34.279]],["name/97",[1440,0.998]],["text/97",[15,1.409,16,1.491,18,1.409,21,1.092,24,1.978,27,2.208,31,2.941,34,2.59,39,2.052,41,1.152,44,2.745,49,0.887,65,1.966,66,2.239,68,3.31,69,1.377,71,2.271,75,3.199,78,3.073,82,2.014,89,1.42,98,3.872,103,1.921,116,2.341,140,1.387,148,1.221,164,1.739,181,1.718,189,1.221,191,1.532,196,1.576,233,1.952,270,2.193,274,1.808,281,3.199,283,2.635,285,1.491,301,4.187,313,2.064,327,2.064,354,2.424,356,1.954,364,2.403,372,1.377,373,1.466,411,1.678,427,2.211,458,1.576,475,3.199,514,1.431,516,2.751,529,1.66,580,2.924,596,2.327,616,4.905,626,2.444,630,1.409,648,2.271,653,3.723,655,1.808,656,1.784,670,2.271,701,2.271,745,3.689,758,1.546,759,1.466,773,5.102,788,1.834,813,1.454,837,2.064,856,3.836,877,2.924,880,1.861,920,1.861,978,2.72,980,3.474,1040,3.419,1066,3.935,1439,1.952,1440,2.148,1737,1.561,1789,2.341,1814,1.987,1851,4.328,1931,2.211,1986,2.341,2023,2.064,2053,3.456,2153,2.641,2354,2.804,2414,2.157,2424,5.839,2425,3.051,2426,5.839,2427,2.641,2428,2.804,2429,3.051,2430,3.051,2431,3.051,2432,3.051,2433,3.051,2434,3.051,2435,3.051,2436,2.804,2437,2.641,2438,3.051,2439,3.051,2440,3.051,2441,3.051,2442,3.051,2443,3.051,2444,3.051,2445,5.001,2446,3.051,2447,2.804,2448,2.804,2449,3.051]],["component/97",[98,0.772]],["title/98-1",[375,33.626,908,31.468]],["name/98-1",[]],["text/98-1",[]],["component/98-1",[]],["title/98",[289,39.361]],["name/98",[289,1.146]],["text/98",[10,2.745,13,3.71,14,2.99,20,2.084,22,2.937,27,2.436,34,3.217,39,2.263,44,2.947,49,2.294,56,2.508,65,2.169,66,2.781,68,1.985,89,2.567,90,3.316,129,3.144,183,3.316,261,2.385,288,2.278,289,3.891,291,3.27,301,2.651,311,2.547,360,3.364,375,2.907,427,3.997,431,3.364,525,3.07,553,3.471,579,3.001,585,2.824,596,2.567,606,2.436,759,2.651,784,3.659,821,3.592,948,3.592,978,3.001,1050,3.891,1056,4.232,1059,3.732,1062,4.107,1064,5.234,1107,3.035,1176,4.232,1774,3.659,1775,3.106,1968,3.997,2088,3.997,2161,3.416,2450,7.251,2451,5.517,2452,4.555,2453,5.07,2454,5.07,2455,7.251,2456,5.07,2457,4.379,2458,5.517]],["component/98",[98,0.772]],["title/99",[93,40.833]],["name/99",[2459,2.011]],["text/99",[7,2.888,13,2.48,16,3.011,44,2.3,65,2.421,66,2.171,81,3.245,89,2.865,93,5.4,107,4.01,108,2.888,113,4.256,124,2.61,142,5.455,200,3.35,282,3.65,288,3.52,301,2.96,315,3.314,359,5.2,373,4.7,460,3.756,524,3.388,817,4.725,860,4.167,864,3.94,878,5.2,931,5.656,1060,4.085,1067,4.167,1738,4.585,2115,4.463,2245,4.585,2353,5.085,2459,7.38,2460,5.331,2461,5.66,2462,6.159,2463,5.66,2464,6.159,2465,6.159,2466,6.159,2467,5.331,2468,8.527,2469,6.159]],["component/99",[98,0.772]],["title/100-1",[52,29.815]],["name/100-1",[]],["text/100-1",[]],["component/100-1",[]],["title/100-2",[282,20.987,296,21.596,639,17.944,899,15.748,2470,30.647,2471,35.413]],["name/100-2",[]],["text/100-2",[]],["component/100-2",[]],["title/100-3",[69,28.798,899,28.38]],["name/100-3",[]],["text/100-3",[]],["component/100-3",[]],["title/100-4",[585,19.025,596,24.73,899,23.639]],["name/100-4",[]],["text/100-4",[]],["component/100-4",[]],["title/100",[64,23.706,639,32.337]],["name/100",[64,0.484,639,0.661]],["text/100",[7,1.435,10,1.244,24,0.989,27,1.104,28,0.924,44,0.934,48,1.081,49,2.293,52,0.934,64,3.283,65,1.666,66,2.78,69,4.536,73,2.666,75,2.825,81,1.318,82,1.007,85,1.807,89,1.164,98,4.128,147,1.346,196,1.292,212,1.463,230,4.225,264,1.912,270,1.097,278,1.256,282,3.267,283,3.419,291,2.511,295,2.003,296,1.525,311,1.956,327,1.692,351,1.444,354,2.672,356,0.978,358,2.624,360,1.525,372,1.912,375,1.318,386,1.549,409,1.444,411,2.331,433,1.768,445,3.313,474,1.444,493,4.039,514,1.173,520,1.692,549,2.446,556,1.426,585,3.163,596,1.164,616,1.408,626,1.223,627,1.6,639,5.203,745,1.256,759,2.649,822,2.386,860,2.867,889,1.919,893,3.251,899,5.065,949,1.812,978,1.361,980,1.182,983,1.919,985,1.919,1069,4.229,1107,2.331,1162,4.229,1263,2.584,1384,1.862,1435,2.666,1479,1.812,1891,1.503,1968,1.812,2006,3.154,2053,1.728,2121,1.862,2157,3.498,2257,2.165,2261,2.165,2379,2.065,2384,2.299,2415,2.065,2437,2.165,2452,2.065,2457,1.985,2460,3.667,2470,3.667,2472,2.501,2473,2.501,2474,6.285,2475,2.299,2476,3.894,2477,2.501,2478,5.513,2479,4.238,2480,4.238,2481,2.501,2482,2.501,2483,2.501,2484,2.501,2485,2.165,2486,4.238,2487,2.299,2488,2.165,2489,4.238,2490,3.894,2491,2.501,2492,2.501,2493,2.501,2494,2.501,2495,2.299,2496,2.501,2497,2.501,2498,2.501,2499,2.299]],["component/100",[98,0.772]],["title/101-1",[49,18.554,448,39.515]],["name/101-1",[]],["text/101-1",[]],["component/101-1",[]],["title/101",[49,18.554,98,26.861]],["name/101",[49,0.676]],["text/101",[7,2.716,10,1.486,11,1.625,12,1.58,13,1.203,17,1.574,19,1.486,20,1.856,24,1.181,25,2.064,34,1.218,39,1.225,40,1.348,41,1.128,44,1.835,49,2.109,52,2.338,56,2.846,57,2.402,58,1.879,59,1.879,60,1.069,62,3.483,64,1.109,66,3.212,67,3.876,68,3.745,70,1.911,75,2.726,78,1.249,81,1.574,87,1.981,89,1.39,90,1.795,98,3.375,103,2.405,138,1.3,142,1.911,181,1.682,185,2.096,186,1.309,187,1.558,189,1.967,193,1.945,196,3.233,203,1.473,208,1.338,212,1.746,230,1.945,243,2.234,261,1.291,280,3.034,281,1.911,288,2.029,289,1.473,293,4.152,301,1.435,305,1.59,309,1.447,319,1.879,351,1.724,356,1.167,357,1.945,363,2.111,372,1.348,373,1.435,414,2.223,415,1.821,417,1.447,457,1.981,469,1.911,482,1.77,488,1.981,503,2.164,524,1.643,535,2.291,558,1.528,567,1.746,569,2.912,583,1.473,585,1.069,589,1.945,602,2.223,606,2.17,611,2.111,616,1.682,622,2.111,745,1.499,821,3.199,822,3.525,831,1.746,844,1.643,865,3.143,899,1.328,920,1.821,948,1.945,978,1.625,980,1.412,998,2.291,1051,2.291,1107,1.643,1109,2.021,1170,1.981,1384,2.223,1430,1.795,1439,1.911,1440,1.283,1811,1.821,1882,1.625,1985,2.223,2015,2.291,2053,2.064,2115,2.164,2121,2.223,2138,2.585,2258,3.77,2372,2.291,2388,2.37,2396,2.585,2470,2.585,2500,2.987,2501,2.987,2502,2.987,2503,2.987,2504,2.745,2505,2.987,2506,2.745,2507,2.585,2508,2.585,2509,2.745,2510,2.987,2511,2.987,2512,2.987,2513,2.987,2514,2.745,2515,2.745,2516,2.987,2517,2.987,2518,2.987,2519,2.987,2520,2.987,2521,2.987,2522,2.987,2523,2.987]],["component/101",[98,0.772]],["title/102",[56,24.167,70,34.005,98,22.374]],["name/102",[2,1.513]],["text/102",[1,2.406,19,3.884,21,2.794,25,5.394,34,3.182,49,2.27,56,4.54,64,3.709,65,3.069,66,3.519,191,3.919,319,4.911,429,3.523,525,4.343,555,5.656,556,4.449,585,2.794,758,3.955,884,5.811,899,3.471,2090,5.518,2380,5.988,2524,7.806,2525,6.756,2526,6.444]],["component/102",[98,0.772]],["title/103",[440,33.166]],["name/103",[440,0.966]],["text/103",[17,3.831,43,3.617,56,3.305,64,2.7,65,2.858,66,2.562,70,4.651,89,3.382,98,4.014,147,3.912,150,4.251,191,3.65,204,3.87,243,3.305,270,3.187,354,3.523,440,3.962,476,3.04,583,3.585,585,2.602,670,7.098,701,7.098,706,5.577,759,3.493,766,5.577,860,4.918,864,4.651,908,3.585,1428,4.369,1440,3.122,2166,5.139,2527,7.27,2528,7.27]],["component/103",[98,0.772]],["title/104-1",[652,38.355,2529,52.684]],["name/104-1",[]],["text/104-1",[]],["component/104-1",[]],["title/104-2",[243,36.291]],["name/104-2",[]],["text/104-2",[]],["component/104-2",[]],["title/104-3",[2529,65.899]],["name/104-3",[]],["text/104-3",[]],["component/104-3",[]],["title/104-4",[593,50.219]],["name/104-4",[]],["text/104-4",[]],["component/104-4",[]],["title/104-5",[569,37.822,963,41.549]],["name/104-5",[]],["text/104-5",[]],["component/104-5",[]],["title/104-6",[1964,49.427]],["name/104-6",[]],["text/104-6",[]],["component/104-6",[]],["title/104-7",[375,33.626,908,31.468]],["name/104-7",[]],["text/104-7",[]],["component/104-7",[]],["title/104",[]],["name/104",[2529,1.919]],["text/104",[10,1.885,14,1.931,18,1.749,21,2.129,38,2.456,39,1.554,41,1.431,44,1.415,48,1.638,49,2.136,56,1.722,65,1.489,66,2.934,70,3.806,78,1.584,89,1.763,90,3.576,103,1.455,117,2.108,129,2.159,183,2.277,185,1.616,186,1.661,188,2.061,243,2.705,263,3.684,270,2.609,280,1.836,287,1.439,288,1.564,289,1.868,295,1.791,309,1.836,311,1.749,329,1.71,351,2.187,354,2.883,356,1.481,381,2.424,400,2.187,427,2.745,429,1.71,431,2.311,440,1.574,475,3.806,476,1.584,554,1.472,562,2.467,569,3.526,579,2.061,585,2.129,586,4.429,587,3.684,606,2.627,617,3.128,630,1.749,646,2.82,652,2.277,657,2.311,759,1.821,784,2.513,821,2.467,822,2.133,877,2.215,947,2.82,963,3.874,1040,2.039,1062,2.82,1064,2.513,1204,2.467,1378,2.215,1440,1.627,1716,2.82,1774,2.513,1775,2.133,1791,3.684,1870,2.245,1968,2.745,1976,5.469,2016,2.384,2095,2.745,2096,2.745,2097,2.82,2161,2.346,2188,2.745,2362,3.128,2380,4.564,2452,3.128,2453,3.481,2454,3.481,2455,5.467,2456,3.481,2509,3.481,2529,4.912,2530,3.789,2531,3.789,2532,3.789,2533,3.481,2534,3.481,2535,5.95,2536,3.481,2537,3.789,2538,3.789,2539,9.602,2540,3.789,2541,3.789,2542,7.347,2543,3.789,2544,3.789]],["component/104",[98,0.772]],["title/105-1",[272,43.174,911,48.957]],["name/105-1",[]],["text/105-1",[]],["component/105-1",[]],["title/105-2",[218,25.087,656,37.315]],["name/105-2",[]],["text/105-2",[]],["component/105-2",[]],["title/105-3",[639,26.935,899,23.639,2545,40.779]],["name/105-3",[]],["text/105-3",[]],["component/105-3",[]],["title/105-4",[69,17.98,287,15.132,375,20.995,639,20.19,899,17.719]],["name/105-4",[]],["text/105-4",[]],["component/105-4",[]],["title/105-5",[69,15.98,322,14.713,375,18.659,585,12.674,639,17.944,899,15.748]],["name/105-5",[]],["text/105-5",[]],["component/105-5",[]],["title/105-6",[375,20.995,413,16.044,639,20.19,899,17.719,2545,30.567]],["name/105-6",[]],["text/105-6",[]],["component/105-6",[]],["title/105-7",[1,8.534,49,10.296,68,12.74,375,18.659,996,17.944,1440,15.207]],["name/105-7",[]],["text/105-7",[]],["component/105-7",[]],["title/105-8",[899,23.639,2545,40.779,2546,48.846]],["name/105-8",[]],["text/105-8",[]],["component/105-8",[]],["title/105-9",[52,23.836,2547,63.819]],["name/105-9",[]],["text/105-9",[]],["component/105-9",[]],["title/105-10",[2372,61.237]],["name/105-10",[]],["text/105-10",[]],["component/105-10",[]],["title/105-11",[980,21.531,1545,32.197,2548,41.855,2549,41.855]],["name/105-11",[]],["text/105-11",[]],["component/105-11",[]],["title/105-12",[639,32.337,899,28.38]],["name/105-12",[]],["text/105-12",[]],["component/105-12",[]],["title/105-13",[631,47.976]],["name/105-13",[]],["text/105-13",[]],["component/105-13",[]],["title/105-14",[49,13.243,420,21.531,440,18.925,556,25.96]],["name/105-14",[]],["text/105-14",[]],["component/105-14",[]],["title/105-15",[125,40.833]],["name/105-15",[]],["text/105-15",[]],["component/105-15",[]],["title/105-16",[2550,58.642,2551,58.642]],["name/105-16",[]],["text/105-16",[]],["component/105-16",[]],["title/105-17",[1440,19.56,1545,32.197,2228,37.603,2552,41.855]],["name/105-17",[]],["text/105-17",[]],["component/105-17",[]],["title/105-18",[2372,61.237]],["name/105-18",[]],["text/105-18",[]],["component/105-18",[]],["title/105-19",[639,32.337,899,28.38]],["name/105-19",[]],["text/105-19",[]],["component/105-19",[]],["title/105-20",[631,47.976]],["name/105-20",[]],["text/105-20",[]],["component/105-20",[]],["title/105-21",[631,47.976]],["name/105-21",[]],["text/105-21",[]],["component/105-21",[]],["title/105",[2545,61.237]],["name/105",[2545,1.783]],["text/105",[1,0.358,7,4.027,10,0.39,11,1.15,14,0.255,15,0.362,16,0.726,17,0.413,18,0.685,23,0.602,27,0.346,28,1.514,31,0.594,33,0.413,34,1.303,39,0.609,41,0.296,44,1.002,49,0.93,52,0.554,56,2.637,57,1.311,63,1.125,64,2.154,65,0.831,66,1.712,67,1.66,68,0.965,69,2.192,71,0.584,74,0.442,75,1.597,76,0.436,78,1.337,80,0.394,82,0.598,85,0.335,98,0.625,103,1.409,125,0.759,134,0.486,146,0.584,148,0.846,161,0.453,166,1.849,177,0.602,185,1.144,209,0.383,212,0.459,218,0.308,240,0.767,242,0.359,243,0.961,261,1.159,266,1.973,270,0.651,276,0.422,277,0.511,280,1.777,283,0.782,288,0.324,291,0.465,311,0.362,312,1.779,314,1.528,319,0.493,321,0.436,326,0.453,329,1.21,351,0.857,363,0.554,367,0.531,371,0.531,372,0.67,382,1.746,400,0.453,402,0.337,410,0.52,411,0.431,420,0.702,433,0.554,440,3.559,458,0.405,497,0.713,503,0.568,505,0.447,554,1.888,556,4.811,557,0.413,558,1.876,579,0.807,581,0.422,585,1.859,595,0.647,596,0.691,604,0.447,616,1.51,626,0.383,630,1.892,631,0.471,632,0.602,638,1.114,639,2.939,646,0.584,652,0.471,655,1.253,657,1.635,744,2.017,745,1.346,758,1.359,773,2.578,783,0.554,813,1.278,831,0.459,836,1.573,839,1.402,854,0.478,858,0.554,864,0.502,865,0.502,875,2.782,892,0.584,899,4.007,912,0.447,936,0.584,937,1.896,939,0.531,952,1.346,980,3.489,987,0.447,1034,0.531,1043,0.967,1066,0.919,1204,0.967,1236,0.967,1263,1.95,1378,0.868,1426,0.502,1439,0.95,1440,1.93,1452,0.554,1505,1.779,1545,2.26,1727,0.919,1737,1.081,1756,0.502,1768,0.584,1790,0.568,1796,1.621,1797,0.568,1808,0.52,1811,2.237,1812,1.996,1821,1.27,1830,0.602,1837,1.687,1838,2.214,1846,1.896,1975,1.814,1980,3.051,2006,3.868,2017,0.967,2027,0.568,2033,1.853,2046,1.105,2069,1.139,2088,0.568,2119,0.602,2136,0.679,2142,1.996,2188,1.076,2228,3.709,2238,1.178,2245,0.584,2249,2.214,2250,2.214,2251,2.214,2252,2.214,2253,2.214,2254,2.214,2267,0.679,2336,2.464,2337,2.464,2338,2.464,2362,0.647,2372,3.986,2386,3.37,2389,1.364,2390,1.364,2391,4.129,2404,0.721,2405,0.679,2490,1.364,2495,0.721,2545,7.556,2546,0.721,2548,1.364,2549,2.464,2550,7.381,2551,2.464,2552,2.464,2553,0.784,2554,0.784,2555,0.784,2556,0.784,2557,0.784,2558,0.784,2559,0.784,2560,0.784,2561,0.784,2562,1.485,2563,0.784,2564,0.784,2565,0.784,2566,0.784,2567,1.485,2568,0.784,2569,0.784,2570,0.784,2571,0.784,2572,0.721,2573,0.784,2574,0.784,2575,1.485,2576,0.784,2577,0.784,2578,0.784,2579,0.784,2580,1.485,2581,0.784,2582,1.485,2583,0.784,2584,2.114,2585,0.784,2586,2.682,2587,2.114,2588,2.114,2589,0.784,2590,0.784,2591,1.364,2592,0.679,2593,0.721,2594,0.784,2595,2.114,2596,0.784,2597,1.485,2598,5.8,2599,5.8,2600,0.679,2601,3.197,2602,2.682,2603,1.485,2604,2.682,2605,1.485,2606,1.485,2607,1.364,2608,1.485,2609,1.485,2610,1.485,2611,0.784,2612,1.485,2613,0.784,2614,2.114,2615,0.784,2616,2.682,2617,0.784,2618,2.114,2619,0.784,2620,0.784,2621,0.784,2622,0.784,2623,0.784,2624,0.784,2625,0.784,2626,0.784,2627,2.114,2628,0.784,2629,1.485,2630,1.485,2631,0.784,2632,0.784,2633,0.784,2634,0.784,2635,0.784,2636,0.784,2637,0.784,2638,0.784,2639,0.784,2640,0.784,2641,1.364,2642,0.784,2643,1.485,2644,0.784,2645,0.784,2646,0.784,2647,0.784,2648,0.721]],["component/105",[98,0.772]],["title/106-1",[45,25.344,164,25.96,287,17.298,2649,39.421]],["name/106-1",[]],["text/106-1",[]],["component/106-1",[]],["title/106-2",[46,29.655,47,23.525,49,13.243,322,18.925]],["name/106-2",[]],["text/106-2",[]],["component/106-2",[]],["title/106-3",[49,10.296,413,14.259,420,16.739,822,19.938,826,25.657,1813,26.361]],["name/106-3",[]],["text/106-3",[]],["component/106-3",[]],["title/106-4",[75,19.83,826,33.002,1084,34.942,1436,34.942]],["name/106-4",[]],["text/106-4",[]],["component/106-4",[]],["title/106-5",[822,25.645,1440,19.56,1882,24.776,2650,45.55]],["name/106-5",[]],["text/106-5",[]],["component/106-5",[]],["title/106-6",[64,19.746,1440,22.827,2651,53.159]],["name/106-6",[]],["text/106-6",[]],["component/106-6",[]],["title/106-7",[616,35.931,2652,63.819]],["name/106-7",[]],["text/106-7",[]],["component/106-7",[]],["title/106",[45,35.508,243,29.013]],["name/106",[45,1.293]],["text/106",[7,2.041,13,0.901,24,1.523,27,2.661,30,1.456,39,0.918,41,1.916,43,1.916,44,2.251,45,5.073,46,3.303,47,3.51,49,1.475,52,0.836,64,0.831,66,0.788,68,0.805,75,4.097,78,2.121,83,1.204,85,1.643,88,1.084,98,0.942,103,1.48,108,1.049,123,1.113,128,1.123,139,1.716,140,1.751,143,1.484,148,2.03,150,2.252,164,1.275,169,1.144,185,0.954,189,1.542,196,1.155,204,1.191,208,2.272,230,1.456,251,1.191,264,3.964,266,1.204,270,2.224,271,1.621,274,1.326,279,1.513,282,1.326,283,1.179,289,1.103,298,1.621,301,1.075,309,1.867,311,1.033,315,1.204,319,1.407,320,1.326,322,0.929,329,1.009,354,1.867,356,0.874,364,1.075,372,1.009,373,1.075,375,1.179,378,2.606,410,2.555,417,1.867,420,1.057,448,1.385,474,1.291,482,1.326,486,1.431,491,2.759,497,1.075,505,1.275,514,1.049,524,1.23,546,1.049,553,1.407,554,0.869,561,1.204,580,1.308,599,1.716,613,1.847,626,1.093,630,1.033,632,1.716,638,2.03,684,1.716,745,1.123,758,1.134,822,5.134,824,1.513,826,6.364,860,1.513,865,1.431,869,1.155,875,1.385,895,1.364,899,0.995,906,1.665,908,1.103,918,1.456,921,1.716,930,1.385,955,2.723,978,1.217,980,1.821,1004,1.385,1040,2.073,1092,2.729,1120,1.716,1361,1.716,1426,1.431,1435,2.423,1440,2.918,1453,1.546,1476,1.407,1711,2.955,1727,1.385,1733,1.716,1740,2.955,1756,1.431,1769,1.716,1793,1.716,1811,1.364,1813,1.665,1815,1.716,1821,2.315,1882,1.217,1982,1.621,2045,1.456,2175,1.621,2178,1.716,2265,3.334,2339,1.936,2340,1.775,2385,1.936,2388,1.775,2447,2.056,2448,4.661,2507,1.936,2508,1.936,2515,2.056,2649,1.936,2653,2.056,2654,2.237,2655,2.237,2656,2.237,2657,2.237,2658,2.237,2659,2.237,2660,1.847,2661,2.237,2662,2.237,2663,2.237,2664,2.237,2665,2.237,2666,2.237,2667,2.237,2668,2.237,2669,2.237,2670,2.237,2671,2.237,2672,2.237,2673,2.237,2674,2.237,2675,1.936,2676,2.056,2677,2.056,2678,3.852,2679,2.237,2680,2.237,2681,2.237,2682,2.237,2683,2.056,2684,3.852,2685,6.028,2686,2.237,2687,2.237,2688,2.237,2689,2.237,2690,2.237,2691,2.056,2692,2.237,2693,2.237,2694,2.056,2695,2.237,2696,2.237,2697,2.237,2698,2.237]],["component/106",[98,0.772]],["title/107-1",[49,15.455,637,25.983,651,39.571]],["name/107-1",[]],["text/107-1",[]],["component/107-1",[]],["title/107-2",[48,22.983,636,26.211,943,38.514]],["name/107-2",[]],["text/107-2",[]],["component/107-2",[]],["title/107-3",[637,31.194,822,35.931]],["name/107-3",[]],["text/107-3",[]],["component/107-3",[]],["title/107-4",[48,19.694,636,22.46,637,22.264,2699,41.855]],["name/107-4",[]],["text/107-4",[]],["component/107-4",[]],["title/107",[48,27.592,636,31.468]],["name/107",[636,1.146]],["text/107",[2,1.573,7,2.622,10,1.202,11,1.314,21,0.865,24,0.955,27,1.067,34,1.677,41,0.912,44,2.658,48,4.187,49,2.888,57,1.181,60,1.923,64,0.897,66,2.508,68,2.786,78,1.72,82,0.973,98,2.262,113,1.669,123,1.202,128,1.213,148,0.967,162,1.329,185,1.755,189,1.646,202,2.238,247,1.994,251,2.19,270,2.356,281,2.632,283,1.273,287,1.562,297,1.142,301,1.161,314,2.345,315,1.3,322,1.004,351,2.374,354,1.994,356,0.944,360,3.277,413,0.973,417,1.171,445,2.473,458,1.248,475,5.567,482,1.432,515,1.213,516,1.329,533,3.156,538,1.452,556,1.377,575,1.473,606,1.816,623,1.52,636,4.775,637,4.595,651,4,657,3.277,745,1.213,759,1.161,808,1.286,822,2.316,831,1.413,842,3.062,850,1.473,851,3.156,869,1.248,885,1.708,896,1.36,902,1.75,906,1.798,943,1.75,963,2.678,977,1.496,978,1.314,991,1.473,1033,1.496,1092,3.413,1426,1.545,1440,1.767,1472,1.853,1500,1.853,1545,5.029,1567,1.634,1789,1.853,1797,2.981,1843,1.853,1931,1.75,1967,3.156,1975,2.783,1990,1.994,1998,1.853,2016,1.52,2017,2.678,2018,1.602,2044,1.853,2095,1.75,2096,2.981,2127,1.853,2157,1.994,2168,3.156,2186,1.853,2232,4.65,2414,1.708,2526,1.994,2660,1.994,2699,4.937,2700,5.373,2701,2.416,2702,4.114,2703,2.416,2704,2.416,2705,2.416,2706,2.416,2707,2.416,2708,2.416,2709,2.416,2710,2.416,2711,2.416,2712,2.416,2713,2.416,2714,2.22,2715,2.22,2716,2.416,2717,2.416,2718,2.416,2719,2.416,2720,5.373,2721,5.373,2722,2.416,2723,7.115,2724,6.344,2725,2.416,2726,2.416,2727,4.114,2728,4.114,2729,2.416,2730,2.416]],["component/107",[98,0.772]],["title/108-1",[288,32.954]],["name/108-1",[]],["text/108-1",[]],["component/108-1",[]],["title/108",[476,33.381]],["name/108",[476,0.972]],["text/108",[1,0.941,10,3.414,11,4.075,12,1.959,13,3.017,14,1.666,15,1.049,18,1.049,20,2.591,22,2.079,25,1.571,30,1.48,32,1.018,34,2.797,35,2.418,39,2.499,41,1.939,44,0.849,49,1.771,56,3.848,57,2.978,58,1.43,59,1.43,60,0.814,61,0.894,63,1.21,64,2.263,65,0.894,66,3.117,68,2.695,69,1.026,70,2.498,85,0.97,90,1.366,95,1.43,98,3.723,122,1.926,123,1.943,128,1.141,140,1.033,162,2.148,175,1.692,182,1.454,185,0.97,189,1.563,191,1.141,196,1.174,212,4.012,270,0.997,271,1.647,275,2.418,278,1.141,280,2.488,288,0.938,293,1.508,295,1.074,309,1.102,319,1.43,320,2.314,321,2.173,327,1.538,356,1.526,372,1.026,373,1.092,378,1.538,388,1.186,400,2.254,408,1.295,423,2.058,429,1.026,440,1.623,448,1.407,476,0.951,497,1.092,509,1.312,514,1.066,522,1.744,524,2.824,525,1.265,549,1.312,554,0.883,555,1.647,556,1.295,557,1.198,567,2.283,569,2.314,580,2.283,583,1.926,585,1.837,587,1.407,589,1.48,596,2.834,622,2.76,634,1.607,636,1.926,648,1.692,758,1.979,822,1.28,831,1.329,835,1.744,839,1.508,844,1.25,858,1.607,864,2.498,876,1.508,885,1.607,892,1.692,894,1.692,902,1.647,937,3.629,949,1.647,978,1.236,1066,1.407,1364,1.48,1369,1.538,1428,2.347,1439,3.898,1440,0.976,1737,1.163,1771,1.744,1932,1.692,1992,1.876,2060,1.744,2090,1.607,2162,1.744,2166,1.607,2258,1.744,2280,1.876,2340,1.804,2375,2.089,2380,1.744,2405,3.38,2412,2.089,2413,1.876,2414,1.607,2415,1.876,2452,1.876,2461,2.089,2476,2.089,2504,2.089,2507,1.967,2525,1.967,2526,1.876,2536,2.089,2592,1.967,2600,1.967,2731,2.273,2732,2.273,2733,3.905,2734,2.273,2735,2.273,2736,2.273,2737,2.273,2738,2.089,2739,2.273,2740,2.273,2741,2.273,2742,2.273,2743,6.862,2744,2.273,2745,2.273,2746,2.273,2747,2.273,2748,2.273,2749,2.273,2750,2.089,2751,2.273,2752,2.273,2753,2.273,2754,2.273,2755,2.273,2756,2.273,2757,2.273,2758,2.273,2759,2.273,2760,2.273]],["component/108",[98,0.772]],["title/109-1",[264,28.798,2761,58.642]],["name/109-1",[]],["text/109-1",[]],["component/109-1",[]],["title/109",[29,46.238,48,27.592]],["name/109",[29,0.945,48,0.564]],["text/109",[7,2.051,10,1.928,24,1.533,27,1.711,29,6.106,33,2.042,34,1.58,48,4.191,49,2.944,54,5.043,65,1.523,66,1.366,68,1.394,69,2.733,75,1.687,78,2.533,88,1.878,98,1.631,103,1.489,128,1.946,140,1.762,189,1.551,214,1.862,264,4.57,283,2.042,311,1.789,329,1.749,356,1.515,357,2.523,363,2.739,457,2.57,529,2.108,554,1.506,556,2.209,596,1.803,626,1.894,630,2.796,636,4.156,637,4.738,822,4.745,868,2.363,896,2.182,952,1.946,1107,2.132,1426,3.874,1435,5.302,1440,2.601,1476,4.69,1756,2.479,1821,2.329,1854,4.281,1867,4.646,1968,2.808,2130,2.885,2487,3.561,2660,3.199,2677,3.561,2683,6.85,2691,6.85,2694,3.561,2761,7.744,2762,3.354,2763,3.561,2764,3.354,2765,3.876,2766,8.428,2767,3.876,2768,3.876,2769,7.455,2770,3.876,2771,3.876,2772,7.455,2773,6.057,2774,6.057,2775,3.876,2776,3.876,2777,3.876]],["component/109",[98,0.772]],["title/110-1",[593,50.219]],["name/110-1",[]],["text/110-1",[]],["component/110-1",[]],["title/110-2",[82,21.405,212,31.082,243,24.167]],["name/110-2",[]],["text/110-2",[]],["component/110-2",[]],["title/110-3",[45,44.415]],["name/110-3",[]],["text/110-3",[]],["component/110-3",[]],["title/110-4",[31,31.948]],["name/110-4",[]],["text/110-4",[]],["component/110-4",[]],["title/110-5",[45,44.415]],["name/110-5",[]],["text/110-5",[]],["component/110-5",[]],["title/110-6",[45,44.415]],["name/110-6",[]],["text/110-6",[]],["component/110-6",[]],["title/110-7",[593,50.219]],["name/110-7",[]],["text/110-7",[]],["component/110-7",[]],["title/110-8",[64,23.706,493,30.667]],["name/110-8",[]],["text/110-8",[]],["component/110-8",[]],["title/110-9",[48,27.592,636,31.468]],["name/110-9",[]],["text/110-9",[]],["component/110-9",[]],["title/110",[243,36.291]],["name/110",[243,1.057]],["text/110",[12,1.753,15,1.567,24,3.389,27,1.498,31,1.358,34,3.494,38,1.401,39,1.392,44,1.268,45,4.768,46,2.21,47,1.753,48,1.467,49,1.987,62,1.888,63,2.902,64,2.025,66,1.196,78,1.419,81,2.873,88,1.645,89,1.579,93,1.736,98,2.295,103,1.304,113,2.345,117,3.802,138,2.374,147,2.933,150,1.984,161,1.959,185,2.325,186,1.488,208,2.442,212,1.984,243,4.546,261,1.467,270,1.488,283,1.788,287,1.289,289,1.673,291,2.011,309,1.645,315,1.826,364,1.631,375,1.788,381,5.005,400,1.959,417,1.645,440,3.802,448,2.101,475,3.488,477,3.462,493,2.62,562,2.21,580,1.984,593,4.922,596,2.536,606,1.498,636,2.688,637,1.659,644,2.604,652,2.04,657,3.325,759,1.631,783,2.399,789,1.867,844,1.867,858,2.399,885,3.854,937,2.399,943,2.459,978,1.846,1082,2.345,1378,1.984,1716,2.526,1737,1.736,1976,5.087,2016,2.135,2042,2.399,2095,2.459,2096,2.459,2097,2.526,2115,2.459,2245,2.526,2394,3.119,2414,4.83,2427,7.417,2457,2.694,2533,3.119,2534,3.119,2600,2.937,2675,4.718,2676,3.119,2715,3.119,2764,2.937,2778,3.394,2779,3.394,2780,3.394,2781,3.394,2782,3.394,2783,3.394,2784,3.394,2785,3.394,2786,3.394,2787,2.937,2788,3.394,2789,3.394,2790,3.394,2791,3.394]],["component/110",[98,0.772]],["title/111",[2792,73.351]],["name/111",[2792,2.135]],["text/111",[22,3.232,31,2.43,35,3.759,41,2.293,49,1.765,56,2.76,64,2.255,66,2.139,68,3.037,77,3.076,98,2.555,103,2.332,107,5.496,142,3.884,147,3.266,189,3.379,212,3.55,270,2.662,280,4.091,283,3.199,288,2.506,293,4.027,319,3.819,509,3.504,516,3.339,549,3.504,562,3.952,569,5.003,581,3.266,583,2.993,585,2.173,587,3.759,599,4.657,622,5.967,864,6.209,1738,4.519,1838,5.012,2245,4.519,2258,4.657,2340,4.818,2388,4.818,2459,5.254,2463,5.578,2592,5.254,2793,6.071,2794,6.071,2795,6.071,2796,6.071,2797,6.071,2798,6.071,2799,6.071,2800,6.071]],["component/111",[98,0.772]],["title/112-1",[212,46.675]],["name/112-1",[]],["text/112-1",[]],["component/112-1",[]],["title/112-2",[48,34.513]],["name/112-2",[]],["text/112-2",[]],["component/112-2",[]],["title/112-3",[585,28.569]],["name/112-3",[]],["text/112-3",[]],["component/112-3",[]],["title/112-4",[66,18.734,98,22.374,2801,48.846]],["name/112-4",[]],["text/112-4",[]],["component/112-4",[]],["title/112",[66,22.491,98,26.861]],["name/112",[66,0.46,98,0.549]],["text/112",[1,0.686,7,1.6,12,0.51,13,1.147,14,0.924,18,1.315,21,1.019,24,0.628,25,1.097,27,1.71,32,0.711,34,2.468,35,0.983,39,0.651,41,1.075,43,0.79,44,1.064,48,3.859,49,2.818,52,1.064,54,1.074,56,2.148,57,2.66,64,2.249,65,1.523,66,3.47,68,1.958,70,2.478,75,2.057,78,2.753,81,1.501,88,0.769,90,0.954,93,1.457,98,3.848,103,0.61,108,0.744,120,0.664,128,2.372,130,1.074,141,1.665,150,0.928,164,0.904,175,1.181,189,1.14,191,0.797,208,0.711,212,4.569,239,0.941,242,1.305,243,1.295,261,2.846,264,4.215,270,1.248,275,0.983,280,1.877,283,1.501,288,0.655,289,1.404,293,1.053,300,0.883,301,2.27,311,0.733,314,2.208,319,2.437,320,0.941,327,1.927,351,1.644,356,1.113,360,0.968,364,1.368,372,0.716,374,0.968,385,0.968,400,0.916,408,0.904,414,1.181,423,1.501,429,0.716,433,1.122,436,1.074,447,1.549,482,0.941,488,1.889,493,2.615,497,0.763,503,1.15,509,0.916,514,0.744,515,0.797,524,0.873,525,1.585,555,2.063,556,2.692,558,0.812,567,0.928,579,0.863,580,3.849,583,1.91,585,2.522,596,2.198,606,1.257,610,0.954,616,0.894,626,1.392,630,0.733,636,2.329,709,0.983,744,0.873,758,0.804,765,1.644,772,1.053,773,0.998,806,0.983,822,2.66,831,0.928,842,0.904,844,0.873,864,2.478,878,0.968,895,0.968,896,1.603,948,1.033,949,2.063,952,2.372,978,1.549,980,3.693,987,0.904,1040,2.084,1094,1.963,1107,3.875,1170,1.053,1209,1.015,1234,1.927,1236,1.033,1241,1.181,1257,1.217,1261,1.074,1439,1.015,1440,1.663,1453,1.097,1731,2.185,1737,0.812,1756,1.015,1768,1.181,1788,1.122,1854,2.013,1856,1.26,1867,2.972,1968,1.15,1982,2.063,2018,1.053,2053,1.097,2090,1.122,2130,2.12,2166,1.122,2192,1.217,2280,1.31,2339,1.373,2380,1.217,2397,1.458,2413,1.31,2414,2.738,2423,2.617,2437,1.373,2457,1.26,2460,1.373,2499,1.458,2506,1.458,2508,1.373,2525,1.373,2526,1.31,2591,5,2607,1.458,2762,1.373,2763,1.458,2787,1.373,2801,3.559,2802,1.587,2803,3.874,2804,1.587,2805,1.587,2806,2.848,2807,1.587,2808,2.848,2809,1.587,2810,1.587,2811,1.587,2812,1.373,2813,1.587,2814,1.587,2815,1.587,2816,1.587,2817,1.587,2818,1.587,2819,1.587,2820,1.587,2821,1.587,2822,1.587,2823,1.587,2824,1.587]],["component/112",[98,0.772]],["title/113-1",[68,22.959,2379,52.684]],["name/113-1",[]],["text/113-1",[]],["component/113-1",[]],["title/113-2",[980,37.733]],["name/113-2",[]],["text/113-2",[]],["component/113-2",[]],["title/113",[66,28.132]],["name/113",[66,0.819]],["text/113",[24,1.776,27,4.021,34,2.766,35,2.782,39,2.783,41,1.697,44,1.678,48,2.933,49,1.306,52,1.678,57,2.196,66,3.446,68,2.441,78,1.879,81,2.367,93,2.298,98,4.493,108,2.107,212,3.967,214,2.159,230,2.925,264,2.027,278,2.255,289,2.215,301,2.159,329,2.027,440,2.819,525,2.5,548,4.59,553,2.826,556,2.56,558,2.298,580,5.326,581,2.417,585,3.26,587,2.782,596,3.803,606,1.983,610,2.7,619,3.039,758,3.438,771,2.826,773,2.826,869,2.32,884,3.344,899,3.017,908,3.345,957,3.446,980,3.864,1440,1.929,1870,2.662,1891,4.078,2053,3.104,2379,5.601,2380,3.446,2414,5.778,2427,5.872,2457,3.565,2474,3.888,2750,4.128,2825,4.492,2826,6.785,2827,6.785,2828,9.778,2829,4.492]],["component/113",[98,0.772]],["title/114-1",[48,22.983,583,26.211,606,23.47]],["name/114-1",[]],["text/114-1",[]],["component/114-1",[]],["title/114-2",[583,22.46,839,30.212,2092,28.203,2238,36.151]],["name/114-2",[]],["text/114-2",[]],["component/114-2",[]],["title/114-3",[56,24.167,66,18.734,839,35.258]],["name/114-3",[]],["text/114-3",[]],["component/114-3",[]],["title/114-4",[448,32.914,789,29.239,2764,46.005]],["name/114-4",[]],["text/114-4",[]],["component/114-4",[]],["title/114",[583,39.361]],["name/114",[583,1.146]],["text/114",[7,2.845,20,2.513,21,1.89,22,4.472,24,2.089,32,2.981,34,1.33,41,1.995,48,2.877,49,2.223,52,1.973,56,3.819,64,1.212,66,1.861,68,1.174,74,1.837,75,3.329,78,1.364,82,1.314,84,2.905,89,1.518,98,2.223,102,2.208,113,2.255,144,2.164,159,1.961,161,3.84,182,2.087,189,1.306,208,2.366,243,1.483,264,1.472,268,2.503,270,1.431,274,1.934,280,1.581,287,1.239,292,2.208,315,4.52,316,2.429,354,1.581,360,1.99,402,1.401,440,2.765,511,2.873,514,1.53,515,1.638,529,1.775,546,3.586,567,3.088,583,5.615,588,2.694,596,1.518,637,3.253,649,2.164,655,1.934,656,1.908,759,2.538,783,2.307,789,5.206,808,1.737,828,2.503,850,1.99,862,2.208,864,3.379,899,1.451,912,1.86,931,2.164,936,2.429,1060,2.164,1082,2.255,1095,2.429,1241,2.429,1457,5.105,1516,2.503,1837,3.323,2017,2.124,2134,2.59,2175,3.827,2238,2.59,2259,4.571,2353,2.694,2467,2.824,2474,2.824,2485,2.824,2762,2.824,2830,3.263,2831,3.263,2832,3.263,2833,3.263,2834,3.263,2835,3.263,2836,3.263,2837,3.263,2838,3.263,2839,5.282,2840,5.282,2841,3.263,2842,3.263,2843,3.263,2844,3.263,2845,3.263,2846,3.263,2847,3.263]],["component/114",[98,0.772]],["title/115-1",[880,27.778,2042,32.197,2848,45.55,2849,41.855]],["name/115-1",[]],["text/115-1",[]],["component/115-1",[]],["title/115-2",[103,13.601,303,23.488,708,27.166,773,22.278,2850,35.413,2851,35.413]],["name/115-2",[]],["text/115-2",[]],["component/115-2",[]],["title/115-3",[49,10.296,62,19.703,186,15.525,187,18.471,288,14.619,417,17.161]],["name/115-3",[]],["text/115-3",[]],["component/115-3",[]],["title/115-4",[293,35.258,2042,37.575,2852,53.159]],["name/115-4",[]],["text/115-4",[]],["component/115-4",[]],["title/115-5",[40,23.987,789,29.239,822,29.929]],["name/115-5",[]],["text/115-5",[]],["component/115-5",[]],["title/115-6",[303,26.429,822,22.434,2040,29.662,2045,25.942,2853,39.847]],["name/115-6",[]],["text/115-6",[]],["component/115-6",[]],["title/115",[2161,49.427]],["name/115",[2161,1.439]],["text/115",[7,1.772,10,1.605,12,1.683,14,1.047,20,1.218,21,1.154,24,1.276,28,1.192,31,1.291,39,2.147,40,1.456,44,1.954,45,1.795,49,2.208,62,3.673,64,1.944,65,1.268,66,2.943,67,3.24,68,2.375,75,3.307,87,2.14,88,1.563,89,1.501,90,3.145,93,1.65,98,2.779,103,1.239,113,2.229,138,1.404,150,1.886,185,2.232,186,1.414,187,3.444,189,2.642,209,1.577,210,2.401,214,1.55,243,1.467,245,2.663,257,1.755,262,2.1,264,1.456,281,2.064,282,1.912,288,2.16,289,1.591,305,1.717,311,1.489,314,1.838,315,2.816,320,1.912,354,1.563,356,2.045,359,1.967,363,2.28,373,1.55,376,1.666,411,2.878,422,1.577,445,1.939,448,1.997,458,1.666,474,1.862,482,1.912,516,1.774,524,1.774,549,1.862,554,1.253,557,1.7,579,1.755,580,1.886,585,1.154,593,2.029,596,1.501,604,1.838,606,3.354,626,1.577,656,1.886,773,2.029,789,2.878,808,1.717,822,4.277,836,2.401,869,2.703,875,1.997,877,3.86,991,1.967,1095,2.401,1165,4.784,1171,2.475,1238,2.182,1259,2.475,1439,3.348,1741,2.14,1778,2.475,1811,1.967,1882,2.846,1985,2.401,2040,2.401,2150,2.792,2353,2.663,2414,3.699,2426,4.808,2428,2.964,2436,2.964,2467,2.792,2488,4.529,2514,2.964,2572,2.964,2593,4.808,2641,2.964,2648,2.964,2649,2.792,2675,2.792,2714,2.964,2854,5.233,2855,3.226,2856,3.226,2857,3.226,2858,3.226,2859,3.226,2860,3.226,2861,3.226,2862,3.226,2863,3.226,2864,3.226,2865,3.226,2866,3.226,2867,3.226,2868,3.226,2869,3.226]],["component/115",[98,0.772]],["title/116-1",[25,44.096,2870,63.819]],["name/116-1",[]],["text/116-1",[]],["component/116-1",[]],["title/116-2",[34,21.67,39,21.807,1439,34.005]],["name/116-2",[]],["text/116-2",[]],["component/116-2",[]],["title/116-3",[580,37.315,1439,40.825]],["name/116-3",[]],["text/116-3",[]],["component/116-3",[]],["title/116",[212,46.675]],["name/116",[212,1.359]],["text/116",[7,1.835,12,1.742,13,2.181,24,2.142,30,2.192,34,3.175,35,2.085,39,3.502,41,2.046,49,0.979,56,2.463,57,3.322,58,2.118,59,2.118,61,1.324,62,1.873,64,2.525,65,1.324,66,3.379,68,1.949,70,2.154,75,2.358,80,1.69,84,1.852,87,2.233,89,2.52,93,1.722,98,2.28,103,1.293,107,2.192,108,1.579,109,2.38,120,1.408,128,1.69,143,2.233,147,1.812,169,1.722,182,2.154,186,1.476,187,1.756,193,3.527,197,1.146,211,2.583,212,1.969,264,2.444,278,2.72,280,3.774,281,2.154,282,1.995,283,1.774,320,1.995,327,2.278,350,2.278,356,1.316,364,1.618,372,1.519,400,1.943,402,1.446,419,3.126,423,1.774,440,1.399,482,1.995,514,2.54,524,2.98,556,1.919,580,1.969,585,1.939,586,2.506,587,3.354,589,2.192,596,3.623,616,3.05,622,3.829,638,1.774,759,1.618,822,3.827,833,2.583,854,2.053,864,2.154,867,2.583,877,1.969,883,2.233,918,2.192,920,2.053,935,2.583,955,2.38,980,1.591,1119,2.506,1216,2.278,1439,3.465,1440,2.326,1479,2.439,1737,2.771,1775,1.896,1870,1.995,1982,4.924,2009,2.583,2166,2.38,2188,2.439,2385,2.914,2388,4.299,2414,2.38,2415,2.779,2485,2.914,2660,2.779,2738,3.094,2787,2.914,2812,4.688,2871,3.367,2872,3.367,2873,3.367,2874,3.367,2875,3.367,2876,3.367,2877,3.367,2878,3.367,2879,3.367,2880,3.367,2881,3.367,2882,3.367]],["component/116",[98,0.772]],["title/117",[839,52.947]],["name/117",[839,1.541]],["text/117",[10,3.27,13,3.209,24,1.704,28,1.592,38,1.779,39,2.697,56,1.959,64,2.442,66,2.317,70,2.757,87,2.858,90,2.59,94,2.204,98,1.814,117,3.658,140,1.959,143,2.858,146,3.208,150,2.52,193,2.806,208,1.93,214,2.071,230,2.806,243,2.989,270,1.889,280,2.088,291,2.554,298,3.122,320,2.554,327,2.915,357,2.806,378,2.915,381,2.757,415,2.628,440,1.79,524,3.616,561,2.319,581,2.319,593,2.711,596,2.005,599,5.043,610,2.59,632,3.306,639,2.184,758,2.184,772,2.858,822,2.426,838,5.043,839,7.374,844,2.37,847,4.894,864,2.757,865,2.757,869,2.226,902,4.763,918,4.28,955,3.046,980,2.037,1055,2.915,1094,3.331,1209,2.757,1479,3.122,1741,2.858,1784,3.306,1969,5.427,2042,3.046,2045,2.806,2123,3.306,2273,3.73,2340,5.217,2376,3.96,2413,7.361,2450,3.96,2475,3.96,2488,3.73,2653,3.96,2812,3.73,2849,3.96,2883,4.31,2884,4.31,2885,4.31,2886,4.31,2887,4.31,2888,4.31,2889,4.31,2890,4.31,2891,4.31,2892,4.31,2893,4.31]],["component/117",[98,0.772]]],"invertedIndex":[["",{"_index":7,"title":{"6-1":{},"25-1":{},"42-1":{},"60-1":{},"82-1":{},"96-2":{}},"name":{},"text":{"1":{},"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"49":{},"50":{},"51":{},"52":{},"54":{},"55":{},"56":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"67":{},"68":{},"69":{},"70":{},"72":{},"73":{},"74":{},"76":{},"77":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"89":{},"90":{},"91":{},"92":{},"93":{},"94":{},"96":{},"99":{},"100":{},"101":{},"105":{},"106":{},"107":{},"109":{},"112":{},"114":{},"115":{},"116":{}},"component":{}}],["0",{"_index":1092,"title":{},"name":{},"text":{"9":{},"11":{},"13":{},"17":{},"19":{},"28":{},"30":{},"32":{},"36":{},"37":{},"45":{},"47":{},"49":{},"54":{},"55":{},"63":{},"65":{},"67":{},"72":{},"73":{},"85":{},"87":{},"89":{},"93":{},"94":{},"106":{},"107":{}},"component":{}}],["0.0.0",{"_index":2183,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["00",{"_index":1486,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["00000000:0a:00.0",{"_index":2707,"title":{},"name":{},"text":{"107":{}},"component":{}}],["00000001",{"_index":1462,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["00000010",{"_index":1464,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["00000100",{"_index":1466,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["00001",{"_index":1743,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0000:01:00.0",{"_index":2185,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["00101",{"_index":1744,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["00110",{"_index":1748,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["00111",{"_index":1750,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["01",{"_index":1487,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["01000",{"_index":1752,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["01001",{"_index":1754,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["01100111",{"_index":1729,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0137636861727373",{"_index":1460,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["017charss",{"_index":1459,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["02",{"_index":1656,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["03",{"_index":1495,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["04",{"_index":1496,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["05",{"_index":1511,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["06",{"_index":1590,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["07",{"_index":1685,"title":{},"name":{},"text":{"13":{},"17":{},"32":{},"36":{},"49":{},"67":{},"89":{},"93":{}},"component":{}}],["08",{"_index":1644,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["09:08",{"_index":2099,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["09:47",{"_index":2724,"title":{},"name":{},"text":{"107":{}},"component":{}}],["0:/home/retro/edid.txt",{"_index":2687,"title":{},"name":{},"text":{"106":{}},"component":{}}],["0:01:31.983118812",{"_index":2199,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["0:01:31.983243805",{"_index":2204,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["0a",{"_index":1489,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0b",{"_index":1531,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0c",{"_index":1574,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0e",{"_index":1535,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0f75f4d1",{"_index":2233,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["0x0",{"_index":1386,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x00",{"_index":1366,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0000",{"_index":1485,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x00000001",{"_index":1483,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x00000003",{"_index":1131,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x00000004",{"_index":1133,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x00000005",{"_index":1125,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x00000007",{"_index":1123,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x00000008",{"_index":1127,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x00000009",{"_index":1129,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0000000a",{"_index":1135,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0000000c",{"_index":1141,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0000000d",{"_index":1151,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x00000017",{"_index":1153,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x000001",{"_index":1482,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x00000100",{"_index":2181,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["0x0001",{"_index":992,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"44":{},"47":{},"62":{},"65":{},"84":{},"87":{}},"component":{}}],["0x0002",{"_index":1394,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0004",{"_index":1396,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0008",{"_index":1398,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0010",{"_index":1399,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["0x0020",{"_index":1400,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["0x0030",{"_index":1512,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0040",{"_index":1403,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["0x0050",{"_index":1422,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["0x0060",{"_index":1551,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0070",{"_index":1561,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0080",{"_index":1405,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["0x0090",{"_index":1583,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x00a0",{"_index":1591,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x00b0",{"_index":1598,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x00c0",{"_index":1607,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x00d0",{"_index":1613,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x00e0",{"_index":1617,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x00f0",{"_index":1621,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x01",{"_index":1045,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"44":{},"47":{},"62":{},"65":{},"84":{},"87":{}},"component":{}}],["0x0100",{"_index":1018,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"27":{},"30":{},"32":{},"44":{},"47":{},"49":{},"62":{},"65":{},"67":{},"84":{},"87":{},"89":{}},"component":{}}],["0x010000",{"_index":1414,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x010b",{"_index":1026,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x010e",{"_index":1024,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x0110",{"_index":1634,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0120",{"_index":1639,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0130",{"_index":1646,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0140",{"_index":1651,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0150",{"_index":1659,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0160",{"_index":1662,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0170",{"_index":1667,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0180",{"_index":1674,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0190",{"_index":1681,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x01a0",{"_index":1682,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x01b0",{"_index":1687,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x01c0",{"_index":1690,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x01d0",{"_index":1694,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x01e0",{"_index":1698,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x01f0",{"_index":1702,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x02",{"_index":1047,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"44":{},"47":{},"62":{},"65":{},"84":{},"87":{}},"component":{}}],["0x0200",{"_index":1020,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"27":{},"30":{},"32":{},"44":{},"47":{},"49":{},"62":{},"65":{},"67":{},"84":{},"87":{},"89":{}},"component":{}}],["0x020000",{"_index":1415,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0201",{"_index":1012,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x0204",{"_index":1014,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x0206",{"_index":1016,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x0210",{"_index":1709,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0220",{"_index":1714,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0230",{"_index":1715,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0240",{"_index":1717,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0250",{"_index":1719,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x0260",{"_index":1721,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["0x03",{"_index":1169,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0301",{"_index":1010,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x0302",{"_index":1022,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x0305",{"_index":1006,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x0307",{"_index":1008,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x04",{"_index":1168,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0400",{"_index":1401,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x040000",{"_index":1416,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x08",{"_index":1164,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x080000",{"_index":1417,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x09",{"_index":1163,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0c",{"_index":1173,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x0d",{"_index":1175,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x1",{"_index":1387,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x10",{"_index":1177,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x1000",{"_index":1408,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x100000",{"_index":1418,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x11",{"_index":1179,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x12",{"_index":1181,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x13",{"_index":1183,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x14",{"_index":1185,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x15",{"_index":1187,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x16",{"_index":1189,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x17",{"_index":1191,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x19",{"_index":1193,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x1b",{"_index":1195,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x20",{"_index":1197,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x2000",{"_index":1409,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x200000",{"_index":1420,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x21",{"_index":1198,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x22",{"_index":1200,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x23",{"_index":1202,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x24",{"_index":1203,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x25",{"_index":1205,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x26",{"_index":1206,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x27",{"_index":1207,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x28",{"_index":1208,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x29",{"_index":1210,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x2a",{"_index":1211,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x2c",{"_index":1212,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x2d",{"_index":1214,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x2e",{"_index":1215,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x2f",{"_index":1217,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x30",{"_index":1218,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x31",{"_index":1219,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x32",{"_index":1220,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x33",{"_index":1221,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x34",{"_index":1222,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x35",{"_index":1223,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x36",{"_index":1224,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x37",{"_index":1225,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x38",{"_index":1226,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x39",{"_index":1228,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x40",{"_index":1374,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x4000",{"_index":1410,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x41",{"_index":1230,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x42",{"_index":1231,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x43",{"_index":1232,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x44",{"_index":1233,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x45",{"_index":1235,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x46",{"_index":1237,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x47",{"_index":1239,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x48",{"_index":1240,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x49",{"_index":1242,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x4a",{"_index":1243,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x4b",{"_index":1245,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x4c",{"_index":1247,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x4d",{"_index":1249,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x4e",{"_index":1251,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x4f",{"_index":1253,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x50",{"_index":1255,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x51",{"_index":1256,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x52",{"_index":1258,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x53",{"_index":1260,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x54",{"_index":1262,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x55",{"_index":1264,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x5500",{"_index":1028,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x55000001",{"_index":1137,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x55000002",{"_index":1138,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x55000003",{"_index":1139,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x55000004",{"_index":1143,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x55000005",{"_index":1145,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x55000006",{"_index":1147,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x55000007",{"_index":1149,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x5501",{"_index":1030,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x5502",{"_index":1032,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["0x56",{"_index":1266,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x57",{"_index":1268,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x58",{"_index":1270,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x59",{"_index":1271,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x5a",{"_index":1272,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x5b",{"_index":1274,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x5c",{"_index":1276,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x5f",{"_index":1278,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x60",{"_index":1280,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x61",{"_index":1282,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x62",{"_index":1283,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x63",{"_index":1284,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x64",{"_index":1285,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x65",{"_index":1286,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x66",{"_index":1287,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x67",{"_index":1288,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["0x68",{"_index":1289,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x69",{"_index":1290,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x6a",{"_index":1291,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x6c",{"_index":1295,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x6d",{"_index":1297,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x6e",{"_index":1299,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x6f",{"_index":1301,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x70",{"_index":1303,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x71",{"_index":1305,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x72",{"_index":1307,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x73",{"_index":1309,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x74",{"_index":1311,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x75",{"_index":1313,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x76",{"_index":1315,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x77",{"_index":1317,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x78",{"_index":1319,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x79",{"_index":1321,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x7a",{"_index":1323,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x7b",{"_index":1325,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x7f1d50000b70",{"_index":2200,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["0x80",{"_index":1375,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x8000",{"_index":1411,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x90",{"_index":1327,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0x91",{"_index":1329,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xa0",{"_index":1331,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xa1",{"_index":1332,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xa2",{"_index":1334,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xa3",{"_index":1335,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xa4",{"_index":1337,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xa5",{"_index":1338,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xba",{"_index":1340,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xbb",{"_index":1342,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xbc",{"_index":1344,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xbd",{"_index":1345,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xbe",{"_index":1346,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xbf",{"_index":1347,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xc0",{"_index":1348,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xdb",{"_index":1350,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xdc",{"_index":1352,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xdd",{"_index":1354,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xde",{"_index":1356,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["0xe2",{"_index":1358,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["1",{"_index":287,"title":{"9-2":{},"28-2":{},"45-2":{},"63-2":{},"85-2":{},"105-4":{},"106-1":{}},"name":{},"text":{"3":{},"4":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"22":{},"23":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"37":{},"40":{},"41":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"54":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"72":{},"79":{},"80":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"93":{},"94":{},"104":{},"107":{},"110":{},"114":{}},"component":{}}],["1.0",{"_index":763,"title":{},"name":{},"text":{"6":{},"16":{},"25":{},"35":{},"42":{},"52":{},"60":{},"70":{},"82":{},"92":{}},"component":{}}],["1.16.0",{"_index":1988,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["1.18",{"_index":2530,"title":{},"name":{},"text":{"104":{}},"component":{}}],["1.22.7",{"_index":2226,"title":{},"name":{},"text":{"25":{},"42":{},"60":{}},"component":{}}],["1.24.6",{"_index":703,"title":{},"name":{},"text":{"6":{},"82":{}},"component":{}}],["1/1",{"_index":331,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["10",{"_index":1378,"title":{},"name":{},"text":{"11":{},"13":{},"17":{},"30":{},"32":{},"36":{},"47":{},"49":{},"51":{},"54":{},"65":{},"67":{},"69":{},"72":{},"87":{},"89":{},"93":{},"104":{},"105":{},"110":{}},"component":{}}],["100",{"_index":2722,"title":{},"name":{},"text":{"107":{}},"component":{}}],["1000",{"_index":2856,"title":{},"name":{},"text":{"115":{}},"component":{}}],["1000:1000",{"_index":2858,"title":{},"name":{},"text":{"115":{}},"component":{}}],["1024",{"_index":1455,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["102nd",{"_index":1359,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["1060",{"_index":2170,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["10:33",{"_index":2726,"title":{},"name":{},"text":{"107":{}},"component":{}}],["10de:1c03",{"_index":2165,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["11",{"_index":398,"title":{},"name":{},"text":{"3":{},"11":{},"13":{},"22":{},"30":{},"32":{},"40":{},"47":{},"49":{},"58":{},"65":{},"67":{},"79":{},"87":{},"89":{}},"component":{}}],["11.3",{"_index":2706,"title":{},"name":{},"text":{"107":{}},"component":{}}],["11:46",{"_index":2534,"title":{},"name":{},"text":{"104":{},"110":{}},"component":{}}],["12",{"_index":645,"title":{},"name":{},"text":{"6":{},"11":{},"12":{},"13":{},"25":{},"30":{},"31":{},"32":{},"42":{},"47":{},"48":{},"49":{},"60":{},"65":{},"66":{},"67":{},"82":{},"87":{},"88":{},"89":{}},"component":{}}],["12.561107",{"_index":2180,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["128",{"_index":977,"title":{},"name":{},"text":{"8":{},"10":{},"12":{},"27":{},"29":{},"31":{},"44":{},"46":{},"48":{},"62":{},"64":{},"66":{},"84":{},"86":{},"88":{},"107":{}},"component":{}}],["13",{"_index":1505,"title":{},"name":{},"text":{"13":{},"17":{},"32":{},"36":{},"49":{},"54":{},"67":{},"72":{},"76":{},"89":{},"93":{},"105":{}},"component":{}}],["14",{"_index":1764,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["14.138312",{"_index":2182,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["15",{"_index":1716,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"104":{},"110":{}},"component":{}}],["15t13:41+00:00",{"_index":1994,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["16",{"_index":1001,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"27":{},"30":{},"32":{},"44":{},"47":{},"49":{},"62":{},"65":{},"67":{},"84":{},"87":{},"89":{}},"component":{}}],["17",{"_index":1567,"title":{},"name":{},"text":{"13":{},"17":{},"32":{},"36":{},"49":{},"54":{},"67":{},"72":{},"89":{},"93":{},"107":{}},"component":{}}],["18",{"_index":1666,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["19",{"_index":1703,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["1920x1080",{"_index":2674,"title":{},"name":{},"text":{"106":{}},"component":{}}],["195",{"_index":2066,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["1:/var/log/xorg.0.log",{"_index":2864,"title":{},"name":{},"text":{"115":{}},"component":{}}],["1:1.3/0003:054c:0ce6.0007/input/input20/js0",{"_index":332,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["1a",{"_index":1699,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["1c",{"_index":1625,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["1d",{"_index":1622,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["1e",{"_index":1712,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["2",{"_index":322,"title":{"9-3":{},"28-3":{},"45-3":{},"63-3":{},"85-3":{},"105-5":{},"106-2":{}},"name":{},"text":{"3":{},"4":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"22":{},"23":{},"26":{},"27":{},"28":{},"30":{},"31":{},"32":{},"33":{},"34":{},"40":{},"41":{},"43":{},"44":{},"45":{},"47":{},"48":{},"49":{},"50":{},"51":{},"58":{},"59":{},"61":{},"62":{},"63":{},"65":{},"66":{},"67":{},"68":{},"69":{},"79":{},"80":{},"83":{},"84":{},"85":{},"87":{},"88":{},"89":{},"90":{},"91":{},"106":{},"107":{}},"component":{}}],["20",{"_index":1545,"title":{"105-11":{},"105-17":{}},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"105":{},"107":{}},"component":{}}],["200",{"_index":1779,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["2003",{"_index":2640,"title":{},"name":{},"text":{"105":{}},"component":{}}],["20160202",{"_index":2184,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["2023",{"_index":2745,"title":{},"name":{},"text":{"108":{}},"component":{}}],["2024",{"_index":1993,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["2048",{"_index":1474,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["21",{"_index":1506,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["22",{"_index":1549,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["223",{"_index":2097,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"104":{},"110":{}},"component":{}}],["2248",{"_index":1475,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["226",{"_index":2728,"title":{},"name":{},"text":{"107":{}},"component":{}}],["23",{"_index":1677,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["24",{"_index":1711,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"106":{}},"component":{}}],["244",{"_index":2588,"title":{},"name":{},"text":{"105":{}},"component":{}}],["25",{"_index":1648,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["255",{"_index":2067,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["256",{"_index":2671,"title":{},"name":{},"text":{"106":{}},"component":{}}],["26",{"_index":1494,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["264",{"_index":1724,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["27",{"_index":1538,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["27/udev",{"_index":399,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["28",{"_index":1601,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["29",{"_index":1614,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["2>/dev/nul",{"_index":2609,"title":{},"name":{},"text":{"105":{}},"component":{}}],["2a",{"_index":1559,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["2c",{"_index":1670,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["2d",{"_index":1665,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["2e",{"_index":1533,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["2f",{"_index":1663,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["3",{"_index":413,"title":{"9-4":{},"28-4":{},"45-4":{},"63-4":{},"85-4":{},"105-6":{},"106-3":{}},"name":{},"text":{"3":{},"4":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"22":{},"23":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"37":{},"40":{},"41":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"58":{},"59":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"79":{},"80":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"93":{},"94":{},"107":{}},"component":{}}],["3.1",{"_index":1436,"title":{"106-4":{}},"name":{},"text":{"12":{},"31":{},"48":{},"66":{},"88":{}},"component":{}}],["3.2",{"_index":2650,"title":{"106-5":{}},"name":{},"text":{},"component":{}}],["3.3",{"_index":2651,"title":{"106-6":{}},"name":{},"text":{},"component":{}}],["3.4",{"_index":2652,"title":{"106-7":{}},"name":{},"text":{},"component":{}}],["3.8",{"_index":2272,"title":{},"name":{},"text":{"54":{},"72":{}},"component":{}}],["30",{"_index":1507,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["31",{"_index":1661,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["3100",{"_index":2725,"title":{},"name":{},"text":{"107":{}},"component":{}}],["32",{"_index":1457,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"114":{}},"component":{}}],["34",{"_index":1650,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["35",{"_index":1547,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["3588.199301",{"_index":328,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["36",{"_index":1564,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["37",{"_index":1542,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["38",{"_index":1524,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["39",{"_index":1668,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["3931.403835",{"_index":449,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["3a",{"_index":1585,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["3b",{"_index":1669,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["3c",{"_index":1497,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["3d",{"_index":1720,"title":{},"name":{},"text":{"13":{},"17":{},"32":{},"36":{},"49":{},"54":{},"67":{},"72":{},"89":{},"93":{}},"component":{}}],["3e",{"_index":1595,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["3f",{"_index":1584,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["4",{"_index":996,"title":{"9-5":{},"28-5":{},"45-5":{},"63-5":{},"85-5":{},"105-7":{}},"name":{},"text":{"8":{},"11":{},"12":{},"13":{},"14":{},"27":{},"30":{},"31":{},"32":{},"33":{},"44":{},"47":{},"48":{},"49":{},"50":{},"51":{},"62":{},"65":{},"66":{},"67":{},"68":{},"69":{},"84":{},"87":{},"88":{},"89":{},"90":{}},"component":{}}],["40",{"_index":1696,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["410a",{"_index":2235,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["42",{"_index":1558,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["43",{"_index":1503,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["44",{"_index":1493,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["45",{"_index":1573,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["46",{"_index":1609,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["47",{"_index":100,"title":{},"name":{},"text":{"1":{},"13":{},"20":{},"32":{},"38":{},"49":{},"56":{},"67":{},"74":{},"89":{}},"component":{}}],["47984",{"_index":815,"title":{},"name":{},"text":{"6":{},"10":{},"25":{},"29":{},"42":{},"46":{},"60":{},"64":{},"82":{},"86":{}},"component":{}}],["47984/tcp",{"_index":2080,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["47989",{"_index":814,"title":{},"name":{},"text":{"6":{},"10":{},"25":{},"29":{},"42":{},"46":{},"60":{},"64":{},"82":{},"86":{}},"component":{}}],["47989/pin",{"_index":2456,"title":{},"name":{},"text":{"98":{},"104":{}},"component":{}}],["47989/tcp",{"_index":2081,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["47998",{"_index":1103,"title":{},"name":{},"text":{"10":{},"29":{},"46":{},"64":{},"86":{}},"component":{}}],["47999",{"_index":1102,"title":{},"name":{},"text":{"10":{},"29":{},"46":{},"64":{},"86":{}},"component":{}}],["47999/udp",{"_index":2082,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["48",{"_index":1498,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["48000",{"_index":1104,"title":{},"name":{},"text":{"10":{},"29":{},"46":{},"64":{},"86":{}},"component":{}}],["48010",{"_index":1101,"title":{},"name":{},"text":{"10":{},"29":{},"46":{},"64":{},"86":{}},"component":{}}],["48010/tcp",{"_index":2083,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["48100",{"_index":2084,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["48100/udp",{"_index":2193,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["48110/udp",{"_index":2085,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["48200",{"_index":2086,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["48200/udp",{"_index":2194,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["48210/udp",{"_index":2087,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["49",{"_index":1623,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["4a",{"_index":1642,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["4b",{"_index":1673,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["4c",{"_index":1593,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["4d",{"_index":1553,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["4e",{"_index":1513,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["4f",{"_index":1695,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["4kb",{"_index":1470,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["5",{"_index":1049,"title":{"9-6":{},"28-6":{},"45-6":{},"63-6":{},"85-6":{}},"name":{},"text":{"8":{},"11":{},"13":{},"14":{},"27":{},"30":{},"32":{},"33":{},"44":{},"47":{},"49":{},"50":{},"51":{},"62":{},"65":{},"67":{},"68":{},"69":{},"84":{},"87":{},"89":{},"90":{}},"component":{}}],["5.0.0",{"_index":1038,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"44":{},"47":{},"62":{},"65":{},"84":{},"87":{}},"component":{}}],["50",{"_index":1471,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["500mb",{"_index":2837,"title":{},"name":{},"text":{"114":{}},"component":{}}],["51",{"_index":1628,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["52",{"_index":1647,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["53",{"_index":1580,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["530.30.02",{"_index":1989,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["54",{"_index":1571,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["55",{"_index":1529,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["560738950.m3u8",{"_index":1937,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["57",{"_index":1618,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["58",{"_index":1649,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["59",{"_index":1537,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["5a",{"_index":1624,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["5b",{"_index":1710,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["5c",{"_index":1691,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["5d",{"_index":1700,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["5e",{"_index":1543,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["6",{"_index":1098,"title":{},"name":{},"text":{"10":{},"11":{},"13":{},"19":{},"29":{},"30":{},"32":{},"37":{},"46":{},"47":{},"49":{},"51":{},"55":{},"64":{},"65":{},"67":{},"69":{},"73":{},"86":{},"87":{},"89":{},"94":{}},"component":{}}],["6.11.0",{"_index":2790,"title":{},"name":{},"text":{"110":{}},"component":{}}],["60",{"_index":1530,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["61",{"_index":1517,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["62",{"_index":1582,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["63",{"_index":1541,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["64",{"_index":102,"title":{},"name":{},"text":{"1":{},"13":{},"20":{},"32":{},"38":{},"49":{},"56":{},"67":{},"74":{},"89":{},"114":{}},"component":{}}],["65",{"_index":1508,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["666",{"_index":2064,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["67",{"_index":1488,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["6716",{"_index":1434,"title":{},"name":{},"text":{"12":{},"31":{},"48":{},"66":{},"88":{}},"component":{}}],["68",{"_index":1501,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["69",{"_index":1615,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["6a",{"_index":1526,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["6b",{"_index":1608,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["6c",{"_index":1627,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["6d",{"_index":1589,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["6f",{"_index":101,"title":{},"name":{},"text":{"1":{},"13":{},"20":{},"32":{},"38":{},"49":{},"56":{},"67":{},"74":{},"89":{}},"component":{}}],["6gb",{"_index":2171,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["7",{"_index":691,"title":{},"name":{},"text":{"6":{},"11":{},"13":{},"19":{},"25":{},"30":{},"32":{},"37":{},"42":{},"47":{},"49":{},"51":{},"55":{},"60":{},"65":{},"67":{},"69":{},"73":{},"82":{},"87":{},"89":{},"94":{}},"component":{}}],["7.5",{"_index":2709,"title":{},"name":{},"text":{"107":{}},"component":{}}],["70",{"_index":1675,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["71",{"_index":1527,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["72",{"_index":1491,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["73",{"_index":1562,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["74",{"_index":1575,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["75",{"_index":1570,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["76",{"_index":1532,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["77",{"_index":1602,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["777",{"_index":2432,"title":{},"name":{},"text":{"97":{}},"component":{}}],["78",{"_index":1676,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["79",{"_index":1635,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["7a",{"_index":1604,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["7b",{"_index":1706,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["7c",{"_index":1626,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["7e",{"_index":1557,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["7f",{"_index":1514,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["8",{"_index":1227,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["80",{"_index":1500,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"107":{}},"component":{}}],["81",{"_index":1510,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["82",{"_index":1544,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["83",{"_index":1599,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["84",{"_index":1492,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["85",{"_index":1606,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["86",{"_index":1555,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["87",{"_index":1515,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["88",{"_index":1509,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["89",{"_index":1657,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["8a",{"_index":1643,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["8b",{"_index":1519,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["8c",{"_index":1611,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["8d",{"_index":1638,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["8e",{"_index":1630,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["8f",{"_index":1504,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["9",{"_index":1229,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["90",{"_index":1692,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["91",{"_index":1550,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["93",{"_index":1707,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["94",{"_index":1605,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["95",{"_index":1520,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["96",{"_index":1499,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["97",{"_index":1671,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["98",{"_index":1645,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["98e5080",{"_index":2480,"title":{},"name":{},"text":{"100":{}},"component":{}}],["99",{"_index":1629,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["9a",{"_index":1653,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["9b",{"_index":1660,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["9c",{"_index":1718,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["9d",{"_index":1577,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["9e",{"_index":1552,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["9f",{"_index":1566,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["_transform",{"_index":536,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["a1",{"_index":1597,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["a2",{"_index":1619,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["a3",{"_index":1640,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["a4",{"_index":1522,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["a5",{"_index":1518,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["a6",{"_index":1636,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["a8",{"_index":1588,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["a9",{"_index":1540,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["a=fmtp:97",{"_index":1765,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["aa",{"_index":1679,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["ab",{"_index":1697,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["abov",{"_index":1727,"title":{},"name":{},"text":{"13":{},"15":{},"17":{},"32":{},"36":{},"49":{},"51":{},"54":{},"67":{},"69":{},"72":{},"89":{},"91":{},"93":{},"105":{},"106":{}},"component":{}}],["absolut",{"_index":1109,"title":{"11-2":{},"30-2":{},"47-2":{},"65-2":{},"87-2":{}},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"101":{}},"component":{}}],["abstract",{"_index":192,"title":{},"name":{},"text":{"2":{},"5":{},"13":{},"21":{},"24":{},"32":{},"39":{},"49":{},"57":{},"67":{},"78":{},"81":{},"89":{}},"component":{}}],["ac",{"_index":1490,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["acc",{"_index":2103,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["acceler",{"_index":587,"title":{},"name":{},"text":{"5":{},"8":{},"24":{},"27":{},"44":{},"51":{},"62":{},"69":{},"81":{},"84":{},"96":{},"104":{},"108":{},"111":{},"113":{},"116":{}},"component":{}}],["acceleromet",{"_index":1373,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["accept",{"_index":2512,"title":{},"name":{},"text":{"101":{}},"component":{}}],["access",{"_index":305,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"13":{},"17":{},"22":{},"24":{},"26":{},"32":{},"36":{},"40":{},"43":{},"49":{},"51":{},"54":{},"58":{},"61":{},"67":{},"69":{},"72":{},"76":{},"79":{},"81":{},"83":{},"89":{},"93":{},"101":{},"115":{}},"component":{}}],["accompani",{"_index":933,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["achiev",{"_index":277,"title":{},"name":{},"text":{"3":{},"5":{},"15":{},"22":{},"24":{},"34":{},"40":{},"58":{},"79":{},"81":{},"91":{},"96":{},"105":{}},"component":{}}],["acknowledg",{"_index":0,"title":{"1-1":{},"20-1":{},"38-1":{},"56-1":{},"74-1":{}},"name":{},"text":{},"component":{}}],["acquir",{"_index":2853,"title":{"115-6":{}},"name":{},"text":{},"component":{}}],["action",{"_index":1162,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"100":{}},"component":{}}],["action=add",{"_index":333,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["action=add\\\\0devname=input/bomb\\\\0devpath=/devices/bomb\\\\0seqnum=1234\\\\0subsystem=input\\\\0",{"_index":443,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["activ",{"_index":1116,"title":{"11-12":{},"18-5":{},"30-12":{},"47-12":{},"65-12":{},"77-5":{},"87-12":{}},"name":{},"text":{"11":{},"13":{},"18":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"77":{},"87":{},"89":{}},"component":{}}],["actual",{"_index":164,"title":{"106-1":{}},"name":{},"text":{"2":{},"12":{},"13":{},"21":{},"31":{},"32":{},"39":{},"48":{},"49":{},"53":{},"57":{},"66":{},"67":{},"71":{},"76":{},"78":{},"88":{},"89":{},"97":{},"106":{},"112":{}},"component":{}}],["ad",{"_index":309,"title":{"95":{}},"name":{"95":{}},"text":{"3":{},"5":{},"6":{},"11":{},"13":{},"14":{},"18":{},"22":{},"24":{},"25":{},"30":{},"32":{},"33":{},"40":{},"42":{},"47":{},"49":{},"50":{},"58":{},"60":{},"65":{},"67":{},"68":{},"77":{},"79":{},"81":{},"82":{},"87":{},"89":{},"90":{},"95":{},"101":{},"104":{},"106":{},"108":{},"110":{}},"component":{}}],["adapt",{"_index":938,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["add",{"_index":329,"title":{"95-6":{}},"name":{},"text":{"3":{},"4":{},"5":{},"6":{},"7":{},"12":{},"17":{},"18":{},"19":{},"22":{},"23":{},"24":{},"25":{},"26":{},"31":{},"34":{},"36":{},"37":{},"40":{},"41":{},"42":{},"43":{},"48":{},"54":{},"58":{},"59":{},"60":{},"61":{},"66":{},"72":{},"76":{},"77":{},"79":{},"80":{},"81":{},"82":{},"83":{},"88":{},"93":{},"94":{},"95":{},"104":{},"105":{},"106":{},"109":{},"113":{}},"component":{}}],["addit",{"_index":242,"title":{"76-11":{}},"name":{},"text":{"2":{},"3":{},"4":{},"7":{},"12":{},"14":{},"15":{},"17":{},"21":{},"22":{},"23":{},"26":{},"31":{},"33":{},"34":{},"36":{},"39":{},"40":{},"41":{},"43":{},"48":{},"50":{},"51":{},"54":{},"57":{},"58":{},"59":{},"61":{},"66":{},"68":{},"69":{},"72":{},"75":{},"76":{},"78":{},"79":{},"80":{},"83":{},"88":{},"90":{},"91":{},"93":{},"105":{},"112":{}},"component":{}}],["address",{"_index":1775,"title":{"19-3":{},"37-3":{},"55-3":{},"73-3":{},"94-3":{}},"name":{},"text":{"14":{},"17":{},"19":{},"33":{},"36":{},"37":{},"50":{},"54":{},"55":{},"68":{},"72":{},"73":{},"90":{},"93":{},"94":{},"98":{},"104":{},"116":{}},"component":{}}],["adjust",{"_index":646,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"104":{},"105":{}},"component":{}}],["admin",{"_index":2455,"title":{},"name":{},"text":{"98":{},"104":{}},"component":{}}],["advantag",{"_index":2264,"title":{},"name":{},"text":{"53":{},"71":{}},"component":{}}],["advertis",{"_index":324,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["ae",{"_index":975,"title":{"12-5":{},"31-5":{},"48-5":{},"66-5":{},"88-5":{}},"name":{},"text":{"8":{},"9":{},"10":{},"12":{},"13":{},"27":{},"28":{},"29":{},"31":{},"32":{},"44":{},"45":{},"46":{},"48":{},"49":{},"62":{},"63":{},"64":{},"66":{},"67":{},"84":{},"85":{},"86":{},"88":{},"89":{}},"component":{}}],["af",{"_index":1641,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["afaiu",{"_index":430,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["affect",{"_index":2815,"title":{},"name":{},"text":{"112":{}},"component":{}}],["agnost",{"_index":213,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["agre",{"_index":891,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["aim",{"_index":2754,"title":{},"name":{},"text":{"108":{}},"component":{}}],["aliv",{"_index":111,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["alloc",{"_index":2878,"title":{},"name":{},"text":{"116":{}},"component":{}}],["allow",{"_index":15,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"9":{},"16":{},"17":{},"20":{},"22":{},"23":{},"24":{},"26":{},"28":{},"35":{},"36":{},"38":{},"40":{},"41":{},"43":{},"45":{},"52":{},"53":{},"54":{},"56":{},"58":{},"59":{},"61":{},"63":{},"70":{},"71":{},"72":{},"74":{},"79":{},"80":{},"81":{},"83":{},"85":{},"92":{},"93":{},"97":{},"105":{},"108":{},"110":{}},"component":{}}],["allowemptyinitialconfigur",{"_index":2683,"title":{},"name":{},"text":{"106":{},"109":{}},"component":{}}],["along",{"_index":924,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["alpha",{"_index":2412,"title":{},"name":{},"text":{"96":{},"108":{}},"component":{}}],["alreadi",{"_index":1737,"title":{"19-3":{},"37-3":{},"55-3":{},"73-3":{},"94-3":{}},"name":{},"text":{"13":{},"17":{},"18":{},"19":{},"32":{},"36":{},"37":{},"49":{},"51":{},"54":{},"55":{},"67":{},"69":{},"72":{},"73":{},"77":{},"89":{},"93":{},"94":{},"95":{},"96":{},"97":{},"105":{},"108":{},"110":{},"112":{},"116":{}},"component":{}}],["altern",{"_index":2676,"title":{},"name":{},"text":{"106":{},"110":{}},"component":{}}],["although",{"_index":902,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"107":{},"108":{},"117":{}},"component":{}}],["alway",{"_index":610,"title":{},"name":{},"text":{"5":{},"13":{},"14":{},"24":{},"32":{},"33":{},"49":{},"50":{},"53":{},"67":{},"68":{},"71":{},"81":{},"89":{},"90":{},"112":{},"113":{},"117":{}},"component":{}}],["amd",{"_index":1867,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{},"109":{},"112":{}},"component":{}}],["amd/intel",{"_index":2077,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["amdgpu",{"_index":2773,"title":{},"name":{},"text":{"109":{}},"component":{}}],["amount",{"_index":1360,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["analog",{"_index":1371,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["analys",{"_index":1872,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["analyz",{"_index":2871,"title":{},"name":{},"text":{"116":{}},"component":{}}],["andrewmackrodt/firefox",{"_index":2513,"title":{},"name":{},"text":{"101":{}},"component":{}}],["angelnu",{"_index":2540,"title":{},"name":{},"text":{"104":{}},"component":{}}],["angelnu/gam",{"_index":2543,"title":{},"name":{},"text":{"104":{}},"component":{}}],["announc",{"_index":1771,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{},"108":{}},"component":{}}],["anoth",{"_index":359,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"22":{},"23":{},"26":{},"40":{},"41":{},"43":{},"58":{},"59":{},"61":{},"79":{},"80":{},"83":{},"99":{},"115":{}},"component":{}}],["answer",{"_index":2884,"title":{},"name":{},"text":{"117":{}},"component":{}}],["anybodi",{"_index":2798,"title":{},"name":{},"text":{"111":{}},"component":{}}],["anyon",{"_index":116,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{},"97":{}},"component":{}}],["anyth",{"_index":427,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{},"97":{},"98":{},"104":{}},"component":{}}],["apart",{"_index":428,"title":{},"name":{},"text":{"3":{},"10":{},"22":{},"29":{},"40":{},"46":{},"58":{},"64":{},"79":{},"86":{}},"component":{}}],["api",{"_index":575,"title":{},"name":{},"text":{"5":{},"7":{},"9":{},"24":{},"26":{},"28":{},"43":{},"45":{},"51":{},"61":{},"63":{},"69":{},"81":{},"83":{},"85":{},"96":{},"107":{}},"component":{}}],["apostroph",{"_index":1357,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["app",{"_index":585,"title":{"75":{},"95":{},"15-2":{},"15-6":{},"15-8":{},"15-13":{},"19-2":{},"34-2":{},"34-6":{},"34-8":{},"34-14":{},"37-2":{},"51-3":{},"51-4":{},"51-10":{},"55-2":{},"69-3":{},"69-4":{},"69-10":{},"73-2":{},"91-2":{},"91-6":{},"91-8":{},"91-13":{},"94-2":{},"100-4":{},"105-5":{},"112-3":{}},"name":{"95":{}},"text":{"5":{},"7":{},"10":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"24":{},"26":{},"29":{},"33":{},"34":{},"35":{},"36":{},"37":{},"43":{},"46":{},"50":{},"51":{},"52":{},"54":{},"55":{},"61":{},"64":{},"68":{},"69":{},"70":{},"72":{},"73":{},"75":{},"76":{},"77":{},"81":{},"83":{},"86":{},"90":{},"91":{},"92":{},"93":{},"94":{},"95":{},"98":{},"100":{},"101":{},"102":{},"103":{},"104":{},"105":{},"108":{},"111":{},"112":{},"113":{},"115":{},"116":{}},"component":{}}],["app_state_fold",{"_index":1835,"title":{},"name":{},"text":{"15":{},"34":{},"91":{}},"component":{}}],["app_titl",{"_index":1836,"title":{},"name":{},"text":{"15":{},"34":{},"91":{}},"component":{}}],["appear",{"_index":2157,"title":{},"name":{},"text":{"18":{},"77":{},"100":{},"107":{}},"component":{}}],["appimag",{"_index":2601,"title":{},"name":{},"text":{"105":{}},"component":{}}],["appimage.yaml",{"_index":2551,"title":{"105-16":{}},"name":{},"text":{"105":{}},"component":{}}],["appimage_extract_and_run",{"_index":2616,"title":{},"name":{},"text":{"105":{}},"component":{}}],["appimage_extract_and_run=1\",\"run_sway=1\",\"gow_required_devices=/dev/input/ev",{"_index":2615,"title":{},"name":{},"text":{"105":{}},"component":{}}],["appimagelauncher_dis",{"_index":2635,"title":{},"name":{},"text":{"105":{}},"component":{}}],["appimg",{"_index":2627,"title":{},"name":{},"text":{"105":{}},"component":{}}],["appli",{"_index":1362,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["applic",{"_index":280,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"17":{},"18":{},"22":{},"23":{},"24":{},"26":{},"36":{},"40":{},"41":{},"43":{},"51":{},"54":{},"58":{},"59":{},"61":{},"69":{},"72":{},"77":{},"79":{},"80":{},"81":{},"83":{},"93":{},"95":{},"96":{},"101":{},"104":{},"105":{},"108":{},"111":{},"112":{},"114":{},"116":{},"117":{}},"component":{}}],["applications/gam",{"_index":566,"title":{"5-5":{},"24-5":{},"81-5":{}},"name":{},"text":{},"component":{}}],["appnam",{"_index":2828,"title":{},"name":{},"text":{"113":{}},"component":{}}],["approach",{"_index":350,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"79":{},"83":{},"116":{}},"component":{}}],["appropr",{"_index":2613,"title":{},"name":{},"text":{"105":{}},"component":{}}],["appropri",{"_index":433,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{},"95":{},"100":{},"105":{},"112":{}},"component":{}}],["apps.audio",{"_index":1906,"title":{},"name":{},"text":{"16":{},"35":{},"51":{},"52":{},"69":{},"70":{},"92":{}},"component":{}}],["apps.runn",{"_index":1846,"title":{},"name":{},"text":{"15":{},"18":{},"34":{},"51":{},"69":{},"76":{},"77":{},"91":{},"105":{}},"component":{}}],["apps.video",{"_index":1860,"title":{},"name":{},"text":{"15":{},"16":{},"35":{},"51":{},"52":{},"69":{},"70":{},"91":{},"92":{}},"component":{}}],["apps/gam",{"_index":473,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"51":{},"58":{},"69":{},"79":{}},"component":{}}],["apt",{"_index":658,"title":{"95-6":{}},"name":{},"text":{"6":{},"19":{},"25":{},"37":{},"42":{},"60":{},"82":{},"94":{},"95":{}},"component":{}}],["aptli",{"_index":2825,"title":{},"name":{},"text":{"113":{}},"component":{}}],["arbitrari",{"_index":2590,"title":{},"name":{},"text":{"105":{}},"component":{}}],["arch",{"_index":2623,"title":{},"name":{},"text":{"105":{}},"component":{}}],["architectur",{"_index":2708,"title":{},"name":{},"text":{"107":{}},"component":{}}],["archwiki",{"_index":2030,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["aren’t",{"_index":2384,"title":{},"name":{},"text":{"95":{},"100":{}},"component":{}}],["arg",{"_index":2006,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"100":{},"105":{}},"component":{}}],["argument",{"_index":2591,"title":{},"name":{},"text":{"105":{},"112":{}},"component":{}}],["around",{"_index":245,"title":{},"name":{},"text":{"2":{},"21":{},"78":{},"115":{}},"component":{}}],["arriv",{"_index":325,"title":{"11-10":{},"30-10":{},"47-10":{},"65-10":{},"87-10":{}},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["arrow",{"_index":2859,"title":{},"name":{},"text":{"115":{}},"component":{}}],["articl",{"_index":614,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["arug",{"_index":2824,"title":{},"name":{},"text":{"112":{}},"component":{}}],["ask",{"_index":1060,"title":{},"name":{},"text":{"9":{},"13":{},"28":{},"32":{},"45":{},"49":{},"63":{},"67":{},"85":{},"89":{},"99":{},"114":{}},"component":{}}],["asset",{"_index":2572,"title":{},"name":{},"text":{"105":{},"115":{}},"component":{}}],["assign",{"_index":299,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"93":{}},"component":{}}],["associ",{"_index":2261,"title":{},"name":{},"text":{"51":{},"69":{},"100":{}},"component":{}}],["asterisk",{"_index":1292,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["atom",{"_index":879,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["attach",{"_index":2649,"title":{"106-1":{}},"name":{},"text":{"106":{},"115":{}},"component":{}}],["attempt",{"_index":2526,"title":{},"name":{},"text":{"102":{},"107":{},"108":{},"112":{}},"component":{}}],["attrs{id/vendor}==\"ab00",{"_index":2112,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["attrs{name}==\"wolf",{"_index":2114,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["audio",{"_index":61,"title":{"12":{},"31":{},"48":{},"66":{},"88":{},"5-2":{},"16-4":{},"24-2":{},"35-4":{},"52-4":{},"70-4":{},"81-2":{},"92-4":{}},"name":{},"text":{"1":{},"2":{},"4":{},"5":{},"10":{},"12":{},"14":{},"16":{},"17":{},"19":{},"20":{},"21":{},"23":{},"24":{},"29":{},"31":{},"33":{},"35":{},"36":{},"37":{},"38":{},"39":{},"41":{},"46":{},"48":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"59":{},"64":{},"66":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"78":{},"80":{},"81":{},"86":{},"88":{},"90":{},"92":{},"93":{},"94":{},"96":{},"108":{},"116":{}},"component":{}}],["audio.hpp",{"_index":198,"title":{},"name":{},"text":{"2":{},"4":{},"21":{},"23":{},"39":{},"41":{},"57":{},"59":{},"78":{},"80":{}},"component":{}}],["audio/mpeg",{"_index":1908,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["audio/video",{"_index":485,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"51":{},"59":{},"69":{},"80":{}},"component":{}}],["audioconvert",{"_index":1903,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["audiotestsrc",{"_index":2242,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["augment",{"_index":404,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["authent",{"_index":1052,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["autologin",{"_index":2789,"title":{},"name":{},"text":{"110":{}},"component":{}}],["automat",{"_index":360,"title":{},"name":{},"text":{"3":{},"5":{},"22":{},"24":{},"40":{},"51":{},"53":{},"58":{},"69":{},"71":{},"79":{},"81":{},"98":{},"100":{},"107":{},"112":{},"114":{}},"component":{}}],["autovideosink",{"_index":1876,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["av1",{"_index":519,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["avail",{"_index":300,"title":{},"name":{},"text":{"3":{},"5":{},"10":{},"15":{},"19":{},"22":{},"24":{},"29":{},"34":{},"37":{},"40":{},"46":{},"51":{},"55":{},"58":{},"64":{},"69":{},"73":{},"79":{},"81":{},"86":{},"91":{},"94":{},"112":{}},"component":{}}],["avfvideosrc",{"_index":1880,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["avoid",{"_index":600,"title":{},"name":{},"text":{"5":{},"15":{},"24":{},"34":{},"51":{},"69":{},"81":{},"91":{}},"component":{}}],["awar",{"_index":2716,"title":{},"name":{},"text":{"107":{}},"component":{}}],["away",{"_index":592,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["awk",{"_index":2073,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["b",{"_index":702,"title":{},"name":{},"text":{"6":{},"11":{},"13":{},"25":{},"30":{},"32":{},"42":{},"47":{},"49":{},"60":{},"65":{},"67":{},"82":{},"87":{},"89":{}},"component":{}}],["b0",{"_index":1672,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["b1",{"_index":1572,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["b2",{"_index":1655,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["b3",{"_index":1576,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["b318",{"_index":2236,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["b5",{"_index":1534,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["b6",{"_index":1600,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["b7",{"_index":1525,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["b8",{"_index":1539,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["b9",{"_index":1528,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["ba",{"_index":1563,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["back",{"_index":376,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"11":{},"13":{},"22":{},"23":{},"26":{},"28":{},"30":{},"32":{},"40":{},"41":{},"43":{},"45":{},"47":{},"49":{},"58":{},"59":{},"61":{},"63":{},"65":{},"67":{},"79":{},"80":{},"83":{},"85":{},"87":{},"89":{},"115":{}},"component":{}}],["backend",{"_index":1063,"title":{},"name":{},"text":{"9":{},"10":{},"14":{},"28":{},"29":{},"33":{},"45":{},"46":{},"50":{},"63":{},"64":{},"68":{},"85":{},"86":{},"90":{}},"component":{}}],["background",{"_index":2192,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{},"112":{}},"component":{}}],["backslash",{"_index":1353,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["backspac",{"_index":1171,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"115":{}},"component":{}}],["backtrac",{"_index":1832,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["backup",{"_index":2880,"title":{},"name":{},"text":{"116":{}},"component":{}}],["bad:aom=en",{"_index":738,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["bad:nvcodec=en",{"_index":739,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["bad:qsv=en",{"_index":737,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["bad:x265=en",{"_index":736,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["ball",{"_index":1859,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["bandwith",{"_index":1044,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["base",{"_index":69,"title":{"100-3":{},"105-4":{},"105-5":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"15":{},"16":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"34":{},"35":{},"38":{},"39":{},"40":{},"41":{},"42":{},"51":{},"52":{},"56":{},"57":{},"58":{},"59":{},"60":{},"69":{},"70":{},"74":{},"78":{},"79":{},"80":{},"81":{},"82":{},"91":{},"92":{},"95":{},"97":{},"100":{},"105":{},"108":{},"109":{}},"component":{}}],["base64",{"_index":444,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["base_app_imag",{"_index":2602,"title":{},"name":{},"text":{"105":{}},"component":{}}],["base_app_image=gow/bas",{"_index":2583,"title":{},"name":{},"text":{"105":{}},"component":{}}],["base_app_image=gow/lutri",{"_index":2612,"title":{},"name":{},"text":{"105":{}},"component":{}}],["base_create_json",{"_index":2249,"title":{},"name":{},"text":{"51":{},"69":{},"76":{},"105":{}},"component":{}}],["base_image=gow/bas",{"_index":2581,"title":{},"name":{},"text":{"105":{}},"component":{}}],["base_image=mi",{"_index":2491,"title":{},"name":{},"text":{"100":{}},"component":{}}],["bash",{"_index":555,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{},"102":{},"108":{},"112":{}},"component":{}}],["bash_rc",{"_index":746,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["basi",{"_index":2154,"title":{},"name":{},"text":{"18":{},"77":{}},"component":{}}],["basic",{"_index":503,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{},"101":{},"105":{},"112":{}},"component":{}}],["batteri",{"_index":1118,"title":{"11-16":{},"30-16":{},"47-16":{},"65-16":{},"87-16":{}},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["bb",{"_index":1722,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["bbuild",{"_index":801,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["bc",{"_index":1578,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["bd",{"_index":1705,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["be",{"_index":409,"title":{},"name":{},"text":{"3":{},"7":{},"11":{},"12":{},"22":{},"26":{},"30":{},"31":{},"40":{},"43":{},"47":{},"48":{},"58":{},"61":{},"65":{},"66":{},"79":{},"83":{},"87":{},"88":{},"100":{}},"component":{}}],["beast",{"_index":2732,"title":{},"name":{},"text":{"108":{}},"component":{}}],["befor",{"_index":364,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"9":{},"12":{},"13":{},"14":{},"22":{},"23":{},"24":{},"28":{},"31":{},"32":{},"33":{},"40":{},"41":{},"45":{},"48":{},"49":{},"50":{},"58":{},"59":{},"63":{},"66":{},"67":{},"68":{},"79":{},"80":{},"81":{},"85":{},"88":{},"89":{},"90":{},"96":{},"97":{},"106":{},"110":{},"112":{},"116":{}},"component":{}}],["begin",{"_index":2607,"title":{},"name":{},"text":{"105":{},"112":{}},"component":{}}],["behav",{"_index":2661,"title":{},"name":{},"text":{"106":{}},"component":{}}],["behaviour",{"_index":472,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["behind",{"_index":206,"title":{},"name":{},"text":{"2":{},"7":{},"12":{},"13":{},"21":{},"26":{},"31":{},"32":{},"39":{},"43":{},"48":{},"49":{},"57":{},"61":{},"66":{},"67":{},"78":{},"83":{},"88":{},"89":{},"96":{}},"component":{}}],["believ",{"_index":2653,"title":{},"name":{},"text":{"106":{},"117":{}},"component":{}}],["below",{"_index":1453,"title":{},"name":{},"text":{"13":{},"18":{},"32":{},"49":{},"67":{},"76":{},"77":{},"89":{},"106":{},"112":{}},"component":{}}],["benefit",{"_index":143,"title":{},"name":{},"text":{"2":{},"5":{},"21":{},"24":{},"39":{},"57":{},"78":{},"81":{},"96":{},"106":{},"116":{},"117":{}},"component":{}}],["bespok",{"_index":2560,"title":{},"name":{},"text":{"105":{}},"component":{}}],["best",{"_index":955,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"96":{},"106":{},"116":{},"117":{}},"component":{}}],["bet",{"_index":2890,"title":{},"name":{},"text":{"117":{}},"component":{}}],["beta",{"_index":2819,"title":{},"name":{},"text":{"112":{}},"component":{}}],["better",{"_index":4,"title":{},"name":{},"text":{"1":{},"10":{},"20":{},"29":{},"38":{},"46":{},"51":{},"56":{},"64":{},"69":{},"74":{},"86":{}},"component":{}}],["between",{"_index":285,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"9":{},"14":{},"16":{},"22":{},"23":{},"24":{},"26":{},"28":{},"33":{},"35":{},"40":{},"41":{},"43":{},"45":{},"50":{},"52":{},"53":{},"58":{},"59":{},"61":{},"63":{},"68":{},"70":{},"71":{},"79":{},"80":{},"81":{},"83":{},"85":{},"90":{},"92":{},"96":{},"97":{}},"component":{}}],["bey",{"_index":105,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["beyond",{"_index":2669,"title":{},"name":{},"text":{"106":{}},"component":{}}],["bf",{"_index":1587,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["big",{"_index":1119,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"96":{},"116":{}},"component":{}}],["bigbuckbunni",{"_index":1914,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["bin",{"_index":684,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"106":{}},"component":{}}],["bin/bash",{"_index":2046,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"95":{},"105":{}},"component":{}}],["binari",{"_index":505,"title":{"13-6":{},"32-6":{},"49-6":{},"67-6":{},"89-6":{}},"name":{},"text":{"4":{},"11":{},"13":{},"23":{},"30":{},"32":{},"41":{},"47":{},"49":{},"59":{},"65":{},"67":{},"80":{},"87":{},"89":{},"105":{},"106":{}},"component":{}}],["bind",{"_index":2190,"title":{"76-6":{}},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"76":{},"94":{}},"component":{}}],["bison",{"_index":666,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["bit",{"_index":546,"title":{},"name":{},"text":{"4":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"17":{},"23":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"36":{},"41":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"54":{},"59":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"72":{},"80":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"93":{},"106":{},"114":{}},"component":{}}],["bitestream",{"_index":499,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["bitfield",{"_index":1370,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["black",{"_index":2092,"title":{"19-1":{},"37-1":{},"55-1":{},"73-1":{},"94-1":{},"114-2":{}},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["blank",{"_index":2438,"title":{},"name":{},"text":{"97":{}},"component":{}}],["bleed",{"_index":2817,"title":{},"name":{},"text":{"112":{}},"component":{}}],["block",{"_index":1446,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{}},"component":{}}],["blog",{"_index":2517,"title":{},"name":{},"text":{"101":{}},"component":{}}],["board",{"_index":2464,"title":{},"name":{},"text":{"99":{}},"component":{}}],["boilerpl",{"_index":534,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["book",{"_index":960,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["boost",{"_index":178,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["boost::wrapexcept",{"_index":2189,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["both",{"_index":529,"title":{},"name":{},"text":{"4":{},"5":{},"7":{},"11":{},"15":{},"23":{},"24":{},"26":{},"30":{},"41":{},"43":{},"47":{},"51":{},"59":{},"61":{},"65":{},"69":{},"80":{},"81":{},"83":{},"87":{},"91":{},"96":{},"97":{},"109":{},"114":{}},"component":{}}],["box",{"_index":2115,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"99":{},"101":{},"110":{}},"component":{}}],["brand",{"_index":2127,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"107":{}},"component":{}}],["break",{"_index":598,"title":{},"name":{},"text":{"5":{},"11":{},"15":{},"24":{},"30":{},"47":{},"65":{},"81":{},"87":{},"91":{}},"component":{}}],["breviti",{"_index":1849,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["brief",{"_index":2177,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["bring",{"_index":2739,"title":{},"name":{},"text":{"108":{}},"component":{}}],["broadcast",{"_index":361,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["broken",{"_index":928,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["brows",{"_index":2357,"title":{},"name":{},"text":{"76":{}},"component":{}}],["browser",{"_index":2759,"title":{},"name":{},"text":{"108":{}},"component":{}}],["btn",{"_index":1388,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["bu",{"_index":247,"title":{},"name":{},"text":{"2":{},"21":{},"78":{},"107":{}},"component":{}}],["bucket/sample/bigbuckbunny.mp4",{"_index":1875,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["buffer",{"_index":510,"title":{},"name":{},"text":{"4":{},"5":{},"7":{},"23":{},"24":{},"26":{},"41":{},"43":{},"59":{},"61":{},"80":{},"81":{},"83":{}},"component":{}}],["buil",{"_index":743,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["build",{"_index":639,"title":{"100":{},"6-3":{},"6-4":{},"25-3":{},"25-4":{},"42-3":{},"42-4":{},"60-3":{},"60-4":{},"82-3":{},"82-4":{},"100-2":{},"105-3":{},"105-4":{},"105-5":{},"105-6":{},"105-12":{},"105-19":{}},"name":{"100":{}},"text":{"6":{},"17":{},"25":{},"36":{},"42":{},"54":{},"60":{},"72":{},"82":{},"93":{},"95":{},"100":{},"105":{},"117":{}},"component":{}}],["build/src/wolf/wolf",{"_index":807,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["build_base_app_image=mi",{"_index":2494,"title":{},"name":{},"text":{"100":{}},"component":{}}],["build_base_image=mi",{"_index":2493,"title":{},"name":{},"text":{"100":{}},"component":{}}],["buildtype=releas",{"_index":713,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["built",{"_index":230,"title":{},"name":{},"text":{"2":{},"5":{},"21":{},"24":{},"39":{},"57":{},"78":{},"81":{},"100":{},"101":{},"106":{},"113":{},"117":{}},"component":{}}],["bunch",{"_index":959,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["bundl",{"_index":2377,"title":{},"name":{},"text":{"95":{}},"component":{}}],["bus/pci/drivers/nvidia",{"_index":1842,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["bus/virtio/drivers/virtio_gpu",{"_index":1840,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["button",{"_index":1110,"title":{"11-3":{},"11-13":{},"30-3":{},"30-13":{},"47-3":{},"47-13":{},"65-3":{},"65-13":{},"87-3":{},"87-13":{}},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["button_flag",{"_index":1389,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["button_flags2",{"_index":1390,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["byte",{"_index":491,"title":{},"name":{},"text":{"4":{},"8":{},"11":{},"12":{},"13":{},"23":{},"27":{},"30":{},"31":{},"32":{},"41":{},"44":{},"47":{},"48":{},"49":{},"59":{},"62":{},"65":{},"66":{},"67":{},"80":{},"84":{},"87":{},"88":{},"89":{},"106":{}},"component":{}}],["c",{"_index":166,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"5":{},"6":{},"8":{},"11":{},"12":{},"17":{},"21":{},"22":{},"23":{},"24":{},"25":{},"27":{},"30":{},"31":{},"36":{},"39":{},"40":{},"41":{},"42":{},"44":{},"47":{},"48":{},"51":{},"54":{},"57":{},"58":{},"59":{},"60":{},"62":{},"65":{},"66":{},"69":{},"72":{},"76":{},"78":{},"79":{},"80":{},"81":{},"82":{},"84":{},"87":{},"88":{},"93":{},"105":{}},"component":{}}],["c0",{"_index":1704,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["c0579f18f8d1",{"_index":2237,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["c1",{"_index":1689,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["c2",{"_index":1658,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["c3",{"_index":1581,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["c4",{"_index":1592,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["c5",{"_index":1612,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["c6",{"_index":1678,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["c7",{"_index":1594,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["c8",{"_index":1637,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["ca",{"_index":668,"title":{},"name":{},"text":{"6":{},"13":{},"25":{},"32":{},"42":{},"49":{},"60":{},"67":{},"82":{},"89":{}},"component":{}}],["call",{"_index":311,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"12":{},"13":{},"19":{},"22":{},"23":{},"26":{},"28":{},"31":{},"32":{},"37":{},"40":{},"41":{},"43":{},"45":{},"48":{},"49":{},"55":{},"58":{},"59":{},"61":{},"63":{},"66":{},"67":{},"73":{},"79":{},"80":{},"83":{},"85":{},"88":{},"89":{},"94":{},"95":{},"98":{},"100":{},"104":{},"105":{},"106":{},"109":{},"112":{},"115":{}},"component":{}}],["callback",{"_index":897,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["can’t",{"_index":296,"title":{"100-2":{}},"name":{},"text":{"3":{},"7":{},"17":{},"22":{},"26":{},"36":{},"40":{},"43":{},"54":{},"58":{},"61":{},"72":{},"79":{},"83":{},"93":{},"100":{}},"component":{}}],["cap",{"_index":470,"title":{},"name":{},"text":{"3":{},"19":{},"22":{},"37":{},"40":{},"58":{},"79":{},"94":{}},"component":{}}],["cap1",{"_index":2036,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["cap2",{"_index":2037,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["capabl",{"_index":469,"title":{},"name":{},"text":{"3":{},"11":{},"17":{},"22":{},"30":{},"36":{},"40":{},"47":{},"58":{},"65":{},"79":{},"87":{},"93":{},"101":{}},"component":{}}],["capadd",{"_index":2252,"title":{},"name":{},"text":{"51":{},"69":{},"76":{},"105":{}},"component":{}}],["caps/nvidia",{"_index":2035,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["capslock",{"_index":1186,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["captur",{"_index":1881,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["card",{"_index":963,"title":{"104-5":{}},"name":{},"text":{"7":{},"15":{},"26":{},"43":{},"51":{},"61":{},"69":{},"83":{},"91":{},"96":{},"104":{},"107":{}},"component":{}}],["card0",{"_index":2729,"title":{},"name":{},"text":{"107":{}},"component":{}}],["care",{"_index":109,"title":{},"name":{},"text":{"1":{},"5":{},"20":{},"24":{},"38":{},"56":{},"74":{},"81":{},"116":{}},"component":{}}],["cargo",{"_index":767,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["carri",{"_index":923,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["case",{"_index":865,"title":{},"name":{},"text":{"7":{},"15":{},"26":{},"34":{},"43":{},"51":{},"61":{},"69":{},"83":{},"91":{},"101":{},"105":{},"106":{},"117":{}},"component":{}}],["cat",{"_index":2020,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["catastroph",{"_index":2527,"title":{},"name":{},"text":{"103":{}},"component":{}}],["catch2",{"_index":252,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["caus",{"_index":2123,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"117":{}},"component":{}}],["cb",{"_index":1701,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["cbc",{"_index":1105,"title":{},"name":{},"text":{"10":{},"12":{},"29":{},"31":{},"46":{},"48":{},"64":{},"66":{},"86":{},"88":{}},"component":{}}],["cc",{"_index":1713,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["ccach",{"_index":665,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["cd",{"_index":706,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"103":{}},"component":{}}],["ce",{"_index":1556,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["cemu",{"_index":2348,"title":{},"name":{},"text":{"76":{}},"component":{}}],["central",{"_index":2502,"title":{},"name":{},"text":{"101":{}},"component":{}}],["cert.pem",{"_index":1803,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["certain",{"_index":914,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["certainli",{"_index":2885,"title":{},"name":{},"text":{"117":{}},"component":{}}],["certif",{"_index":669,"title":{},"name":{},"text":{"6":{},"9":{},"25":{},"28":{},"42":{},"45":{},"60":{},"63":{},"82":{},"85":{}},"component":{}}],["certificate_signatur",{"_index":1080,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["cf",{"_index":1684,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["cflags=\"$cflag",{"_index":754,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["cgroup",{"_index":310,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"93":{}},"component":{}}],["challeng",{"_index":823,"title":{},"name":{},"text":{"7":{},"9":{},"26":{},"28":{},"43":{},"45":{},"61":{},"63":{},"83":{},"85":{}},"component":{}}],["challengerespons",{"_index":1075,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["chanc",{"_index":946,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["chang",{"_index":630,"title":{"15-4":{},"34-4":{},"91-4":{}},"name":{},"text":{"5":{},"7":{},"11":{},"13":{},"15":{},"17":{},"18":{},"19":{},"24":{},"26":{},"30":{},"32":{},"34":{},"36":{},"37":{},"43":{},"47":{},"49":{},"54":{},"55":{},"61":{},"65":{},"67":{},"72":{},"73":{},"76":{},"77":{},"81":{},"83":{},"87":{},"89":{},"91":{},"93":{},"94":{},"95":{},"97":{},"104":{},"105":{},"106":{},"109":{},"112":{}},"component":{}}],["channel",{"_index":114,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{},"76":{},"96":{}},"component":{}}],["channels=(int)2",{"_index":1913,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["char",{"_index":1002,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["charact",{"_index":1769,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{},"106":{}},"component":{}}],["characterist",{"_index":916,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["charg",{"_index":2407,"title":{},"name":{},"text":{"96":{}},"component":{}}],["chart",{"_index":2542,"title":{},"name":{},"text":{"104":{}},"component":{}}],["chat",{"_index":2715,"title":{},"name":{},"text":{"107":{},"110":{}},"component":{}}],["cheat",{"_index":1878,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["check",{"_index":759,"title":{},"name":{},"text":{"6":{},"9":{},"12":{},"13":{},"17":{},"19":{},"25":{},"28":{},"31":{},"32":{},"36":{},"37":{},"42":{},"45":{},"48":{},"49":{},"54":{},"55":{},"60":{},"63":{},"66":{},"67":{},"72":{},"73":{},"82":{},"85":{},"88":{},"89":{},"93":{},"94":{},"97":{},"98":{},"100":{},"103":{},"104":{},"107":{},"110":{},"114":{},"116":{}},"component":{}}],["checklist",{"_index":2176,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["checkout",{"_index":263,"title":{},"name":{},"text":{"2":{},"12":{},"19":{},"21":{},"31":{},"37":{},"39":{},"48":{},"55":{},"57":{},"66":{},"73":{},"78":{},"88":{},"94":{},"104":{}},"component":{}}],["checksum",{"_index":2478,"title":{},"name":{},"text":{"100":{}},"component":{}}],["chmod",{"_index":2431,"title":{},"name":{},"text":{"97":{}},"component":{}}],["chmod=777",{"_index":2603,"title":{},"name":{},"text":{"105":{}},"component":{}}],["chmodx",{"_index":2631,"title":{},"name":{},"text":{"105":{}},"component":{}}],["choic",{"_index":648,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"97":{},"108":{}},"component":{}}],["choos",{"_index":2415,"title":{},"name":{},"text":{"96":{},"100":{},"108":{},"116":{}},"component":{}}],["chosen",{"_index":2257,"title":{},"name":{},"text":{"51":{},"69":{},"100":{}},"component":{}}],["chown",{"_index":2857,"title":{},"name":{},"text":{"115":{}},"component":{}}],["chroma",{"_index":1960,"title":{},"name":{},"text":{"16":{},"19":{},"35":{},"37":{},"52":{},"70":{},"92":{},"94":{}},"component":{}}],["chrome",{"_index":2519,"title":{},"name":{},"text":{"101":{}},"component":{}}],["chunk",{"_index":512,"title":{},"name":{},"text":{"4":{},"13":{},"23":{},"32":{},"41":{},"49":{},"59":{},"67":{},"80":{},"89":{}},"component":{}}],["cinstal",{"_index":769,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["circumst",{"_index":2713,"title":{},"name":{},"text":{"107":{}},"component":{}}],["clang",{"_index":786,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["class",{"_index":533,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{},"107":{}},"component":{}}],["clean",{"_index":774,"title":{},"name":{},"text":{"6":{},"19":{},"25":{},"37":{},"42":{},"53":{},"55":{},"60":{},"71":{},"73":{},"82":{},"94":{}},"component":{}}],["clear",{"_index":1174,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["cli",{"_index":202,"title":{"16-1":{},"35-1":{},"52-1":{},"70-1":{},"92-1":{}},"name":{},"text":{"2":{},"3":{},"15":{},"17":{},"21":{},"22":{},"34":{},"36":{},"39":{},"40":{},"51":{},"54":{},"57":{},"58":{},"69":{},"72":{},"78":{},"79":{},"91":{},"93":{},"107":{}},"component":{}}],["click",{"_index":2458,"title":{},"name":{},"text":{"98":{}},"component":{}}],["client",{"_index":20,"title":{"7-2":{},"15-3":{},"26-2":{},"34-3":{},"43-2":{},"61-2":{},"83-2":{},"91-3":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"15":{},"20":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"34":{},"38":{},"40":{},"41":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"51":{},"53":{},"56":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"69":{},"71":{},"74":{},"75":{},"79":{},"80":{},"81":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"91":{},"96":{},"98":{},"101":{},"108":{},"114":{},"115":{}},"component":{}}],["client_cert",{"_index":1085,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["client_hash",{"_index":1083,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["client_pairing_secret",{"_index":1087,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["client_public_cert_signatur",{"_index":1089,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["client_secret",{"_index":1090,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["clientvers",{"_index":1763,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["client’",{"_index":2833,"title":{},"name":{},"text":{"114":{}},"component":{}}],["clone",{"_index":701,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"97":{},"103":{}},"component":{}}],["close",{"_index":1815,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{},"106":{}},"component":{}}],["cluster",{"_index":2531,"title":{},"name":{},"text":{"104":{}},"component":{}}],["cmake",{"_index":664,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["code",{"_index":124,"title":{"2":{},"21":{},"39":{},"57":{},"78":{},"4-3":{},"23-3":{},"41-3":{},"59-3":{},"80-3":{}},"name":{"2":{},"21":{},"39":{},"57":{},"78":{}},"text":{"2":{},"4":{},"5":{},"11":{},"12":{},"13":{},"14":{},"15":{},"21":{},"23":{},"24":{},"30":{},"31":{},"32":{},"33":{},"34":{},"39":{},"41":{},"47":{},"48":{},"49":{},"50":{},"51":{},"53":{},"57":{},"59":{},"65":{},"66":{},"67":{},"68":{},"69":{},"71":{},"78":{},"80":{},"81":{},"87":{},"88":{},"89":{},"90":{},"91":{},"99":{}},"component":{}}],["codec_data=(buffer)1210",{"_index":1929,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["collect",{"_index":2524,"title":{},"name":{},"text":{"102":{}},"component":{}}],["color",{"_index":1048,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["colorimetry=(string)bt601",{"_index":2214,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["colorimetry={color_spac",{"_index":1962,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["combin",{"_index":1384,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"100":{},"101":{}},"component":{}}],["come",{"_index":885,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"96":{},"107":{},"108":{},"110":{}},"component":{}}],["comma",{"_index":1296,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["command",{"_index":314,"title":{},"name":{},"text":{"3":{},"14":{},"18":{},"19":{},"22":{},"33":{},"37":{},"40":{},"50":{},"51":{},"58":{},"68":{},"69":{},"77":{},"79":{},"90":{},"94":{},"95":{},"105":{},"107":{},"112":{},"115":{}},"component":{}}],["commandlin",{"_index":2597,"title":{},"name":{},"text":{"105":{}},"component":{}}],["comment",{"_index":2437,"title":{},"name":{},"text":{"97":{},"100":{},"112":{}},"component":{}}],["commit",{"_index":893,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"100":{}},"component":{}}],["common",{"_index":1741,"title":{},"name":{},"text":{"13":{},"15":{},"32":{},"34":{},"49":{},"51":{},"67":{},"69":{},"89":{},"91":{},"115":{},"117":{}},"component":{}}],["commun",{"_index":377,"title":{},"name":{},"text":{"3":{},"7":{},"12":{},"13":{},"19":{},"22":{},"26":{},"31":{},"32":{},"37":{},"40":{},"43":{},"48":{},"49":{},"55":{},"58":{},"61":{},"66":{},"67":{},"73":{},"76":{},"79":{},"83":{},"88":{},"89":{},"94":{},"96":{}},"component":{}}],["comp",{"_index":1963,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["compact",{"_index":2735,"title":{},"name":{},"text":{"108":{}},"component":{}}],["compat",{"_index":2060,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"108":{}},"component":{}}],["compil",{"_index":641,"title":{"6-6":{},"25-6":{},"42-6":{},"60-6":{},"82-6":{}},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["complain",{"_index":944,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["complet",{"_index":525,"title":{},"name":{},"text":{"4":{},"6":{},"13":{},"23":{},"25":{},"32":{},"41":{},"42":{},"49":{},"51":{},"53":{},"59":{},"60":{},"67":{},"69":{},"71":{},"80":{},"82":{},"89":{},"98":{},"102":{},"108":{},"112":{},"113":{}},"component":{}}],["complex",{"_index":486,"title":{},"name":{},"text":{"4":{},"5":{},"17":{},"23":{},"24":{},"36":{},"41":{},"54":{},"59":{},"72":{},"80":{},"81":{},"93":{},"106":{}},"component":{}}],["complic",{"_index":2417,"title":{},"name":{},"text":{"96":{}},"component":{}}],["compon",{"_index":423,"title":{"96":{}},"name":{"96":{}},"text":{"3":{},"4":{},"5":{},"7":{},"13":{},"22":{},"23":{},"24":{},"26":{},"32":{},"40":{},"41":{},"43":{},"49":{},"58":{},"59":{},"61":{},"67":{},"79":{},"80":{},"81":{},"83":{},"89":{},"96":{},"108":{},"112":{},"116":{}},"component":{}}],["compos",{"_index":493,"title":{"95-8":{},"110-8":{}},"name":{},"text":{"4":{},"5":{},"7":{},"12":{},"13":{},"14":{},"17":{},"23":{},"24":{},"26":{},"31":{},"32":{},"33":{},"36":{},"41":{},"43":{},"48":{},"49":{},"50":{},"54":{},"59":{},"61":{},"66":{},"67":{},"68":{},"72":{},"80":{},"81":{},"83":{},"88":{},"89":{},"90":{},"93":{},"96":{},"100":{},"110":{},"112":{}},"component":{}}],["compose/app",{"_index":2397,"title":{},"name":{},"text":{"95":{},"112":{}},"component":{}}],["compose/headless.yml",{"_index":2692,"title":{},"name":{},"text":{"106":{}},"component":{}}],["composit",{"_index":841,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"96":{}},"component":{}}],["compositor",{"_index":571,"title":{"7-1":{},"7-3":{},"26-1":{},"26-3":{},"43-1":{},"43-3":{},"61-1":{},"61-3":{},"83-1":{},"83-3":{}},"name":{},"text":{"5":{},"7":{},"16":{},"24":{},"26":{},"35":{},"43":{},"51":{},"52":{},"61":{},"69":{},"70":{},"81":{},"83":{},"92":{}},"component":{}}],["comput",{"_index":2166,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{},"103":{},"108":{},"112":{},"116":{}},"component":{}}],["con",{"_index":2873,"title":{},"name":{},"text":{"116":{}},"component":{}}],["concept",{"_index":2402,"title":{},"name":{},"text":{"96":{}},"component":{}}],["concurr",{"_index":156,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["condit",{"_index":153,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["confidenti",{"_index":982,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["config",{"_index":74,"title":{},"name":{},"text":{"1":{},"6":{},"12":{},"15":{},"20":{},"25":{},"31":{},"34":{},"38":{},"42":{},"48":{},"51":{},"56":{},"60":{},"66":{},"69":{},"74":{},"82":{},"88":{},"91":{},"95":{},"105":{},"114":{}},"component":{}}],["config.toml",{"_index":631,"title":{"105-13":{},"105-20":{},"105-21":{}},"name":{},"text":{"5":{},"6":{},"15":{},"24":{},"25":{},"34":{},"42":{},"51":{},"60":{},"69":{},"76":{},"81":{},"82":{},"91":{},"105":{}},"component":{}}],["config/platforms/headless.yml",{"_index":2775,"title":{},"name":{},"text":{"109":{}},"component":{}}],["config_vers",{"_index":2231,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["configur",{"_index":1440,"title":{"15":{},"34":{},"51":{},"69":{},"76":{},"91":{},"97":{},"18-5":{},"76-5":{},"76-7":{},"77-5":{},"95-2":{},"105-7":{},"105-17":{},"106-5":{},"106-6":{}},"name":{"15":{},"34":{},"51":{},"69":{},"91":{},"97":{}},"text":{"12":{},"15":{},"18":{},"19":{},"31":{},"34":{},"37":{},"48":{},"51":{},"55":{},"66":{},"69":{},"73":{},"75":{},"76":{},"77":{},"88":{},"91":{},"94":{},"95":{},"97":{},"101":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"112":{},"113":{},"116":{}},"component":{}}],["conflict",{"_index":2879,"title":{},"name":{},"text":{"116":{}},"component":{}}],["confus",{"_index":2498,"title":{},"name":{},"text":{"100":{}},"component":{}}],["connect",{"_index":289,"title":{"98":{}},"name":{"98":{}},"text":{"3":{},"9":{},"12":{},"13":{},"15":{},"22":{},"28":{},"31":{},"32":{},"34":{},"40":{},"45":{},"48":{},"49":{},"51":{},"58":{},"63":{},"66":{},"67":{},"69":{},"75":{},"79":{},"85":{},"88":{},"89":{},"91":{},"98":{},"101":{},"104":{},"106":{},"110":{},"112":{},"113":{},"115":{}},"component":{}}],["connectedmonitor",{"_index":2688,"title":{},"name":{},"text":{"106":{}},"component":{}}],["connector",{"_index":1363,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["consid",{"_index":2362,"title":{},"name":{},"text":{"76":{},"95":{},"104":{},"105":{}},"component":{}}],["consist",{"_index":892,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"105":{},"108":{}},"component":{}}],["constant",{"_index":97,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["construct",{"_index":479,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["consult",{"_index":2781,"title":{},"name":{},"text":{"110":{}},"component":{}}],["contain",{"_index":68,"title":{"95-1":{},"105-7":{},"113-1":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"9":{},"11":{},"12":{},"13":{},"15":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"28":{},"30":{},"31":{},"32":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"45":{},"47":{},"48":{},"49":{},"51":{},"53":{},"54":{},"56":{},"57":{},"58":{},"59":{},"63":{},"65":{},"66":{},"67":{},"69":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"85":{},"87":{},"88":{},"89":{},"91":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"101":{},"105":{},"106":{},"107":{},"108":{},"109":{},"111":{},"112":{},"113":{},"114":{},"115":{},"116":{}},"component":{}}],["container",{"_index":2812,"title":{},"name":{},"text":{"112":{},"116":{},"117":{}},"component":{}}],["containeris",{"_index":615,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["content",{"_index":33,"title":{},"name":{},"text":{"1":{},"3":{},"7":{},"12":{},"13":{},"20":{},"22":{},"26":{},"31":{},"32":{},"38":{},"40":{},"43":{},"48":{},"49":{},"56":{},"58":{},"61":{},"66":{},"67":{},"74":{},"76":{},"79":{},"83":{},"88":{},"89":{},"95":{},"105":{},"109":{}},"component":{}}],["context",{"_index":2400,"title":{},"name":{},"text":{"95":{}},"component":{}}],["continu",{"_index":894,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"96":{},"108":{}},"component":{}}],["contribut",{"_index":2459,"title":{},"name":{"99":{}},"text":{"99":{},"111":{}},"component":{}}],["control",{"_index":197,"title":{"8":{},"27":{},"44":{},"62":{},"84":{},"11-9":{},"11-10":{},"11-11":{},"11-14":{},"11-15":{},"11-16":{},"30-9":{},"30-10":{},"30-11":{},"30-14":{},"30-15":{},"30-16":{},"47-9":{},"47-10":{},"47-11":{},"47-14":{},"47-15":{},"47-16":{},"65-9":{},"65-10":{},"65-11":{},"65-14":{},"65-15":{},"65-16":{},"87-9":{},"87-10":{},"87-11":{},"87-14":{},"87-15":{},"87-16":{}},"name":{"8":{},"27":{},"44":{},"62":{},"84":{}},"text":{"2":{},"3":{},"8":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"21":{},"22":{},"27":{},"29":{},"30":{},"31":{},"32":{},"33":{},"36":{},"37":{},"39":{},"40":{},"44":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"54":{},"55":{},"57":{},"58":{},"62":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"72":{},"73":{},"78":{},"79":{},"84":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"93":{},"94":{},"116":{}},"component":{}}],["control.hpp",{"_index":219,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["controller_arriv",{"_index":1142,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["controller_batteri",{"_index":1148,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["controller_mot",{"_index":1146,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["controller_multi",{"_index":1140,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["controller_touch",{"_index":1144,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["conveni",{"_index":2440,"title":{},"name":{},"text":{"97":{}},"component":{}}],["convert",{"_index":1726,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["coordin",{"_index":1154,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["copi",{"_index":875,"title":{"95-7":{}},"name":{},"text":{"7":{},"18":{},"19":{},"26":{},"34":{},"37":{},"43":{},"61":{},"77":{},"83":{},"94":{},"95":{},"105":{},"106":{},"115":{}},"component":{}}],["core",{"_index":210,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{},"96":{},"115":{}},"component":{}}],["correct",{"_index":1426,"title":{"12-6":{},"13-5":{},"31-6":{},"32-5":{},"48-6":{},"49-5":{},"66-6":{},"67-5":{},"88-6":{},"89-5":{}},"name":{},"text":{"105":{},"106":{},"107":{},"109":{}},"component":{}}],["correctli",{"_index":458,"title":{},"name":{},"text":{"3":{},"4":{},"6":{},"10":{},"17":{},"22":{},"23":{},"25":{},"29":{},"36":{},"40":{},"41":{},"42":{},"46":{},"51":{},"54":{},"58":{},"59":{},"60":{},"64":{},"69":{},"72":{},"79":{},"80":{},"82":{},"86":{},"93":{},"97":{},"105":{},"107":{},"115":{}},"component":{}}],["correspond",{"_index":391,"title":{},"name":{},"text":{"3":{},"11":{},"15":{},"17":{},"19":{},"22":{},"30":{},"36":{},"37":{},"40":{},"47":{},"51":{},"54":{},"55":{},"58":{},"65":{},"69":{},"72":{},"73":{},"79":{},"87":{},"91":{},"93":{},"94":{}},"component":{}}],["count",{"_index":1442,"title":{},"name":{},"text":{"12":{},"17":{},"31":{},"36":{},"48":{},"54":{},"66":{},"72":{},"88":{},"93":{}},"component":{}}],["coupl",{"_index":632,"title":{},"name":{},"text":{"5":{},"24":{},"81":{},"105":{},"106":{},"117":{}},"component":{}}],["cours",{"_index":889,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"100":{}},"component":{}}],["cp",{"_index":2863,"title":{},"name":{},"text":{"115":{}},"component":{}}],["cpu",{"_index":867,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"116":{}},"component":{}}],["creat",{"_index":103,"title":{"115-2":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"12":{},"13":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"31":{},"32":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"48":{},"49":{},"51":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"66":{},"67":{},"69":{},"72":{},"73":{},"74":{},"76":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"88":{},"89":{},"91":{},"93":{},"94":{},"95":{},"97":{},"101":{},"104":{},"105":{},"106":{},"109":{},"110":{},"111":{},"112":{},"115":{},"116":{}},"component":{}}],["creation",{"_index":37,"title":{},"name":{},"text":{"1":{},"3":{},"20":{},"22":{},"38":{},"40":{},"56":{},"58":{},"74":{},"79":{}},"component":{}}],["cross",{"_index":2755,"title":{},"name":{},"text":{"108":{}},"component":{}}],["crucial",{"_index":407,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"79":{},"83":{}},"component":{}}],["crw",{"_index":2096,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"104":{},"107":{},"110":{}},"component":{}}],["cryptographi",{"_index":1057,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["cseq",{"_index":1761,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["ctrl",{"_index":1385,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["ctrl+alt+shift+",{"_index":2855,"title":{},"name":{},"text":{"115":{}},"component":{}}],["cuda",{"_index":623,"title":{"6-1":{},"25-1":{},"42-1":{},"60-1":{},"82-1":{}},"name":{},"text":{"5":{},"6":{},"24":{},"25":{},"42":{},"60":{},"81":{},"82":{},"96":{},"107":{}},"component":{}}],["curat",{"_index":2797,"title":{},"name":{},"text":{"111":{}},"component":{}}],["curiou",{"_index":2268,"title":{},"name":{},"text":{"53":{},"71":{}},"component":{}}],["curl",{"_index":784,"title":{},"name":{},"text":{"6":{},"17":{},"25":{},"36":{},"42":{},"54":{},"60":{},"72":{},"82":{},"93":{},"98":{},"104":{}},"component":{}}],["curlhttpsrc",{"_index":1918,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["current",{"_index":214,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"10":{},"11":{},"13":{},"18":{},"21":{},"22":{},"26":{},"29":{},"30":{},"32":{},"39":{},"40":{},"43":{},"46":{},"47":{},"49":{},"51":{},"57":{},"58":{},"61":{},"64":{},"65":{},"67":{},"69":{},"77":{},"78":{},"79":{},"83":{},"86":{},"87":{},"89":{},"96":{},"109":{},"113":{},"115":{},"117":{}},"component":{}}],["cursor",{"_index":2093,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["cursor=tru",{"_index":1883,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["custom",{"_index":420,"title":{"76-9":{},"105-14":{},"106-3":{}},"name":{},"text":{"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"17":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"36":{},"40":{},"41":{},"42":{},"43":{},"44":{},"51":{},"54":{},"58":{},"59":{},"60":{},"61":{},"62":{},"69":{},"72":{},"76":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"93":{},"105":{},"106":{}},"component":{}}],["customedid",{"_index":2686,"title":{},"name":{},"text":{"106":{}},"component":{}}],["customis",{"_index":2618,"title":{},"name":{},"text":{"105":{}},"component":{}}],["cut",{"_index":1856,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{},"112":{}},"component":{}}],["d",{"_index":1234,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"47":{},"54":{},"65":{},"72":{},"87":{},"93":{},"112":{}},"component":{}}],["d0",{"_index":1631,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["d1",{"_index":1654,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["d6",{"_index":1610,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["d7",{"_index":1680,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["d8",{"_index":1569,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["d9",{"_index":1620,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["d=`grep",{"_index":2071,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["da",{"_index":1568,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["data",{"_index":148,"title":{"11":{},"30":{},"47":{},"65":{},"87":{},"8-5":{},"15-2":{},"27-5":{},"34-2":{},"44-5":{},"62-5":{},"84-5":{},"91-2":{}},"name":{"11":{},"30":{},"47":{},"65":{},"87":{}},"text":{"2":{},"4":{},"7":{},"8":{},"10":{},"11":{},"13":{},"14":{},"15":{},"21":{},"23":{},"26":{},"27":{},"29":{},"30":{},"32":{},"33":{},"34":{},"39":{},"41":{},"43":{},"44":{},"46":{},"47":{},"49":{},"50":{},"57":{},"59":{},"61":{},"62":{},"64":{},"65":{},"67":{},"68":{},"78":{},"80":{},"83":{},"84":{},"86":{},"87":{},"89":{},"90":{},"91":{},"97":{},"105":{},"106":{},"107":{}},"component":{}}],["databas",{"_index":2435,"title":{},"name":{},"text":{"97":{}},"component":{}}],["date",{"_index":1992,"title":{},"name":{},"text":{"17":{},"36":{},"93":{},"108":{}},"component":{}}],["day",{"_index":2794,"title":{},"name":{},"text":{"111":{}},"component":{}}],["db",{"_index":352,"title":{},"name":{},"text":{"3":{},"13":{},"22":{},"32":{},"40":{},"49":{},"58":{},"67":{},"79":{},"89":{}},"component":{}}],["dbad=en",{"_index":732,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dbase=en",{"_index":719,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dc",{"_index":1693,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["dcmake_build_type=releas",{"_index":803,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dcmake_c_flags=$cflag",{"_index":802,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dcmake_cxx_extensions=off",{"_index":805,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dcmake_cxx_standard=17",{"_index":804,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dd",{"_index":1683,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["ddoc=dis",{"_index":728,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["de",{"_index":1596,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["deal",{"_index":151,"title":{},"name":{},"text":{"2":{},"7":{},"21":{},"26":{},"39":{},"43":{},"57":{},"61":{},"78":{},"83":{}},"component":{}}],["debian",{"_index":644,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"110":{}},"component":{}}],["debug",{"_index":765,"title":{},"name":{},"text":{"6":{},"12":{},"15":{},"19":{},"25":{},"31":{},"34":{},"37":{},"42":{},"48":{},"51":{},"55":{},"60":{},"66":{},"69":{},"73":{},"82":{},"88":{},"91":{},"94":{},"112":{}},"component":{}}],["decid",{"_index":527,"title":{},"name":{},"text":{"4":{},"7":{},"23":{},"26":{},"41":{},"43":{},"59":{},"61":{},"80":{},"83":{}},"component":{}}],["decim",{"_index":1461,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["decis",{"_index":2870,"title":{"116-1":{}},"name":{},"text":{},"component":{}}],["deck",{"_index":2753,"title":{},"name":{},"text":{"108":{}},"component":{}}],["declar",{"_index":1733,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"106":{}},"component":{}}],["decod",{"_index":506,"title":{},"name":{},"text":{"4":{},"11":{},"23":{},"30":{},"41":{},"47":{},"59":{},"65":{},"80":{},"87":{}},"component":{}}],["decodebin",{"_index":1902,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["decoupl",{"_index":160,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{},"96":{}},"component":{}}],["decrypt",{"_index":964,"title":{"8-3":{},"27-3":{},"44-3":{},"62-3":{},"84-3":{}},"name":{},"text":{"8":{},"9":{},"27":{},"28":{},"44":{},"45":{},"62":{},"63":{},"84":{},"85":{}},"component":{}}],["dedic",{"_index":2763,"title":{},"name":{},"text":{"109":{},"112":{}},"component":{}}],["deep",{"_index":2826,"title":{},"name":{},"text":{"113":{}},"component":{}}],["default",{"_index":261,"title":{"15-7":{},"34-7":{},"91-7":{}},"name":{},"text":{"2":{},"3":{},"6":{},"8":{},"10":{},"13":{},"15":{},"17":{},"18":{},"21":{},"22":{},"25":{},"27":{},"29":{},"32":{},"34":{},"36":{},"39":{},"40":{},"42":{},"44":{},"46":{},"49":{},"51":{},"54":{},"57":{},"58":{},"60":{},"62":{},"64":{},"67":{},"69":{},"72":{},"76":{},"77":{},"78":{},"79":{},"82":{},"84":{},"86":{},"89":{},"91":{},"93":{},"95":{},"96":{},"98":{},"101":{},"105":{},"110":{},"112":{}},"component":{}}],["defaultdepth",{"_index":2682,"title":{},"name":{},"text":{"106":{}},"component":{}}],["defeat",{"_index":355,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["defin",{"_index":209,"title":{"15-6":{},"34-6":{},"51-3":{},"69-3":{},"91-6":{}},"name":{},"text":{"2":{},"3":{},"11":{},"12":{},"13":{},"15":{},"21":{},"22":{},"30":{},"31":{},"32":{},"34":{},"39":{},"40":{},"47":{},"48":{},"49":{},"51":{},"57":{},"58":{},"65":{},"66":{},"67":{},"69":{},"78":{},"79":{},"87":{},"88":{},"89":{},"91":{},"105":{},"115":{}},"component":{}}],["definit",{"_index":239,"title":{},"name":{},"text":{"2":{},"4":{},"14":{},"21":{},"23":{},"33":{},"39":{},"41":{},"50":{},"51":{},"57":{},"59":{},"68":{},"69":{},"78":{},"80":{},"90":{},"95":{},"112":{}},"component":{}}],["degre",{"_index":2419,"title":{},"name":{},"text":{"96":{}},"component":{}}],["delet",{"_index":1216,"title":{},"name":{},"text":{"11":{},"15":{},"30":{},"47":{},"51":{},"65":{},"69":{},"87":{},"91":{},"95":{},"116":{}},"component":{}}],["delimit",{"_index":1753,"title":{},"name":{},"text":{"13":{},"14":{},"32":{},"33":{},"49":{},"50":{},"67":{},"68":{},"89":{},"90":{}},"component":{}}],["deliveri",{"_index":526,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["delta",{"_index":1156,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["demand",{"_index":36,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"17":{},"20":{},"22":{},"24":{},"36":{},"38":{},"40":{},"53":{},"54":{},"56":{},"58":{},"71":{},"72":{},"74":{},"79":{},"81":{},"93":{}},"component":{}}],["demonstr",{"_index":2355,"title":{},"name":{},"text":{"76":{}},"component":{}}],["demux.audio_0",{"_index":1922,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["demux.audio_0_0100",{"_index":1940,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["demux.video_0",{"_index":1923,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["demux.video_0_0101",{"_index":1941,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["deni",{"_index":2851,"title":{"115-2":{}},"name":{},"text":{},"component":{}}],["dep",{"_index":640,"title":{"6-5":{},"25-5":{},"42-5":{},"60-5":{},"82-5":{}},"name":{},"text":{},"component":{}}],["depend",{"_index":638,"title":{"6-2":{},"25-2":{},"42-2":{},"60-2":{},"82-2":{}},"name":{},"text":{"6":{},"7":{},"8":{},"11":{},"25":{},"26":{},"27":{},"30":{},"42":{},"43":{},"44":{},"47":{},"60":{},"61":{},"62":{},"65":{},"82":{},"83":{},"84":{},"87":{},"96":{},"105":{},"106":{},"116":{}},"component":{}}],["deploy",{"_index":1999,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["deprec",{"_index":2820,"title":{},"name":{},"text":{"112":{}},"component":{}}],["depth",{"_index":613,"title":{},"name":{},"text":{"5":{},"24":{},"81":{},"106":{}},"component":{}}],["depth=1",{"_index":704,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["deriv",{"_index":1065,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["describ",{"_index":627,"title":{},"name":{},"text":{"5":{},"7":{},"14":{},"24":{},"26":{},"33":{},"43":{},"50":{},"61":{},"68":{},"81":{},"83":{},"90":{},"100":{}},"component":{}}],["descript",{"_index":987,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"15":{},"27":{},"30":{},"32":{},"34":{},"44":{},"47":{},"49":{},"51":{},"62":{},"65":{},"67":{},"69":{},"84":{},"87":{},"89":{},"91":{},"105":{},"112":{}},"component":{}}],["design",{"_index":876,"title":{},"name":{},"text":{"7":{},"10":{},"26":{},"29":{},"43":{},"46":{},"61":{},"64":{},"76":{},"83":{},"86":{},"108":{}},"component":{}}],["desir",{"_index":2617,"title":{},"name":{},"text":{"105":{}},"component":{}}],["desktop",{"_index":39,"title":{"5-1":{},"16-3":{},"24-1":{},"35-3":{},"52-3":{},"70-3":{},"81-1":{},"92-3":{},"116-2":{}},"name":{},"text":{"1":{},"2":{},"5":{},"7":{},"11":{},"15":{},"16":{},"17":{},"20":{},"21":{},"24":{},"26":{},"30":{},"34":{},"35":{},"36":{},"38":{},"39":{},"43":{},"47":{},"51":{},"52":{},"54":{},"56":{},"57":{},"61":{},"65":{},"69":{},"70":{},"72":{},"74":{},"78":{},"81":{},"83":{},"87":{},"91":{},"92":{},"93":{},"96":{},"97":{},"98":{},"101":{},"104":{},"105":{},"106":{},"108":{},"110":{},"112":{},"113":{},"115":{},"116":{},"117":{}},"component":{}}],["desktop.env",{"_index":2444,"title":{},"name":{},"text":{"97":{}},"component":{}}],["despit",{"_index":2505,"title":{},"name":{},"text":{"101":{}},"component":{}}],["detail",{"_index":81,"title":{},"name":{},"text":{"1":{},"5":{},"13":{},"17":{},"19":{},"20":{},"24":{},"32":{},"36":{},"37":{},"38":{},"49":{},"54":{},"56":{},"67":{},"72":{},"74":{},"75":{},"76":{},"81":{},"89":{},"93":{},"94":{},"99":{},"100":{},"101":{},"110":{},"112":{},"113":{}},"component":{}}],["detect",{"_index":292,"title":{},"name":{},"text":{"3":{},"11":{},"22":{},"30":{},"40":{},"47":{},"58":{},"65":{},"79":{},"87":{},"114":{}},"component":{}}],["determin",{"_index":1361,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"106":{}},"component":{}}],["dev",{"_index":642,"title":{"6":{},"25":{},"42":{},"60":{},"82":{}},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dev/:/dev/:rw",{"_index":1978,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["dev/dri",{"_index":1975,"title":{},"name":{},"text":{"17":{},"18":{},"34":{},"36":{},"54":{},"72":{},"76":{},"77":{},"93":{},"105":{},"107":{}},"component":{}}],["dev/dri/cardx",{"_index":2421,"title":{},"name":{},"text":{"96":{}},"component":{}}],["dev/dri/renderd128",{"_index":1825,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["dev/dri/renderd129",{"_index":1850,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["dev/input",{"_index":318,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["dev/input:/dev/input:rw",{"_index":2271,"title":{},"name":{},"text":{"54":{},"72":{}},"component":{}}],["dev/nvidia",{"_index":2033,"title":{},"name":{},"text":{"17":{},"18":{},"34":{},"36":{},"54":{},"72":{},"76":{},"77":{},"93":{},"105":{}},"component":{}}],["dev/nvidia$i",{"_index":2065,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["dev/nvidia0",{"_index":2039,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["dev/nvidiactl",{"_index":2038,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["dev/shm",{"_index":2836,"title":{},"name":{},"text":{"114":{}},"component":{}}],["dev/shm:/dev/shm:rw",{"_index":2270,"title":{},"name":{},"text":{"54":{},"72":{}},"component":{}}],["dev/uhid",{"_index":1977,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["dev/uinput",{"_index":1976,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"104":{},"110":{}},"component":{}}],["develop",{"_index":95,"title":{},"name":{},"text":{"1":{},"7":{},"15":{},"20":{},"26":{},"38":{},"43":{},"53":{},"56":{},"61":{},"71":{},"74":{},"83":{},"91":{},"108":{}},"component":{}}],["developerpaul123/eventbu",{"_index":248,"title":{},"name":{},"text":{"2":{},"21":{},"78":{}},"component":{}}],["devic",{"_index":185,"title":{"3-1":{},"5-3":{},"17-3":{},"22-1":{},"24-3":{},"36-3":{},"40-1":{},"54-3":{},"58-1":{},"72-3":{},"79-1":{},"81-3":{},"93-3":{}},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"17":{},"19":{},"21":{},"22":{},"24":{},"26":{},"36":{},"37":{},"39":{},"40":{},"43":{},"51":{},"53":{},"54":{},"55":{},"57":{},"58":{},"61":{},"69":{},"71":{},"72":{},"73":{},"76":{},"78":{},"79":{},"81":{},"83":{},"93":{},"94":{},"96":{},"101":{},"104":{},"105":{},"106":{},"107":{},"108":{},"110":{},"115":{}},"component":{}}],["device0",{"_index":2680,"title":{},"name":{},"text":{"106":{}},"component":{}}],["device_cgroup_rul",{"_index":1984,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["devicecgrouprul",{"_index":2338,"title":{},"name":{},"text":{"76":{},"105":{}},"component":{}}],["devices/bomb",{"_index":450,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1",{"_index":330,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["devname=/dev/input/js0",{"_index":335,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["dexamples=dis",{"_index":727,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["df",{"_index":1516,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"114":{}},"component":{}}],["dgood=en",{"_index":720,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dgpl=enabl",{"_index":718,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dgst",{"_index":715,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dgstreamer",{"_index":741,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dhliwayo",{"_index":9,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["differ",{"_index":32,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"6":{},"7":{},"14":{},"15":{},"17":{},"20":{},"22":{},"23":{},"24":{},"25":{},"26":{},"33":{},"34":{},"36":{},"38":{},"40":{},"41":{},"42":{},"43":{},"50":{},"51":{},"54":{},"56":{},"58":{},"59":{},"60":{},"61":{},"68":{},"69":{},"72":{},"74":{},"75":{},"76":{},"79":{},"80":{},"81":{},"82":{},"83":{},"90":{},"91":{},"93":{},"108":{},"112":{},"114":{}},"component":{}}],["difficulti",{"_index":2783,"title":{},"name":{},"text":{"110":{}},"component":{}}],["digest",{"_index":2477,"title":{},"name":{},"text":{"100":{}},"component":{}}],["digest:sha256:6b8555260ed07c7ed466e0b821922a3cedf4ee27b9d6b8fea9d6aa2995b75f61",{"_index":2483,"title":{},"name":{},"text":{"100":{}},"component":{}}],["direct",{"_index":530,"title":{},"name":{},"text":{"4":{},"7":{},"23":{},"26":{},"41":{},"43":{},"59":{},"61":{},"80":{},"83":{}},"component":{}}],["directli",{"_index":579,"title":{"15-15":{},"18-1":{},"34-15":{},"77-1":{},"91-15":{}},"name":{},"text":{"5":{},"7":{},"17":{},"18":{},"24":{},"26":{},"34":{},"36":{},"43":{},"54":{},"61":{},"72":{},"77":{},"81":{},"83":{},"93":{},"98":{},"104":{},"105":{},"112":{},"115":{}},"component":{}}],["directori",{"_index":773,"title":{"76-3":{},"76-4":{},"115-2":{}},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"76":{},"82":{},"95":{},"97":{},"105":{},"112":{},"113":{},"115":{}},"component":{}}],["dirs.sh",{"_index":2567,"title":{},"name":{},"text":{"105":{}},"component":{}}],["disabl",{"_index":262,"title":{},"name":{},"text":{"2":{},"8":{},"21":{},"27":{},"39":{},"44":{},"51":{},"57":{},"62":{},"69":{},"78":{},"84":{},"115":{}},"component":{}}],["disappear",{"_index":2158,"title":{},"name":{},"text":{"18":{},"77":{}},"component":{}}],["discord",{"_index":113,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{},"99":{},"107":{},"110":{},"114":{},"115":{}},"component":{}}],["discov",{"_index":2451,"title":{},"name":{},"text":{"98":{}},"component":{}}],["discover",{"_index":1873,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["discrimin",{"_index":1783,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["discuss",{"_index":817,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"99":{}},"component":{}}],["dismiss",{"_index":2418,"title":{},"name":{},"text":{"96":{}},"component":{}}],["display",{"_index":196,"title":{"6-4":{},"25-4":{},"42-4":{},"60-4":{},"82-4":{}},"name":{},"text":{"2":{},"5":{},"6":{},"19":{},"21":{},"24":{},"25":{},"37":{},"39":{},"42":{},"51":{},"55":{},"57":{},"60":{},"69":{},"73":{},"78":{},"81":{},"82":{},"94":{},"96":{},"97":{},"100":{},"101":{},"106":{},"108":{}},"component":{}}],["display.hpp",{"_index":190,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["display/includ",{"_index":780,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["display/lib",{"_index":776,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["display/lib/pkgconfig",{"_index":782,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["displayport",{"_index":2657,"title":{},"name":{},"text":{"106":{}},"component":{}}],["distribut",{"_index":2600,"title":{},"name":{},"text":{"105":{},"108":{},"110":{}},"component":{}}],["distro",{"_index":647,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["distro’",{"_index":2782,"title":{},"name":{},"text":{"110":{}},"component":{}}],["dive",{"_index":548,"title":{},"name":{},"text":{"4":{},"7":{},"23":{},"26":{},"41":{},"43":{},"59":{},"61":{},"80":{},"83":{},"113":{}},"component":{}}],["dl",{"_index":1933,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["dlibav=dis",{"_index":725,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dma",{"_index":903,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["dmesg",{"_index":2179,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["do",{"_index":2475,"title":{},"name":{},"text":{"100":{},"117":{}},"component":{}}],["doc",{"_index":551,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"23":{},"25":{},"26":{},"41":{},"42":{},"43":{},"53":{},"59":{},"60":{},"61":{},"71":{},"80":{},"82":{},"83":{}},"component":{}}],["docker",{"_index":64,"title":{"3":{},"22":{},"40":{},"58":{},"79":{},"100":{},"15-10":{},"17-1":{},"34-10":{},"36-1":{},"51-6":{},"54-1":{},"69-6":{},"72-1":{},"91-10":{},"93-1":{},"106-6":{},"110-8":{}},"name":{"100":{}},"text":{"1":{},"2":{},"3":{},"5":{},"7":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"24":{},"26":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"43":{},"51":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"61":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"78":{},"79":{},"81":{},"83":{},"91":{},"93":{},"94":{},"95":{},"96":{},"100":{},"101":{},"102":{},"103":{},"105":{},"106":{},"107":{},"108":{},"110":{},"111":{},"112":{},"114":{},"115":{},"116":{},"117":{}},"component":{}}],["docker.hpp",{"_index":176,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["docker/podman",{"_index":79,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["docker_buildkit=1",{"_index":2489,"title":{},"name":{},"text":{"100":{}},"component":{}}],["dockerfil",{"_index":2372,"title":{"95-4":{},"105-10":{},"105-18":{}},"name":{},"text":{"95":{},"101":{},"105":{}},"component":{}}],["docs.docker.com/engine/api/v1.40",{"_index":2255,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["document",{"_index":2245,"title":{},"name":{},"text":{"51":{},"69":{},"76":{},"99":{},"105":{},"110":{},"111":{}},"component":{}}],["doesn't",{"_index":2167,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["doesn’t",{"_index":417,"title":{"115-3":{}},"name":{},"text":{"3":{},"5":{},"6":{},"7":{},"15":{},"17":{},"19":{},"22":{},"24":{},"25":{},"26":{},"34":{},"36":{},"37":{},"40":{},"42":{},"43":{},"51":{},"54":{},"55":{},"58":{},"60":{},"61":{},"69":{},"72":{},"73":{},"79":{},"81":{},"82":{},"83":{},"91":{},"93":{},"94":{},"101":{},"106":{},"107":{},"110":{}},"component":{}}],["dolphin",{"_index":2350,"title":{},"name":{},"text":{"76":{}},"component":{}}],["done",{"_index":771,"title":{},"name":{},"text":{"6":{},"17":{},"25":{},"36":{},"42":{},"51":{},"54":{},"60":{},"69":{},"72":{},"76":{},"82":{},"93":{},"96":{},"113":{}},"component":{}}],["don’t",{"_index":282,"title":{"100-2":{}},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"51":{},"58":{},"61":{},"69":{},"79":{},"83":{},"96":{},"99":{},"100":{},"106":{},"115":{},"116":{}},"component":{}}],["dorc=dis",{"_index":717,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dot",{"_index":1300,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["doubl",{"_index":2719,"title":{},"name":{},"text":{"107":{}},"component":{}}],["down",{"_index":1209,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"47":{},"53":{},"54":{},"65":{},"71":{},"72":{},"87":{},"93":{},"112":{},"117":{}},"component":{}}],["download",{"_index":1891,"title":{},"name":{},"text":{"16":{},"17":{},"19":{},"35":{},"36":{},"37":{},"52":{},"54":{},"55":{},"70":{},"72":{},"73":{},"76":{},"92":{},"93":{},"94":{},"100":{},"113":{}},"component":{}}],["downstream",{"_index":500,"title":{},"name":{},"text":{"4":{},"5":{},"23":{},"24":{},"41":{},"59":{},"80":{},"81":{}},"component":{}}],["dp",{"_index":2685,"title":{},"name":{},"text":{"106":{}},"component":{}}],["dpad_down",{"_index":1393,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["dpad_left",{"_index":1395,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["dpad_right",{"_index":1397,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["dpad_up",{"_index":1392,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["dpython=dis",{"_index":729,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dqt5=disabl",{"_index":731,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["drakulix",{"_index":91,"title":{},"name":{},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"43":{},"56":{},"61":{},"74":{},"83":{}},"component":{}}],["drakulix/sunris",{"_index":958,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["driver",{"_index":637,"title":{"6-1":{},"25-1":{},"42-1":{},"60-1":{},"82-1":{},"107-1":{},"107-3":{},"107-4":{}},"name":{},"text":{"6":{},"7":{},"15":{},"17":{},"19":{},"25":{},"26":{},"34":{},"36":{},"37":{},"42":{},"43":{},"51":{},"54":{},"55":{},"60":{},"61":{},"69":{},"72":{},"73":{},"82":{},"83":{},"91":{},"93":{},"94":{},"107":{},"109":{},"110":{},"114":{}},"component":{}}],["driver/dockerfil",{"_index":2003,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["driver:latest",{"_index":2005,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["driver=nouveau",{"_index":2718,"title":{},"name":{},"text":{"107":{}},"component":{}}],["driver=nvidia",{"_index":2701,"title":{},"name":{},"text":{"107":{}},"component":{}}],["drm",{"_index":868,"title":{},"name":{},"text":{"7":{},"17":{},"19":{},"26":{},"36":{},"37":{},"43":{},"54":{},"55":{},"61":{},"72":{},"73":{},"83":{},"93":{},"94":{},"96":{},"109":{}},"component":{}}],["drm.modeset=1",{"_index":2024,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["drop",{"_index":941,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["drs=disabl",{"_index":722,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["drtsp_server=dis",{"_index":730,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["drwxr",{"_index":2720,"title":{},"name":{},"text":{"107":{}},"component":{}}],["dst",{"_index":2632,"title":{},"name":{},"text":{"105":{}},"component":{}}],["dtests=dis",{"_index":726,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dtls=disabl",{"_index":723,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dugly=en",{"_index":721,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dummi",{"_index":46,"title":{"106-2":{}},"name":{},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"43":{},"56":{},"61":{},"74":{},"83":{},"106":{},"110":{}},"component":{}}],["dunk",{"_index":2663,"title":{},"name":{},"text":{"106":{}},"component":{}}],["dure",{"_index":257,"title":{},"name":{},"text":{"2":{},"6":{},"8":{},"12":{},"13":{},"21":{},"25":{},"27":{},"31":{},"32":{},"39":{},"42":{},"44":{},"48":{},"49":{},"57":{},"60":{},"62":{},"66":{},"67":{},"78":{},"82":{},"84":{},"88":{},"89":{},"115":{}},"component":{}}],["dvaapi=en",{"_index":740,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["dynam",{"_index":1108,"title":{},"name":{},"text":{"10":{},"29":{},"46":{},"64":{},"86":{}},"component":{}}],["e",{"_index":1236,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"47":{},"54":{},"65":{},"72":{},"87":{},"93":{},"95":{},"105":{},"112":{}},"component":{}}],["e.g",{"_index":603,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["e1",{"_index":1560,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["e2",{"_index":1548,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["e28",{"_index":2234,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["e3",{"_index":1616,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["e4",{"_index":1536,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["e5",{"_index":1686,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["e6",{"_index":1565,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["e8",{"_index":1502,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["e9",{"_index":1523,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["ea",{"_index":1708,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["each",{"_index":514,"title":{},"name":{},"text":{"4":{},"7":{},"11":{},"12":{},"13":{},"15":{},"23":{},"26":{},"30":{},"31":{},"32":{},"34":{},"41":{},"43":{},"47":{},"48":{},"49":{},"51":{},"53":{},"59":{},"61":{},"65":{},"66":{},"67":{},"69":{},"71":{},"75":{},"76":{},"80":{},"83":{},"87":{},"88":{},"89":{},"91":{},"96":{},"97":{},"100":{},"106":{},"108":{},"112":{},"114":{},"116":{}},"component":{}}],["earli",{"_index":2744,"title":{},"name":{},"text":{"108":{}},"component":{}}],["earliest",{"_index":2500,"title":{},"name":{},"text":{"101":{}},"component":{}}],["easi",{"_index":182,"title":{},"name":{},"text":{"2":{},"5":{},"15":{},"21":{},"24":{},"39":{},"57":{},"78":{},"81":{},"91":{},"95":{},"108":{},"114":{},"116":{}},"component":{}}],["easier",{"_index":2787,"title":{},"name":{},"text":{"110":{},"112":{},"116":{}},"component":{}}],["easiest",{"_index":1782,"title":{},"name":{},"text":{"14":{},"17":{},"33":{},"36":{},"50":{},"54":{},"68":{},"72":{},"90":{},"93":{},"95":{}},"component":{}}],["easili",{"_index":147,"title":{},"name":{},"text":{"2":{},"5":{},"13":{},"14":{},"21":{},"24":{},"32":{},"33":{},"39":{},"49":{},"50":{},"51":{},"57":{},"67":{},"68":{},"69":{},"78":{},"81":{},"89":{},"90":{},"95":{},"96":{},"100":{},"103":{},"110":{},"111":{},"116":{}},"component":{}}],["eb",{"_index":1579,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["echo",{"_index":441,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"51":{},"58":{},"69":{},"79":{}},"component":{}}],["ed",{"_index":1633,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["edg",{"_index":2818,"title":{},"name":{},"text":{"112":{}},"component":{}}],["edid",{"_index":826,"title":{"106-3":{},"106-4":{}},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"106":{}},"component":{}}],["edit",{"_index":73,"title":{},"name":{},"text":{"1":{},"4":{},"15":{},"20":{},"23":{},"38":{},"41":{},"56":{},"59":{},"74":{},"76":{},"80":{},"91":{},"95":{},"100":{}},"component":{}}],["editor",{"_index":1723,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["ee",{"_index":1521,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["ef",{"_index":1664,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["effect",{"_index":130,"title":{},"name":{},"text":{"2":{},"17":{},"21":{},"36":{},"39":{},"54":{},"57":{},"72":{},"78":{},"93":{},"112":{}},"component":{}}],["effici",{"_index":900,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"51":{},"61":{},"69":{},"83":{}},"component":{}}],["effort",{"_index":2892,"title":{},"name":{},"text":{"117":{}},"component":{}}],["effortlessli",{"_index":157,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["eg",{"_index":2409,"title":{},"name":{},"text":{"96":{}},"component":{}}],["egl",{"_index":873,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["eh",{"_index":2472,"title":{},"name":{},"text":{"100":{}},"component":{}}],["elden",{"_index":2140,"title":{},"name":{},"text":{"18":{},"34":{},"77":{}},"component":{}}],["element",{"_index":986,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"16":{},"27":{},"30":{},"32":{},"35":{},"44":{},"47":{},"49":{},"52":{},"62":{},"65":{},"67":{},"70":{},"84":{},"87":{},"89":{},"92":{}},"component":{}}],["eleph",{"_index":2874,"title":{},"name":{},"text":{"116":{}},"component":{}}],["elevate.mp3",{"_index":1905,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["elimin",{"_index":2286,"title":{},"name":{},"text":{"76":{}},"component":{}}],["emerg",{"_index":395,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["empti",{"_index":1768,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{},"105":{},"112":{}},"component":{}}],["emu.org/docs/guid",{"_index":2352,"title":{},"name":{},"text":{"76":{}},"component":{}}],["emul",{"_index":1364,"title":{"76-8":{}},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"47":{},"54":{},"65":{},"72":{},"76":{},"87":{},"93":{},"108":{}},"component":{}}],["emulationst",{"_index":2283,"title":{},"name":{},"text":{"76":{}},"component":{}}],["enabl",{"_index":161,"title":{},"name":{},"text":{"2":{},"3":{},"4":{},"18":{},"21":{},"22":{},"23":{},"39":{},"40":{},"41":{},"57":{},"58":{},"59":{},"77":{},"78":{},"79":{},"80":{},"96":{},"105":{},"110":{},"114":{}},"component":{}}],["enable_vkbasalt=1",{"_index":2248,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["encod",{"_index":53,"title":{"12-4":{},"15-14":{},"31-4":{},"34-13":{},"48-4":{},"51-9":{},"66-4":{},"69-9":{},"88-4":{},"91-14":{}},"name":{},"text":{"1":{},"4":{},"5":{},"7":{},"8":{},"10":{},"11":{},"12":{},"13":{},"15":{},"20":{},"23":{},"24":{},"26":{},"27":{},"29":{},"30":{},"31":{},"32":{},"38":{},"41":{},"43":{},"44":{},"46":{},"47":{},"48":{},"49":{},"51":{},"56":{},"59":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"69":{},"74":{},"80":{},"81":{},"83":{},"84":{},"86":{},"87":{},"88":{},"89":{},"91":{},"96":{}},"component":{}}],["encoder_pipelin",{"_index":2260,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["encount",{"_index":2361,"title":{},"name":{},"text":{"76":{}},"component":{}}],["encourag",{"_index":601,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["encrypt",{"_index":513,"title":{"8-2":{},"12-5":{},"27-2":{},"31-5":{},"44-2":{},"48-5":{},"62-2":{},"66-5":{},"84-2":{},"88-5":{}},"name":{},"text":{"4":{},"8":{},"9":{},"10":{},"12":{},"23":{},"27":{},"28":{},"29":{},"31":{},"41":{},"44":{},"45":{},"46":{},"48":{},"59":{},"62":{},"63":{},"64":{},"66":{},"80":{},"84":{},"85":{},"86":{},"88":{}},"component":{}}],["end",{"_index":497,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"11":{},"12":{},"13":{},"14":{},"23":{},"25":{},"26":{},"30":{},"31":{},"32":{},"33":{},"41":{},"42":{},"43":{},"47":{},"48":{},"49":{},"50":{},"59":{},"60":{},"61":{},"65":{},"66":{},"67":{},"68":{},"80":{},"82":{},"83":{},"87":{},"88":{},"89":{},"90":{},"105":{},"106":{},"108":{},"112":{}},"component":{}}],["endian",{"_index":1003,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"44":{},"47":{},"62":{},"65":{},"84":{},"87":{}},"component":{}}],["endpoint",{"_index":1444,"title":{},"name":{},"text":{"12":{},"31":{},"48":{},"66":{},"88":{}},"component":{}}],["endsect",{"_index":2691,"title":{},"name":{},"text":{"106":{},"109":{}},"component":{}}],["endsubsect",{"_index":2690,"title":{},"name":{},"text":{"106":{}},"component":{}}],["enet",{"_index":971,"title":{},"name":{},"text":{"8":{},"10":{},"27":{},"29":{},"44":{},"46":{},"62":{},"64":{},"84":{},"86":{}},"component":{}}],["engin",{"_index":2756,"title":{},"name":{},"text":{"108":{}},"component":{}}],["enhanc",{"_index":1746,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["enough",{"_index":457,"title":{},"name":{},"text":{"3":{},"4":{},"22":{},"23":{},"40":{},"41":{},"58":{},"59":{},"79":{},"80":{},"101":{},"109":{}},"component":{}}],["ensur",{"_index":617,"title":{},"name":{},"text":{"5":{},"24":{},"81":{},"104":{}},"component":{}}],["entangl",{"_index":380,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["enter",{"_index":1176,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"98":{}},"component":{}}],["entri",{"_index":382,"title":{},"name":{},"text":{"3":{},"15":{},"18":{},"22":{},"34":{},"40":{},"51":{},"58":{},"69":{},"77":{},"79":{},"91":{},"105":{}},"component":{}}],["env",{"_index":744,"title":{"15-1":{},"34-1":{},"51-1":{},"69-1":{},"91-1":{}},"name":{},"text":{"6":{},"15":{},"18":{},"19":{},"25":{},"34":{},"37":{},"42":{},"51":{},"55":{},"60":{},"69":{},"73":{},"76":{},"77":{},"82":{},"91":{},"94":{},"105":{},"112":{}},"component":{}}],["env/build.env",{"_index":2486,"title":{},"name":{},"text":{"100":{}},"component":{}}],["env/headless.env",{"_index":2447,"title":{},"name":{},"text":{"97":{},"106":{}},"component":{}}],["env/host",{"_index":2443,"title":{},"name":{},"text":{"97":{}},"component":{}}],["env/nvidia.env",{"_index":2704,"title":{},"name":{},"text":{"107":{}},"component":{}}],["environ",{"_index":616,"title":{"6":{},"25":{},"42":{},"60":{},"82":{},"97-3":{},"97-4":{},"106-7":{}},"name":{},"text":{"5":{},"17":{},"24":{},"36":{},"54":{},"72":{},"81":{},"93":{},"96":{},"97":{},"100":{},"101":{},"105":{},"112":{},"116":{}},"component":{}}],["env{id_seat}=\"seat9",{"_index":2113,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["eof",{"_index":1463,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["eq",{"_index":2052,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["equal",{"_index":1343,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["equiv",{"_index":667,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["error",{"_index":1425,"title":{"12-6":{},"13-5":{},"19-2":{},"31-6":{},"32-5":{},"37-2":{},"48-6":{},"49-5":{},"55-2":{},"66-6":{},"67-5":{},"73-2":{},"88-6":{},"89-5":{},"94-2":{}},"name":{},"text":{"12":{},"13":{},"15":{},"19":{},"31":{},"32":{},"34":{},"37":{},"48":{},"49":{},"51":{},"55":{},"66":{},"67":{},"69":{},"73":{},"88":{},"89":{},"91":{},"94":{}},"component":{}}],["esc",{"_index":1196,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["esoter",{"_index":825,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["essenti",{"_index":660,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["etc",{"_index":562,"title":{},"name":{},"text":{"4":{},"16":{},"23":{},"35":{},"41":{},"52":{},"59":{},"70":{},"80":{},"92":{},"104":{},"110":{},"111":{}},"component":{}}],["etc/default/grub",{"_index":2026,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"72":{},"93":{},"94":{}},"component":{}}],["etc/udev/rules.d/85",{"_index":2101,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["etc/wolf",{"_index":1823,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["etc/wolf/:/etc/wolf",{"_index":1983,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["etc/wolf/:/etc/wolf:rw",{"_index":2041,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["etc/wolf/cfg/cert.pem",{"_index":1802,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["etc/wolf/cfg/config.toml",{"_index":1796,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{},"105":{}},"component":{}}],["etc/wolf/cfg/key.pem",{"_index":1799,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["etc/wolf:/etc/wolf:rw",{"_index":1973,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["even",{"_index":524,"title":{},"name":{},"text":{"4":{},"7":{},"19":{},"23":{},"26":{},"37":{},"41":{},"43":{},"51":{},"55":{},"59":{},"61":{},"69":{},"73":{},"80":{},"83":{},"94":{},"99":{},"101":{},"106":{},"108":{},"112":{},"115":{},"116":{},"117":{}},"component":{}}],["event",{"_index":203,"title":{"3-4":{},"8-4":{},"8-7":{},"22-4":{},"27-4":{},"27-7":{},"40-4":{},"44-4":{},"44-7":{},"58-4":{},"62-4":{},"62-7":{},"79-4":{},"84-4":{},"84-7":{}},"name":{},"text":{"2":{},"3":{},"7":{},"8":{},"21":{},"22":{},"26":{},"27":{},"39":{},"40":{},"43":{},"44":{},"57":{},"58":{},"61":{},"62":{},"78":{},"79":{},"83":{},"84":{},"101":{}},"component":{}}],["event/fil",{"_index":453,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["everyon",{"_index":2665,"title":{},"name":{},"text":{"106":{}},"component":{}}],["everyth",{"_index":878,"title":{},"name":{},"text":{"7":{},"9":{},"18":{},"26":{},"28":{},"34":{},"43":{},"45":{},"53":{},"61":{},"63":{},"71":{},"77":{},"83":{},"85":{},"99":{},"112":{}},"component":{}}],["everywher",{"_index":2740,"title":{},"name":{},"text":{"108":{}},"component":{}}],["ex",{"_index":2027,"title":{},"name":{},"text":{"17":{},"36":{},"51":{},"54":{},"69":{},"72":{},"93":{},"105":{}},"component":{}}],["exact",{"_index":1740,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"106":{}},"component":{}}],["exactli",{"_index":367,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"79":{},"83":{},"105":{}},"component":{}}],["exampl",{"_index":52,"title":{"13-10":{},"16-2":{},"32-10":{},"35-2":{},"49-10":{},"52-2":{},"67-10":{},"70-2":{},"76-7":{},"89-10":{},"92-2":{},"100-1":{},"105-9":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"6":{},"8":{},"13":{},"14":{},"15":{},"16":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"27":{},"32":{},"33":{},"34":{},"35":{},"37":{},"38":{},"40":{},"41":{},"42":{},"44":{},"49":{},"50":{},"51":{},"52":{},"55":{},"56":{},"58":{},"59":{},"60":{},"62":{},"67":{},"68":{},"69":{},"70":{},"73":{},"74":{},"76":{},"77":{},"79":{},"80":{},"81":{},"82":{},"84":{},"89":{},"90":{},"91":{},"92":{},"94":{},"95":{},"100":{},"101":{},"105":{},"106":{},"112":{},"113":{},"114":{}},"component":{}}],["examples=dis",{"_index":724,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["excel",{"_index":2152,"title":{},"name":{},"text":{"18":{},"77":{}},"component":{}}],["except",{"_index":1830,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{},"105":{}},"component":{}}],["exchang",{"_index":974,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"12":{},"13":{},"14":{},"27":{},"28":{},"29":{},"31":{},"32":{},"33":{},"44":{},"45":{},"46":{},"48":{},"49":{},"50":{},"62":{},"63":{},"64":{},"66":{},"67":{},"68":{},"84":{},"85":{},"86":{},"88":{},"89":{},"90":{}},"component":{}}],["exclus",{"_index":2563,"title":{},"name":{},"text":{"105":{}},"component":{}}],["exec",{"_index":316,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{},"95":{},"114":{}},"component":{}}],["execut",{"_index":241,"title":{},"name":{},"text":{"2":{},"14":{},"19":{},"21":{},"33":{},"37":{},"39":{},"50":{},"57":{},"68":{},"78":{},"90":{},"94":{}},"component":{}}],["exist",{"_index":920,"title":{},"name":{},"text":{"7":{},"17":{},"18":{},"26":{},"34":{},"36":{},"43":{},"54":{},"61":{},"72":{},"77":{},"83":{},"93":{},"95":{},"97":{},"101":{},"116":{}},"component":{}}],["exit",{"_index":2068,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["expand",{"_index":2463,"title":{},"name":{},"text":{"99":{},"111":{}},"component":{}}],["expect",{"_index":634,"title":{},"name":{},"text":{"5":{},"15":{},"24":{},"34":{},"51":{},"69":{},"81":{},"91":{},"108":{}},"component":{}}],["experienc",{"_index":2838,"title":{},"name":{},"text":{"114":{}},"component":{}}],["experiment",{"_index":950,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["explain",{"_index":957,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"113":{}},"component":{}}],["explan",{"_index":608,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["explicit",{"_index":929,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["explicitli",{"_index":2666,"title":{},"name":{},"text":{"106":{}},"component":{}}],["export",{"_index":747,"title":{},"name":{},"text":{"6":{},"7":{},"25":{},"26":{},"42":{},"43":{},"60":{},"61":{},"82":{},"83":{}},"component":{}}],["expos",{"_index":452,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"17":{},"22":{},"24":{},"26":{},"36":{},"40":{},"43":{},"54":{},"58":{},"61":{},"72":{},"79":{},"81":{},"83":{},"93":{}},"component":{}}],["express",{"_index":237,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"50":{},"57":{},"68":{},"78":{},"90":{}},"component":{}}],["extend",{"_index":2546,"title":{"105-8":{}},"name":{},"text":{"105":{}},"component":{}}],["extens",{"_index":1725,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"76":{},"89":{}},"component":{}}],["extern",{"_index":1820,"title":{},"name":{},"text":{"15":{},"17":{},"34":{},"36":{},"51":{},"54":{},"69":{},"72":{},"91":{},"93":{}},"component":{}}],["extra",{"_index":1094,"title":{},"name":{},"text":{"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"95":{},"112":{},"117":{}},"component":{}}],["ey",{"_index":2094,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["f",{"_index":1238,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"47":{},"54":{},"65":{},"72":{},"87":{},"93":{},"115":{}},"component":{}}],["f0",{"_index":1632,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["f1",{"_index":1304,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["f10",{"_index":1322,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["f11",{"_index":1324,"title":{},"name":{},"text":{"11":{},"18":{},"30":{},"47":{},"65":{},"77":{},"87":{}},"component":{}}],["f12",{"_index":1326,"title":{},"name":{},"text":{"11":{},"18":{},"30":{},"47":{},"65":{},"77":{},"87":{}},"component":{}}],["f2",{"_index":1306,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["f3",{"_index":1308,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["f4",{"_index":1310,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["f5",{"_index":1312,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["f6",{"_index":1314,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["f7",{"_index":1316,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["f8",{"_index":1318,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["f9",{"_index":1320,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["fa",{"_index":1586,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["fact",{"_index":2504,"title":{},"name":{},"text":{"101":{},"108":{}},"component":{}}],["fail",{"_index":2045,"title":{"115-6":{}},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{},"106":{},"117":{}},"component":{}}],["fairli",{"_index":588,"title":{},"name":{},"text":{"5":{},"24":{},"81":{},"114":{}},"component":{}}],["fake",{"_index":273,"title":{"3-6":{},"5-4":{},"22-6":{},"24-4":{},"40-6":{},"58-6":{},"79-6":{},"81-4":{}},"name":{"3":{},"22":{},"40":{},"58":{},"79":{}},"text":{"3":{},"15":{},"22":{},"34":{},"40":{},"51":{},"58":{},"69":{},"79":{},"91":{}},"component":{}}],["fall",{"_index":268,"title":{"3-2":{},"22-2":{},"40-2":{},"58-2":{},"79-2":{}},"name":{},"text":{"114":{}},"component":{}}],["fals",{"_index":1812,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"76":{},"91":{},"105":{}},"component":{}}],["famili",{"_index":2172,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["familiar",{"_index":547,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["famou",{"_index":2741,"title":{},"name":{},"text":{"108":{}},"component":{}}],["faq",{"_index":2365,"title":{},"name":{},"text":{"76":{}},"component":{}}],["far",{"_index":2516,"title":{},"name":{},"text":{"101":{}},"component":{}}],["fb",{"_index":1546,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["fc",{"_index":1603,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["fd",{"_index":1652,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["fe",{"_index":1688,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["featur",{"_index":1838,"title":{},"name":{},"text":{"15":{},"91":{},"105":{},"111":{}},"component":{}}],["fec",{"_index":222,"title":{"12-6":{},"13-5":{},"31-6":{},"32-5":{},"48-6":{},"49-5":{},"66-6":{},"67-5":{},"88-6":{},"89-5":{}},"name":{},"text":{"2":{},"4":{},"5":{},"12":{},"13":{},"21":{},"23":{},"24":{},"31":{},"32":{},"39":{},"41":{},"48":{},"49":{},"57":{},"59":{},"66":{},"67":{},"78":{},"80":{},"81":{},"88":{},"89":{}},"component":{}}],["fec.hpp",{"_index":224,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["fecpercentag",{"_index":1468,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["feed",{"_index":578,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["feel",{"_index":2353,"title":{},"name":{},"text":{"76":{},"99":{},"114":{},"115":{}},"component":{}}],["few",{"_index":567,"title":{},"name":{},"text":{"5":{},"9":{},"13":{},"24":{},"28":{},"32":{},"45":{},"49":{},"53":{},"63":{},"67":{},"71":{},"81":{},"85":{},"89":{},"95":{},"101":{},"108":{},"112":{},"114":{}},"component":{}}],["ff",{"_index":1554,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["fi",{"_index":2069,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"105":{}},"component":{}}],["field",{"_index":1382,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["figur",{"_index":286,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"8":{},"10":{},"11":{},"12":{},"13":{},"22":{},"23":{},"26":{},"27":{},"29":{},"30":{},"31":{},"32":{},"40":{},"41":{},"43":{},"44":{},"46":{},"47":{},"48":{},"49":{},"58":{},"59":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"79":{},"80":{},"83":{},"84":{},"86":{},"87":{},"88":{},"89":{}},"component":{}}],["file",{"_index":75,"title":{"15-5":{},"34-5":{},"51-2":{},"69-2":{},"91-5":{},"95-8":{},"106-4":{}},"name":{},"text":{"1":{},"3":{},"5":{},"6":{},"13":{},"15":{},"17":{},"20":{},"22":{},"24":{},"25":{},"32":{},"34":{},"36":{},"38":{},"40":{},"42":{},"49":{},"51":{},"54":{},"56":{},"58":{},"60":{},"67":{},"69":{},"72":{},"74":{},"76":{},"79":{},"81":{},"82":{},"89":{},"91":{},"93":{},"95":{},"97":{},"100":{},"101":{},"105":{},"106":{},"109":{},"112":{},"114":{},"115":{},"116":{}},"component":{}}],["filenam",{"_index":437,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["filesrc",{"_index":1895,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["filesystem",{"_index":454,"title":{},"name":{},"text":{"3":{},"6":{},"22":{},"25":{},"40":{},"42":{},"58":{},"60":{},"79":{},"82":{}},"component":{}}],["final",{"_index":240,"title":{},"name":{},"text":{"2":{},"3":{},"6":{},"7":{},"9":{},"17":{},"21":{},"22":{},"25":{},"26":{},"28":{},"36":{},"39":{},"40":{},"42":{},"43":{},"45":{},"54":{},"57":{},"58":{},"60":{},"61":{},"63":{},"72":{},"78":{},"79":{},"82":{},"83":{},"85":{},"93":{},"105":{}},"component":{}}],["find",{"_index":1756,"title":{},"name":{},"text":{"14":{},"17":{},"33":{},"36":{},"50":{},"54":{},"68":{},"72":{},"90":{},"93":{},"105":{},"106":{},"109":{},"112":{}},"component":{}}],["fine",{"_index":1091,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{},"96":{}},"component":{}}],["firefox",{"_index":2258,"title":{},"name":{},"text":{"51":{},"69":{},"75":{},"101":{},"108":{},"111":{}},"component":{}}],["firmwar",{"_index":2217,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["first",{"_index":65,"title":{},"name":{},"text":{"1":{},"3":{},"7":{},"8":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"20":{},"22":{},"26":{},"27":{},"30":{},"31":{},"32":{},"33":{},"36":{},"37":{},"38":{},"40":{},"43":{},"44":{},"47":{},"48":{},"49":{},"50":{},"51":{},"54":{},"55":{},"56":{},"58":{},"61":{},"62":{},"65":{},"66":{},"67":{},"68":{},"69":{},"72":{},"73":{},"74":{},"79":{},"83":{},"84":{},"87":{},"88":{},"89":{},"90":{},"91":{},"93":{},"94":{},"95":{},"97":{},"98":{},"99":{},"100":{},"102":{},"103":{},"104":{},"105":{},"108":{},"109":{},"112":{},"115":{},"116":{}},"component":{}}],["fix",{"_index":991,"title":{},"name":{},"text":{"8":{},"12":{},"13":{},"27":{},"31":{},"32":{},"44":{},"48":{},"49":{},"62":{},"66":{},"67":{},"84":{},"88":{},"89":{},"107":{},"115":{}},"component":{}}],["flag",{"_index":297,"title":{"11-13":{},"13-4":{},"30-13":{},"32-4":{},"47-13":{},"49-4":{},"65-13":{},"67-4":{},"87-13":{},"89-4":{}},"name":{},"text":{"3":{},"11":{},"12":{},"13":{},"17":{},"19":{},"22":{},"30":{},"31":{},"32":{},"36":{},"37":{},"40":{},"47":{},"48":{},"49":{},"54":{},"55":{},"58":{},"65":{},"66":{},"67":{},"72":{},"73":{},"79":{},"87":{},"88":{},"89":{},"93":{},"94":{},"107":{}},"component":{}}],["flat",{"_index":2845,"title":{},"name":{},"text":{"114":{}},"component":{}}],["flex",{"_index":672,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["flexibl",{"_index":2281,"title":{},"name":{},"text":{"76":{}},"component":{}}],["flightlessmango’",{"_index":2151,"title":{},"name":{},"text":{"18":{},"77":{}},"component":{}}],["flip=tru",{"_index":1863,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["flow",{"_index":369,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"10":{},"22":{},"23":{},"24":{},"29":{},"40":{},"41":{},"46":{},"58":{},"59":{},"64":{},"79":{},"80":{},"81":{},"86":{}},"component":{}}],["flowchart",{"_index":1097,"title":{},"name":{},"text":{"10":{},"29":{},"46":{},"64":{},"86":{}},"component":{}}],["focu",{"_index":535,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{},"101":{}},"component":{}}],["focus",{"_index":2738,"title":{},"name":{},"text":{"108":{},"116":{}},"component":{}}],["folder",{"_index":656,"title":{"15-3":{},"34-3":{},"91-3":{},"105-2":{}},"name":{},"text":{"6":{},"15":{},"25":{},"34":{},"42":{},"51":{},"53":{},"60":{},"69":{},"71":{},"76":{},"82":{},"91":{},"97":{},"114":{},"115":{}},"component":{}}],["follow",{"_index":28,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"25":{},"26":{},"27":{},"28":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"47":{},"48":{},"49":{},"50":{},"51":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"65":{},"66":{},"67":{},"68":{},"69":{},"73":{},"74":{},"76":{},"78":{},"79":{},"80":{},"82":{},"83":{},"84":{},"85":{},"87":{},"88":{},"89":{},"90":{},"91":{},"93":{},"94":{},"95":{},"100":{},"105":{},"115":{},"117":{}},"component":{}}],["foolish",{"_index":5,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["forbidden",{"_index":1730,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["forc",{"_index":1813,"title":{"106-3":{}},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{},"106":{}},"component":{}}],["forego",{"_index":2891,"title":{},"name":{},"text":{"117":{}},"component":{}}],["forest",{"_index":269,"title":{"3-2":{},"22-2":{},"40-2":{},"58-2":{},"79-2":{}},"name":{},"text":{},"component":{}}],["fork",{"_index":970,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["form",{"_index":494,"title":{},"name":{},"text":{"4":{},"12":{},"23":{},"31":{},"41":{},"48":{},"59":{},"66":{},"80":{},"88":{}},"component":{}}],["formal",{"_index":234,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"50":{},"57":{},"68":{},"78":{},"90":{}},"component":{}}],["format",{"_index":218,"title":{"8-2":{},"13-6":{},"27-2":{},"32-6":{},"44-2":{},"49-6":{},"62-2":{},"67-6":{},"84-2":{},"89-6":{},"105-2":{}},"name":{},"text":{"2":{},"4":{},"5":{},"7":{},"8":{},"11":{},"12":{},"13":{},"14":{},"16":{},"19":{},"21":{},"23":{},"24":{},"26":{},"27":{},"30":{},"31":{},"32":{},"33":{},"35":{},"37":{},"39":{},"41":{},"43":{},"44":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"55":{},"57":{},"59":{},"61":{},"62":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"73":{},"76":{},"78":{},"80":{},"81":{},"83":{},"84":{},"87":{},"88":{},"89":{},"90":{},"92":{},"94":{},"105":{}},"component":{}}],["format=(string)adt",{"_index":1943,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["format=(string)nv12",{"_index":2212,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["format=(string)raw",{"_index":1926,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["format=i420",{"_index":1959,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["fortun",{"_index":302,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"79":{},"83":{}},"component":{}}],["forum",{"_index":2367,"title":{},"name":{},"text":{"76":{}},"component":{}}],["forward",{"_index":1424,"title":{"12-6":{},"13-5":{},"31-6":{},"32-5":{},"48-6":{},"49-5":{},"66-6":{},"67-5":{},"88-6":{},"89-5":{}},"name":{},"text":{},"component":{}}],["found",{"_index":2053,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"97":{},"100":{},"101":{},"112":{},"113":{}},"component":{}}],["foundat",{"_index":211,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{},"116":{}},"component":{}}],["four",{"_index":1481,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["fp",{"_index":2149,"title":{},"name":{},"text":{"18":{},"77":{}},"component":{}}],["frame",{"_index":880,"title":{"115-1":{}},"name":{},"text":{"7":{},"12":{},"13":{},"26":{},"31":{},"32":{},"43":{},"48":{},"49":{},"61":{},"66":{},"67":{},"83":{},"88":{},"89":{},"97":{}},"component":{}}],["frame_stat",{"_index":1013,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["framebuff",{"_index":577,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["framed=(boolean)tru",{"_index":1925,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["framerate=(fraction)60/1",{"_index":2211,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["framerate={fps}/1",{"_index":1866,"title":{},"name":{},"text":{"15":{},"16":{},"35":{},"51":{},"52":{},"69":{},"70":{},"91":{},"92":{}},"component":{}}],["framework",{"_index":253,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["free",{"_index":2467,"title":{},"name":{},"text":{"99":{},"114":{},"115":{}},"component":{}}],["freedom",{"_index":2420,"title":{},"name":{},"text":{"96":{}},"component":{}}],["frequenc",{"_index":1037,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["frequent",{"_index":2762,"title":{},"name":{},"text":{"109":{},"112":{},"114":{}},"component":{}}],["frontend",{"_index":2280,"title":{"76":{}},"name":{},"text":{"76":{},"108":{},"112":{}},"component":{}}],["frontend.org/commun",{"_index":2368,"title":{},"name":{},"text":{"76":{}},"component":{}}],["frontend.org/doc",{"_index":2364,"title":{},"name":{},"text":{"76":{}},"component":{}}],["frontend.org/docs/faq",{"_index":2366,"title":{},"name":{},"text":{"76":{}},"component":{}}],["frontend/them",{"_index":2360,"title":{},"name":{},"text":{"76":{}},"component":{}}],["full",{"_index":40,"title":{"115-5":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"11":{},"13":{},"15":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"30":{},"32":{},"34":{},"38":{},"39":{},"40":{},"42":{},"43":{},"47":{},"49":{},"51":{},"56":{},"57":{},"58":{},"60":{},"61":{},"65":{},"67":{},"69":{},"74":{},"78":{},"79":{},"81":{},"82":{},"83":{},"87":{},"89":{},"91":{},"96":{},"101":{},"115":{}},"component":{}}],["fulli",{"_index":1852,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["fullscreen",{"_index":836,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"105":{},"115":{}},"component":{}}],["function",{"_index":133,"title":{},"name":{},"text":{"2":{},"4":{},"21":{},"23":{},"39":{},"41":{},"57":{},"59":{},"78":{},"80":{}},"component":{}}],["further",{"_index":2277,"title":{},"name":{},"text":{"75":{}},"component":{}}],["futur",{"_index":520,"title":{},"name":{},"text":{"4":{},"7":{},"23":{},"26":{},"41":{},"43":{},"59":{},"61":{},"80":{},"83":{},"100":{}},"component":{}}],["g",{"_index":806,"title":{},"name":{},"text":{"6":{},"11":{},"17":{},"25":{},"30":{},"36":{},"42":{},"47":{},"54":{},"60":{},"65":{},"72":{},"82":{},"87":{},"93":{},"112":{}},"component":{}}],["galleri",{"_index":2358,"title":{},"name":{},"text":{"76":{}},"component":{}}],["game",{"_index":56,"title":{"102":{},"15-15":{},"18-1":{},"18-3":{},"18-4":{},"34-15":{},"77-1":{},"77-3":{},"77-4":{},"91-15":{},"114-3":{}},"name":{},"text":{"1":{},"2":{},"5":{},"11":{},"18":{},"20":{},"21":{},"24":{},"30":{},"34":{},"38":{},"39":{},"47":{},"56":{},"57":{},"65":{},"74":{},"76":{},"77":{},"78":{},"81":{},"87":{},"96":{},"98":{},"101":{},"102":{},"103":{},"104":{},"105":{},"108":{},"111":{},"112":{},"114":{},"116":{},"117":{}},"component":{}}],["game_slug",{"_index":2619,"title":{},"name":{},"text":{"105":{}},"component":{}}],["gamedir",{"_index":2633,"title":{},"name":{},"text":{"105":{}},"component":{}}],["gameonwhales/lutri",{"_index":2553,"title":{},"name":{},"text":{"105":{}},"component":{}}],["gameonwhales/steam",{"_index":2830,"title":{},"name":{},"text":{"114":{}},"component":{}}],["gameonwhales/xorg:sha",{"_index":2482,"title":{},"name":{},"text":{"100":{}},"component":{}}],["gamepad",{"_index":62,"title":{"115-3":{}},"name":{},"text":{"1":{},"3":{},"5":{},"17":{},"20":{},"22":{},"24":{},"36":{},"38":{},"40":{},"54":{},"56":{},"58":{},"72":{},"74":{},"79":{},"81":{},"93":{},"96":{},"101":{},"110":{},"115":{},"116":{}},"component":{}}],["games:/var/lutris/:rw",{"_index":2586,"title":{},"name":{},"text":{"105":{}},"component":{}}],["gamescop",{"_index":584,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["gamestream",{"_index":2743,"title":{},"name":{},"text":{"108":{}},"component":{}}],["game’",{"_index":2155,"title":{},"name":{},"text":{"18":{},"77":{}},"component":{}}],["gather",{"_index":2164,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["gcc",{"_index":662,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["gcm",{"_index":976,"title":{},"name":{},"text":{"8":{},"10":{},"27":{},"29":{},"44":{},"46":{},"62":{},"64":{},"84":{},"86":{}},"component":{}}],["geforc",{"_index":2168,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{},"107":{}},"component":{}}],["gener",{"_index":85,"title":{"3-4":{},"22-4":{},"40-4":{},"58-4":{},"79-4":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"9":{},"11":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"28":{},"30":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"45":{},"47":{},"51":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"63":{},"65":{},"69":{},"73":{},"74":{},"78":{},"79":{},"80":{},"81":{},"82":{},"85":{},"87":{},"94":{},"96":{},"100":{},"105":{},"106":{},"108":{}},"component":{}}],["get",{"_index":925,"title":{"76-2":{}},"name":{},"text":{"7":{},"18":{},"26":{},"43":{},"61":{},"76":{},"77":{},"83":{}},"component":{}}],["ghcr.io/gam",{"_index":1808,"title":{},"name":{},"text":{"15":{},"17":{},"34":{},"36":{},"51":{},"54":{},"69":{},"72":{},"76":{},"91":{},"93":{},"105":{}},"component":{}}],["gigant",{"_index":2731,"title":{},"name":{},"text":{"108":{}},"component":{}}],["git",{"_index":670,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"97":{},"103":{}},"component":{}}],["github",{"_index":2474,"title":{},"name":{},"text":{"100":{},"113":{},"114":{}},"component":{}}],["give",{"_index":154,"title":{},"name":{},"text":{"2":{},"17":{},"21":{},"36":{},"39":{},"54":{},"57":{},"72":{},"78":{},"93":{}},"component":{}}],["given",{"_index":94,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"7":{},"12":{},"20":{},"21":{},"22":{},"23":{},"26":{},"31":{},"38":{},"39":{},"40":{},"41":{},"43":{},"48":{},"56":{},"57":{},"58":{},"59":{},"61":{},"66":{},"74":{},"78":{},"79":{},"80":{},"83":{},"88":{},"96":{},"117":{}},"component":{}}],["glew1.10",{"_index":2625,"title":{},"name":{},"text":{"105":{}},"component":{}}],["global",{"_index":131,"title":{},"name":{},"text":{"2":{},"18":{},"21":{},"39":{},"57":{},"77":{},"78":{}},"component":{}}],["glue",{"_index":846,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["gnu",{"_index":750,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["gnu/pkgconfig",{"_index":757,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["gnutl",{"_index":2626,"title":{},"name":{},"text":{"105":{}},"component":{}}],["go",{"_index":772,"title":{},"name":{},"text":{"6":{},"7":{},"25":{},"26":{},"42":{},"43":{},"60":{},"61":{},"82":{},"83":{},"112":{},"117":{}},"component":{}}],["goal",{"_index":30,"title":{},"name":{},"text":{"1":{},"3":{},"20":{},"22":{},"38":{},"40":{},"56":{},"58":{},"74":{},"79":{},"106":{},"108":{},"116":{}},"component":{}}],["gobject",{"_index":542,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["gobject2",{"_index":695,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["goe",{"_index":461,"title":{},"name":{},"text":{"3":{},"14":{},"22":{},"33":{},"40":{},"50":{},"58":{},"68":{},"79":{},"90":{}},"component":{}}],["gogslug",{"_index":2620,"title":{},"name":{},"text":{"105":{}},"component":{}}],["good",{"_index":947,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"95":{},"104":{}},"component":{}}],["good:pulse=en",{"_index":735,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["good:soup=dis",{"_index":733,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["good:ximagesrc=en",{"_index":734,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["gow",{"_index":98,"title":{"101":{},"102":{},"112":{},"112-4":{}},"name":{"112":{}},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"43":{},"56":{},"61":{},"74":{},"83":{},"95":{},"96":{},"97":{},"100":{},"101":{},"103":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{}},"component":{"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{}}}],["gow/bas",{"_index":2580,"title":{},"name":{},"text":{"105":{}},"component":{}}],["gow/lutri",{"_index":2582,"title":{},"name":{},"text":{"105":{}},"component":{}}],["gow/nvidia",{"_index":2004,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["gow_log",{"_index":2391,"title":{},"name":{},"text":{"95":{},"105":{}},"component":{}}],["gow_required_devices=/dev/input",{"_index":2145,"title":{},"name":{},"text":{"18":{},"34":{},"77":{}},"component":{}}],["gow_required_devices=/dev/input/ev",{"_index":2335,"title":{},"name":{},"text":{"76":{}},"component":{}}],["gpart",{"_index":2521,"title":{},"name":{},"text":{"101":{}},"component":{}}],["gpu",{"_index":48,"title":{"107":{},"109":{},"15-12":{},"19-4":{},"34-12":{},"37-4":{},"51-8":{},"55-4":{},"69-8":{},"73-4":{},"91-12":{},"94-4":{},"96-4":{},"107-2":{},"107-4":{},"110-9":{},"112-2":{},"114-1":{}},"name":{"109":{}},"text":{"1":{},"7":{},"15":{},"17":{},"19":{},"20":{},"26":{},"34":{},"36":{},"37":{},"38":{},"43":{},"51":{},"54":{},"55":{},"56":{},"61":{},"69":{},"72":{},"73":{},"74":{},"83":{},"91":{},"93":{},"94":{},"96":{},"100":{},"104":{},"107":{},"109":{},"110":{},"112":{},"113":{},"114":{}},"component":{}}],["gpu.conf",{"_index":2768,"title":{},"name":{},"text":{"109":{}},"component":{}}],["gpu.conf:/usr/share/x11/xorg.conf.d/01",{"_index":2776,"title":{},"name":{},"text":{"109":{}},"component":{}}],["gpu.conf:ro",{"_index":2777,"title":{},"name":{},"text":{"109":{}},"component":{}}],["gpu_uuid",{"_index":2703,"title":{},"name":{},"text":{"107":{}},"component":{}}],["gpus=al",{"_index":1997,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["grammar",{"_index":238,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"50":{},"57":{},"68":{},"78":{},"90":{}},"component":{}}],["graph",{"_index":480,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["graphic",{"_index":569,"title":{"104-5":{}},"name":{},"text":{"5":{},"7":{},"19":{},"24":{},"26":{},"37":{},"43":{},"55":{},"61":{},"73":{},"81":{},"83":{},"94":{},"96":{},"101":{},"104":{},"108":{},"111":{}},"component":{}}],["grasp",{"_index":2401,"title":{},"name":{},"text":{"96":{}},"component":{}}],["grave",{"_index":1349,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["great",{"_index":142,"title":{},"name":{},"text":{"2":{},"4":{},"21":{},"23":{},"39":{},"41":{},"57":{},"59":{},"78":{},"80":{},"96":{},"99":{},"101":{},"111":{}},"component":{}}],["grep",{"_index":2017,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{},"105":{},"107":{},"114":{}},"component":{}}],["ground",{"_index":26,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["group",{"_index":406,"title":{},"name":{},"text":{"3":{},"5":{},"17":{},"22":{},"24":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"81":{},"93":{}},"component":{}}],["group=\"input",{"_index":2107,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["group_kernel",{"_index":403,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["group_udev",{"_index":405,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["grub",{"_index":2022,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"72":{},"93":{},"94":{}},"component":{}}],["grub_cmdline_linux_default",{"_index":2025,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["grub_cmdline_linux_default=\"quiet",{"_index":2028,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"72":{},"93":{},"94":{}},"component":{}}],["gs",{"_index":1762,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["gst",{"_index":572,"title":{"6-4":{},"25-4":{},"42-4":{},"60-4":{},"82-4":{}},"name":{},"text":{"5":{},"6":{},"16":{},"24":{},"25":{},"35":{},"42":{},"52":{},"60":{},"70":{},"81":{},"82":{},"92":{}},"component":{}}],["gst_debug",{"_index":764,"title":{},"name":{},"text":{"6":{},"15":{},"25":{},"34":{},"42":{},"51":{},"60":{},"69":{},"82":{},"91":{}},"component":{}}],["gst_debug=4",{"_index":761,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["gstbasetransform",{"_index":532,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["gstbuffer",{"_index":504,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["gstbufferlist",{"_index":508,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_sess",{"_index":2202,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["gstreamer",{"_index":478,"title":{"4":{},"16":{},"23":{},"35":{},"41":{},"52":{},"59":{},"70":{},"80":{},"92":{},"6-3":{},"7-4":{},"15-11":{},"15-14":{},"25-3":{},"26-4":{},"34-11":{},"34-13":{},"42-3":{},"43-4":{},"51-7":{},"51-9":{},"60-3":{},"61-4":{},"69-7":{},"69-9":{},"82-3":{},"83-4":{},"91-11":{},"91-14":{}},"name":{"4":{},"16":{},"23":{},"35":{},"41":{},"52":{},"59":{},"70":{},"80":{},"92":{}},"text":{"4":{},"5":{},"6":{},"7":{},"15":{},"23":{},"24":{},"25":{},"26":{},"34":{},"41":{},"42":{},"43":{},"51":{},"59":{},"60":{},"61":{},"69":{},"80":{},"81":{},"82":{},"83":{},"91":{}},"component":{}}],["gstreamer.freedesktop.org",{"_index":490,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["gstreamer.video.h264_encod",{"_index":2256,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["gstreamer.video.hevc_encod",{"_index":1855,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["gstreamer/issues/1167",{"_index":1869,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["gstrtpmoonlightpay_audio.cpp",{"_index":564,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["gstrtpmoonlightpay_audio.hpp",{"_index":563,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["gstrtpmoonlightpay_video.cpp",{"_index":560,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["gstrtpmoonlightpay_video.hpp",{"_index":559,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["gstvideoencoder.c:771:gst_video_encoder_setcap",{"_index":2206,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["gtx",{"_index":2169,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["guarante",{"_index":984,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["guc",{"_index":2222,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["guc/huc",{"_index":2224,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["gui",{"_index":622,"title":{"96-3":{}},"name":{},"text":{"5":{},"24":{},"81":{},"96":{},"101":{},"108":{},"111":{},"116":{}},"component":{}}],["guid",{"_index":553,"title":{},"name":{},"text":{"4":{},"17":{},"23":{},"36":{},"41":{},"53":{},"54":{},"59":{},"71":{},"72":{},"80":{},"93":{},"98":{},"106":{},"113":{}},"component":{}}],["guy",{"_index":112,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["gyro",{"_index":1042,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"44":{},"47":{},"62":{},"65":{},"84":{},"87":{}},"component":{}}],["gyro/acceler",{"_index":609,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["gyroscop",{"_index":1046,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["h",{"_index":1241,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"112":{},"114":{}},"component":{}}],["h.264",{"_index":517,"title":{"13-6":{},"32-6":{},"49-6":{},"67-6":{},"89-6":{}},"name":{},"text":{"4":{},"10":{},"13":{},"23":{},"29":{},"32":{},"41":{},"46":{},"49":{},"51":{},"59":{},"64":{},"67":{},"69":{},"80":{},"86":{},"89":{}},"component":{}}],["hackabl",{"_index":72,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["hadolint",{"_index":2644,"title":{},"name":{},"text":{"105":{}},"component":{}}],["handl",{"_index":482,"title":{},"name":{},"text":{"4":{},"5":{},"7":{},"23":{},"24":{},"26":{},"41":{},"43":{},"59":{},"61":{},"80":{},"81":{},"83":{},"101":{},"106":{},"107":{},"112":{},"115":{},"116":{}},"component":{}}],["hangeul",{"_index":1190,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["hanja",{"_index":1192,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["happen",{"_index":363,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{},"101":{},"105":{},"109":{},"115":{}},"component":{}}],["happi",{"_index":2785,"title":{},"name":{},"text":{"110":{}},"component":{}}],["haptic",{"_index":1150,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["hard",{"_index":2778,"title":{},"name":{},"text":{"110":{}},"component":{}}],["hardcod",{"_index":1458,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["hardwar",{"_index":35,"title":{},"name":{},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"43":{},"56":{},"61":{},"74":{},"83":{},"96":{},"108":{},"111":{},"112":{},"113":{},"116":{}},"component":{}}],["hash",{"_index":1070,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["hasn’t",{"_index":2074,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["hat",{"_index":2196,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["have",{"_index":150,"title":{},"name":{},"text":{"2":{},"5":{},"7":{},"21":{},"24":{},"26":{},"39":{},"43":{},"57":{},"61":{},"78":{},"81":{},"83":{},"96":{},"103":{},"106":{},"110":{},"112":{},"115":{},"117":{}},"component":{}}],["haven’t",{"_index":816,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["hdmi",{"_index":2656,"title":{},"name":{},"text":{"106":{}},"component":{}}],["hdr_mode",{"_index":1023,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["head",{"_index":2476,"title":{},"name":{},"text":{"100":{},"108":{}},"component":{}}],["headach",{"_index":2887,"title":{},"name":{},"text":{"117":{}},"component":{}}],["header",{"_index":223,"title":{"13-7":{},"32-7":{},"49-7":{},"67-7":{},"89-7":{}},"name":{},"text":{"2":{},"4":{},"11":{},"12":{},"13":{},"21":{},"23":{},"30":{},"31":{},"32":{},"39":{},"41":{},"47":{},"48":{},"49":{},"57":{},"59":{},"65":{},"66":{},"67":{},"78":{},"80":{},"87":{},"88":{},"89":{}},"component":{}}],["headless",{"_index":580,"title":{"7":{},"26":{},"43":{},"61":{},"83":{},"116-3":{}},"name":{},"text":{"5":{},"18":{},"24":{},"77":{},"81":{},"96":{},"97":{},"106":{},"108":{},"110":{},"112":{},"113":{},"115":{},"116":{}},"component":{}}],["heart",{"_index":2406,"title":{},"name":{},"text":{"96":{}},"component":{}}],["height",{"_index":1159,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["height=(int)360",{"_index":1949,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["height=(int)720",{"_index":2210,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["height={height",{"_index":1958,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["helm",{"_index":2539,"title":{},"name":{},"text":{"104":{}},"component":{}}],["help",{"_index":93,"title":{"99":{}},"name":{},"text":{"1":{},"3":{},"6":{},"11":{},"19":{},"20":{},"22":{},"25":{},"30":{},"37":{},"38":{},"40":{},"42":{},"47":{},"55":{},"56":{},"58":{},"60":{},"65":{},"73":{},"74":{},"79":{},"82":{},"87":{},"94":{},"99":{},"110":{},"112":{},"113":{},"115":{},"116":{}},"component":{}}],["here",{"_index":208,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"9":{},"10":{},"13":{},"15":{},"16":{},"19":{},"21":{},"22":{},"24":{},"28":{},"29":{},"32":{},"34":{},"35":{},"37":{},"39":{},"40":{},"45":{},"46":{},"49":{},"51":{},"52":{},"57":{},"58":{},"63":{},"64":{},"67":{},"69":{},"70":{},"78":{},"79":{},"81":{},"85":{},"86":{},"89":{},"91":{},"92":{},"94":{},"95":{},"101":{},"106":{},"110":{},"112":{},"114":{},"117":{}},"component":{}}],["here’",{"_index":549,"title":{},"name":{},"text":{"4":{},"7":{},"19":{},"23":{},"26":{},"37":{},"41":{},"43":{},"55":{},"59":{},"61":{},"73":{},"76":{},"80":{},"83":{},"94":{},"95":{},"100":{},"108":{},"111":{},"115":{}},"component":{}}],["hevc",{"_index":518,"title":{},"name":{},"text":{"4":{},"10":{},"23":{},"29":{},"41":{},"46":{},"51":{},"59":{},"64":{},"69":{},"80":{},"86":{}},"component":{}}],["hex",{"_index":1391,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["hexadecim",{"_index":2673,"title":{},"name":{},"text":{"106":{}},"component":{}}],["high",{"_index":171,"title":{},"name":{},"text":{"2":{},"7":{},"10":{},"21":{},"26":{},"29":{},"39":{},"43":{},"46":{},"53":{},"57":{},"61":{},"64":{},"71":{},"78":{},"83":{},"86":{},"96":{}},"component":{}}],["highli",{"_index":144,"title":{},"name":{},"text":{"2":{},"3":{},"21":{},"22":{},"39":{},"40":{},"57":{},"58":{},"78":{},"79":{},"96":{},"114":{}},"component":{}}],["hint",{"_index":2842,"title":{},"name":{},"text":{"114":{}},"component":{}}],["histor",{"_index":2525,"title":{},"name":{},"text":{"102":{},"108":{},"112":{}},"component":{}}],["hlsdemux",{"_index":1938,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["hold",{"_index":1822,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["home",{"_index":1204,"title":{"15-3":{},"34-3":{},"91-3":{}},"name":{},"text":{"11":{},"15":{},"30":{},"34":{},"47":{},"65":{},"87":{},"91":{},"104":{},"105":{}},"component":{}}],["home/.config",{"_index":2442,"title":{},"name":{},"text":{"97":{}},"component":{}}],["home/.config/gow/run",{"_index":2823,"title":{},"name":{},"text":{"112":{}},"component":{}}],["home/.config/gow/user.env",{"_index":2441,"title":{},"name":{},"text":{"97":{}},"component":{}}],["home/gst",{"_index":768,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["home/gstreamer/includ",{"_index":710,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["home/gstreamer/usr/local/includ",{"_index":711,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["home/hobbyist",{"_index":2886,"title":{},"name":{},"text":{"117":{}},"component":{}}],["home/retro",{"_index":1834,"title":{},"name":{},"text":{"15":{},"34":{},"91":{}},"component":{}}],["home/retro/sunshin",{"_index":2850,"title":{"115-2":{}},"name":{},"text":{},"component":{}}],["honor",{"_index":1777,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["hood",{"_index":2269,"title":{},"name":{},"text":{"53":{},"71":{}},"component":{}}],["hook",{"_index":820,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["hopefulli",{"_index":951,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["horizont",{"_index":1112,"title":{"11-6":{},"30-6":{},"47-6":{},"65-6":{},"87-6":{}},"name":{},"text":{},"component":{}}],["host",{"_index":34,"title":{"3-3":{},"22-3":{},"40-3":{},"58-3":{},"79-3":{},"96-1":{},"116-2":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"15":{},"17":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"34":{},"36":{},"38":{},"39":{},"40":{},"42":{},"43":{},"51":{},"53":{},"54":{},"56":{},"57":{},"58":{},"60":{},"61":{},"69":{},"71":{},"72":{},"74":{},"76":{},"78":{},"79":{},"81":{},"82":{},"83":{},"91":{},"93":{},"96":{},"97":{},"98":{},"101":{},"102":{},"105":{},"107":{},"108":{},"109":{},"110":{},"112":{},"113":{},"114":{},"116":{}},"component":{}}],["host_apps_state_fold",{"_index":1786,"title":{"15-4":{},"34-4":{},"91-4":{}},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["host_apps_state_folder/fak",{"_index":1828,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["host_apps_state_folder=/etc/wolf",{"_index":1972,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["host_apps_state_folder}/${app_state_folder}/${app_titl",{"_index":1833,"title":{},"name":{},"text":{"15":{},"34":{},"91":{}},"component":{}}],["hostconfig",{"_index":2250,"title":{},"name":{},"text":{"51":{},"69":{},"76":{},"105":{}},"component":{}}],["hostnam",{"_index":2229,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["host’",{"_index":2807,"title":{},"name":{},"text":{"112":{}},"component":{}}],["hotplug",{"_index":207,"title":{"3":{},"22":{},"40":{},"58":{},"79":{},"5-4":{},"24-4":{},"81-4":{}},"name":{},"text":{"2":{},"3":{},"5":{},"21":{},"22":{},"24":{},"39":{},"40":{},"57":{},"58":{},"78":{},"79":{},"81":{}},"component":{}}],["http",{"_index":812,"title":{"9-6":{},"28-6":{},"45-6":{},"63-6":{},"85-6":{}},"name":{"9":{},"28":{},"45":{},"63":{},"85":{}},"text":{"6":{},"8":{},"9":{},"10":{},"12":{},"14":{},"17":{},"19":{},"25":{},"27":{},"28":{},"29":{},"31":{},"33":{},"36":{},"37":{},"42":{},"44":{},"45":{},"46":{},"48":{},"50":{},"54":{},"55":{},"60":{},"62":{},"63":{},"64":{},"66":{},"68":{},"72":{},"73":{},"82":{},"84":{},"85":{},"86":{},"88":{},"90":{},"93":{},"94":{}},"component":{}}],["http/",{"_index":215,"title":{"9":{},"28":{},"45":{},"63":{},"85":{}},"name":{},"text":{"2":{},"10":{},"21":{},"29":{},"39":{},"46":{},"57":{},"64":{},"78":{},"86":{}},"component":{}}],["http://localhost:47989/pin/#337327e8a6fc0c66",{"_index":2089,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["https://:47990",{"_index":2453,"title":{},"name":{},"text":{"98":{},"104":{}},"component":{}}],["https://angelnu.github.io/helm",{"_index":2541,"title":{},"name":{},"text":{"104":{}},"component":{}}],["https://cemu.cfw.guid",{"_index":2349,"title":{},"name":{},"text":{"76":{}},"component":{}}],["https://docs.libretro.com",{"_index":2341,"title":{},"name":{},"text":{"76":{}},"component":{}}],["https://docs.nvidia.com/cuda/cuda",{"_index":2048,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["https://dolphin",{"_index":2351,"title":{},"name":{},"text":{"76":{}},"component":{}}],["https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight",{"_index":1942,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["https://en.wikipedia.org/wiki/wayland_(protocol)#rendering_model",{"_index":853,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["https://gist.github.com/jsturgis/3b19447b304616f18657",{"_index":1917,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["https://github.com/cfsworks/nvml_fix",{"_index":2711,"title":{},"name":{},"text":{"107":{}},"component":{}}],["https://github.com/gam",{"_index":766,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"103":{}},"component":{}}],["https://github.com/supertux/supertux/releases/download/v0.6.3/supertux",{"_index":2628,"title":{},"name":{},"text":{"105":{}},"component":{}}],["https://gitlab.freedesktop.org/gstreamer/gstreamer.git",{"_index":705,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["https://insujang.github.io/2018",{"_index":397,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["https://pcsx2.net/doc",{"_index":2343,"title":{},"name":{},"text":{"76":{}},"component":{}}],["https://pegasu",{"_index":2363,"title":{},"name":{},"text":{"76":{}},"component":{}}],["https://raw.githubusercontent.com/gam",{"_index":2001,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["https://rpcs3.net/quickstart",{"_index":2347,"title":{},"name":{},"text":{"76":{}},"component":{}}],["https://steamdb.info",{"_index":2147,"title":{},"name":{},"text":{"18":{},"34":{},"77":{}},"component":{}}],["https://storage.googleapis.com/gtv",{"_index":1874,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["https://www.bensound.com/fre",{"_index":1892,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["https://www.twitch.tv/videos/560738950",{"_index":1935,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["https://xemu.app/doc",{"_index":2345,"title":{},"name":{},"text":{"76":{}},"component":{}}],["hub",{"_index":2479,"title":{},"name":{},"text":{"100":{}},"component":{}}],["huge",{"_index":459,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["human",{"_index":828,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"114":{}},"component":{}}],["humblestoreid",{"_index":2621,"title":{},"name":{},"text":{"105":{}},"component":{}}],["hw",{"_index":586,"title":{},"name":{},"text":{"5":{},"24":{},"51":{},"69":{},"81":{},"104":{},"116":{}},"component":{}}],["i$home/gst",{"_index":779,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["i$home/gstreamer/usr/local/includ",{"_index":755,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["i915",{"_index":2774,"title":{},"name":{},"text":{"109":{}},"component":{}}],["i915.enable_guc=2",{"_index":2218,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["i915.force_prob",{"_index":2220,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["icon",{"_index":2852,"title":{"115-4":{}},"name":{},"text":{},"component":{}}],["id",{"_index":2120,"title":{},"name":{},"text":{"17":{},"18":{},"19":{},"34":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"77":{},"93":{},"94":{}},"component":{}}],["id_bus=usb",{"_index":336,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_model=wireless_control",{"_index":337,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_revision=0100",{"_index":342,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_serial=sony_interactive_entertainment_wireless_control",{"_index":338,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_type=hid",{"_index":343,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_usb_driver=usbhid",{"_index":347,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_usb_revision=0100",{"_index":345,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_usb_type=hid",{"_index":346,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_usb_vendor_id=054c",{"_index":344,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_vendor=sony_interactive_entertain",{"_index":339,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_vendor_enc=sony\\x20interactive\\x20entertain",{"_index":340,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["id_vendor_id=054c",{"_index":341,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["idea",{"_index":838,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"117":{}},"component":{}}],["ideal",{"_index":832,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"51":{},"61":{},"69":{},"83":{}},"component":{}}],["identifi",{"_index":1476,"title":{},"name":{},"text":{"13":{},"14":{},"15":{},"32":{},"33":{},"34":{},"49":{},"50":{},"67":{},"68":{},"89":{},"90":{},"91":{},"106":{},"109":{}},"component":{}}],["idr",{"_index":1451,"title":{"13-11":{},"32-11":{},"49-11":{},"67-11":{},"89-11":{}},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["idr_fram",{"_index":1021,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["ignor",{"_index":2126,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["ignore=dl3006",{"_index":2645,"title":{},"name":{},"text":{"105":{}},"component":{}}],["igpu",{"_index":54,"title":{},"name":{},"text":{"1":{},"15":{},"20":{},"38":{},"51":{},"56":{},"69":{},"74":{},"91":{},"109":{},"112":{}},"component":{}}],["imag",{"_index":899,"title":{"100-2":{},"100-3":{},"100-4":{},"105-3":{},"105-4":{},"105-5":{},"105-6":{},"105-8":{},"105-12":{},"105-19":{}},"name":{},"text":{"7":{},"13":{},"15":{},"17":{},"18":{},"19":{},"26":{},"32":{},"34":{},"36":{},"37":{},"43":{},"49":{},"51":{},"53":{},"54":{},"55":{},"61":{},"67":{},"69":{},"71":{},"72":{},"73":{},"76":{},"77":{},"83":{},"89":{},"91":{},"93":{},"94":{},"95":{},"96":{},"100":{},"101":{},"102":{},"105":{},"106":{},"113":{},"114":{}},"component":{}}],["image_sourc",{"_index":2604,"title":{},"name":{},"text":{"105":{}},"component":{}}],["images/bas",{"_index":2490,"title":{},"name":{},"text":{"100":{},"105":{}},"component":{}}],["images/lutri",{"_index":2584,"title":{},"name":{},"text":{"105":{}},"component":{}}],["images/myapp",{"_index":2383,"title":{},"name":{},"text":{"95":{}},"component":{}}],["images/retroarch",{"_index":2382,"title":{},"name":{},"text":{"95":{}},"component":{}}],["image’",{"_index":2596,"title":{},"name":{},"text":{"105":{}},"component":{}}],["immut",{"_index":137,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["imperson",{"_index":412,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["implement",{"_index":162,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"7":{},"14":{},"21":{},"23":{},"24":{},"26":{},"33":{},"39":{},"41":{},"43":{},"50":{},"57":{},"59":{},"61":{},"68":{},"78":{},"80":{},"81":{},"83":{},"90":{},"107":{},"108":{}},"component":{}}],["implicit",{"_index":934,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["import",{"_index":1853,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["imposs",{"_index":935,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"116":{}},"component":{}}],["improv",{"_index":2795,"title":{},"name":{},"text":{"111":{}},"component":{}}],["inc",{"_index":2197,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["incl",{"_index":2827,"title":{},"name":{},"text":{"113":{}},"component":{}}],["includ",{"_index":509,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"18":{},"23":{},"25":{},"26":{},"41":{},"42":{},"43":{},"59":{},"60":{},"61":{},"77":{},"80":{},"82":{},"83":{},"95":{},"108":{},"111":{},"112":{}},"component":{}}],["incompat",{"_index":945,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["increas",{"_index":998,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{},"101":{}},"component":{}}],["incred",{"_index":92,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["independ",{"_index":568,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["index",{"_index":2,"title":{},"name":{"1":{},"10":{},"20":{},"29":{},"38":{},"46":{},"56":{},"64":{},"74":{},"75":{},"86":{},"102":{}},"text":{"107":{}},"component":{}}],["indic",{"_index":1033,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"27":{},"30":{},"32":{},"44":{},"47":{},"49":{},"62":{},"65":{},"67":{},"84":{},"87":{},"89":{},"107":{}},"component":{}}],["individu",{"_index":2404,"title":{},"name":{},"text":{"96":{},"105":{}},"component":{}}],["ineffici",{"_index":866,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["inexpens",{"_index":2659,"title":{},"name":{},"text":{"106":{}},"component":{}}],["info",{"_index":808,"title":{},"name":{},"text":{"6":{},"15":{},"16":{},"17":{},"19":{},"25":{},"34":{},"35":{},"36":{},"37":{},"42":{},"51":{},"52":{},"54":{},"55":{},"60":{},"69":{},"70":{},"72":{},"73":{},"82":{},"91":{},"92":{},"93":{},"94":{},"107":{},"114":{},"115":{}},"component":{}}],["inform",{"_index":515,"title":{},"name":{},"text":{"4":{},"10":{},"12":{},"13":{},"14":{},"19":{},"23":{},"29":{},"31":{},"32":{},"33":{},"37":{},"41":{},"46":{},"48":{},"49":{},"50":{},"55":{},"59":{},"64":{},"66":{},"67":{},"68":{},"73":{},"76":{},"80":{},"86":{},"88":{},"89":{},"90":{},"94":{},"107":{},"112":{},"114":{}},"component":{}}],["infrastructur",{"_index":2749,"title":{},"name":{},"text":{"108":{}},"component":{}}],["initi",{"_index":2047,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["initialis",{"_index":2043,"title":{},"name":{},"text":{"17":{},"36":{},"51":{},"54":{},"69":{},"72":{},"93":{}},"component":{}}],["initramf",{"_index":2221,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["inotifi",{"_index":471,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["input",{"_index":138,"title":{"11":{},"30":{},"47":{},"65":{},"87":{},"5-3":{},"24-3":{},"81-3":{}},"name":{"11":{},"30":{},"47":{},"65":{},"87":{}},"text":{"2":{},"3":{},"4":{},"5":{},"10":{},"11":{},"17":{},"21":{},"22":{},"23":{},"24":{},"29":{},"30":{},"36":{},"39":{},"40":{},"41":{},"46":{},"47":{},"53":{},"54":{},"57":{},"58":{},"59":{},"64":{},"65":{},"71":{},"72":{},"78":{},"79":{},"80":{},"81":{},"86":{},"87":{},"93":{},"96":{},"101":{},"110":{},"115":{}},"component":{}}],["input.hpp",{"_index":184,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["input_data",{"_index":1015,"title":{},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"44":{},"47":{},"62":{},"65":{},"84":{},"87":{}},"component":{}}],["inputs.rul",{"_index":2102,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["inputtino",{"_index":590,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["insecur",{"_index":1054,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["insert",{"_index":1061,"title":{},"name":{},"text":{"9":{},"11":{},"28":{},"30":{},"45":{},"47":{},"63":{},"65":{},"85":{},"87":{}},"component":{}}],["insertion/delet",{"_index":384,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["insid",{"_index":281,"title":{},"name":{},"text":{"3":{},"5":{},"22":{},"24":{},"40":{},"58":{},"79":{},"81":{},"95":{},"97":{},"101":{},"107":{},"115":{},"116":{}},"component":{}}],["inspect",{"_index":762,"title":{},"name":{},"text":{"6":{},"16":{},"25":{},"35":{},"42":{},"52":{},"60":{},"70":{},"82":{},"92":{}},"component":{}}],["instal",{"_index":440,"title":{"103":{},"6-1":{},"6-5":{},"25-1":{},"25-5":{},"42-1":{},"42-5":{},"60-1":{},"60-5":{},"82-1":{},"82-5":{},"105-14":{}},"name":{"103":{}},"text":{"3":{},"5":{},"6":{},"16":{},"17":{},"18":{},"19":{},"22":{},"24":{},"25":{},"35":{},"36":{},"37":{},"40":{},"42":{},"51":{},"52":{},"53":{},"54":{},"55":{},"58":{},"60":{},"69":{},"70":{},"71":{},"72":{},"73":{},"76":{},"77":{},"79":{},"81":{},"82":{},"92":{},"93":{},"94":{},"95":{},"96":{},"103":{},"104":{},"105":{},"108":{},"110":{},"113":{},"114":{},"116":{},"117":{}},"component":{}}],["installation/error.log",{"_index":2840,"title":{},"name":{},"text":{"114":{}},"component":{}}],["installer_slug",{"_index":2622,"title":{},"name":{},"text":{"105":{}},"component":{}}],["instanc",{"_index":2188,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{},"104":{},"105":{},"116":{}},"component":{}}],["instead",{"_index":411,"title":{},"name":{},"text":{"3":{},"7":{},"11":{},"17":{},"22":{},"26":{},"30":{},"36":{},"40":{},"43":{},"47":{},"54":{},"58":{},"61":{},"65":{},"72":{},"79":{},"83":{},"87":{},"93":{},"96":{},"97":{},"100":{},"105":{},"115":{}},"component":{}}],["instruct",{"_index":652,"title":{"104-1":{}},"name":{},"text":{"6":{},"17":{},"19":{},"25":{},"36":{},"37":{},"42":{},"55":{},"60":{},"73":{},"82":{},"93":{},"94":{},"96":{},"104":{},"105":{},"110":{}},"component":{}}],["int",{"_index":990,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["integr",{"_index":2259,"title":{},"name":{},"text":{"51":{},"69":{},"114":{}},"component":{}}],["intel",{"_index":1854,"title":{"19-5":{},"37-5":{},"94-5":{}},"name":{},"text":{"15":{},"51":{},"69":{},"91":{},"109":{},"112":{}},"component":{}}],["intel/amd",{"_index":1966,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["intellig",{"_index":3,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["intend",{"_index":2532,"title":{},"name":{},"text":{"104":{}},"component":{}}],["interact",{"_index":2285,"title":{},"name":{},"text":{"76":{}},"component":{}}],["interest",{"_index":2760,"title":{},"name":{},"text":{"108":{}},"component":{}}],["interfac",{"_index":183,"title":{"16-1":{},"35-1":{},"52-1":{},"70-1":{},"92-1":{}},"name":{},"text":{"2":{},"7":{},"21":{},"26":{},"39":{},"43":{},"57":{},"61":{},"76":{},"78":{},"83":{},"98":{},"104":{}},"component":{}}],["interfer",{"_index":618,"title":{},"name":{},"text":{"5":{},"6":{},"24":{},"25":{},"42":{},"60":{},"81":{},"82":{}},"component":{}}],["intermedi",{"_index":882,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["intern",{"_index":272,"title":{"3-5":{},"22-5":{},"40-5":{},"58-5":{},"79-5":{},"105-1":{}},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["internet",{"_index":2473,"title":{},"name":{},"text":{"100":{}},"component":{}}],["interrog",{"_index":180,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["interrupt",{"_index":2191,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["introduct",{"_index":961,"title":{"76-1":{}},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"76":{},"83":{}},"component":{}}],["invalid",{"_index":881,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["invalidate_ref_fram",{"_index":1009,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["investig",{"_index":2273,"title":{},"name":{},"text":{"54":{},"72":{},"117":{}},"component":{}}],["involv",{"_index":1055,"title":{},"name":{},"text":{"9":{},"10":{},"28":{},"29":{},"45":{},"46":{},"63":{},"64":{},"85":{},"86":{},"117":{}},"component":{}}],["ioctl",{"_index":389,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["ip",{"_index":1774,"title":{},"name":{},"text":{"14":{},"17":{},"33":{},"36":{},"50":{},"54":{},"68":{},"72":{},"90":{},"93":{},"98":{},"104":{}},"component":{}}],["ipc",{"_index":394,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["ipcmod",{"_index":2251,"title":{},"name":{},"text":{"51":{},"69":{},"76":{},"105":{}},"component":{}}],["ipv4",{"_index":972,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["ipv6",{"_index":973,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["isn’t",{"_index":2450,"title":{},"name":{},"text":{"98":{},"117":{}},"component":{}}],["isol",{"_index":163,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"15":{},"21":{},"22":{},"24":{},"26":{},"39":{},"40":{},"43":{},"53":{},"57":{},"58":{},"61":{},"71":{},"78":{},"79":{},"81":{},"83":{},"91":{},"96":{}},"component":{}}],["issu",{"_index":315,"title":{},"name":{},"text":{"3":{},"6":{},"7":{},"19":{},"22":{},"25":{},"26":{},"37":{},"40":{},"42":{},"43":{},"55":{},"58":{},"60":{},"61":{},"73":{},"76":{},"79":{},"82":{},"83":{},"94":{},"99":{},"106":{},"107":{},"110":{},"114":{},"115":{}},"component":{}}],["itself",{"_index":2747,"title":{},"name":{},"text":{"108":{}},"component":{}}],["it’",{"_index":24,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"12":{},"13":{},"14":{},"17":{},"18":{},"19":{},"20":{},"22":{},"23":{},"24":{},"26":{},"31":{},"32":{},"33":{},"36":{},"37":{},"38":{},"40":{},"41":{},"43":{},"48":{},"49":{},"50":{},"51":{},"54":{},"55":{},"56":{},"58":{},"59":{},"61":{},"66":{},"67":{},"68":{},"69":{},"72":{},"73":{},"74":{},"77":{},"79":{},"80":{},"81":{},"83":{},"88":{},"89":{},"90":{},"93":{},"94":{},"95":{},"96":{},"97":{},"100":{},"101":{},"106":{},"107":{},"109":{},"110":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{}},"component":{}}],["it’ll",{"_index":365,"title":{},"name":{},"text":{"3":{},"5":{},"11":{},"17":{},"19":{},"22":{},"24":{},"30":{},"36":{},"37":{},"40":{},"47":{},"51":{},"54":{},"55":{},"58":{},"65":{},"69":{},"72":{},"73":{},"79":{},"81":{},"87":{},"93":{},"94":{}},"component":{}}],["iv",{"_index":1000,"title":{},"name":{},"text":{"8":{},"12":{},"27":{},"31":{},"44":{},"48":{},"62":{},"66":{},"84":{},"88":{}},"component":{}}],["i’m",{"_index":2867,"title":{},"name":{},"text":{"115":{}},"component":{}}],["j",{"_index":1244,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["jan",{"_index":2098,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["job",{"_index":51,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"51":{},"56":{},"69":{},"74":{}},"component":{}}],["john",{"_index":462,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["johncmcdonough/virtu",{"_index":467,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["join",{"_index":2468,"title":{},"name":{},"text":{"99":{}},"component":{}}],["journey",{"_index":2469,"title":{},"name":{},"text":{"99":{}},"component":{}}],["joypad",{"_index":188,"title":{"15-7":{},"34-7":{},"91-7":{}},"name":{},"text":{"2":{},"3":{},"11":{},"17":{},"21":{},"22":{},"30":{},"36":{},"39":{},"40":{},"47":{},"53":{},"54":{},"57":{},"58":{},"65":{},"71":{},"72":{},"78":{},"79":{},"87":{},"93":{},"104":{}},"component":{}}],["json",{"_index":179,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"51":{},"57":{},"69":{},"78":{}},"component":{}}],["jul",{"_index":2533,"title":{},"name":{},"text":{"104":{},"110":{}},"component":{}}],["jun",{"_index":2723,"title":{},"name":{},"text":{"107":{}},"component":{}}],["k",{"_index":1246,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["katakana",{"_index":1194,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["katakanahiragana",{"_index":1188,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["keep",{"_index":110,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"17":{},"20":{},"21":{},"22":{},"24":{},"25":{},"36":{},"38":{},"40":{},"42":{},"54":{},"56":{},"58":{},"60":{},"72":{},"74":{},"78":{},"79":{},"81":{},"82":{},"93":{}},"component":{}}],["kernel",{"_index":381,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"93":{},"96":{},"104":{},"110":{},"117":{}},"component":{}}],["kernel==\"uhid",{"_index":2109,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["kernel==\"uinput",{"_index":2104,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["key",{"_index":979,"title":{},"name":{},"text":{"8":{},"9":{},"10":{},"11":{},"12":{},"14":{},"27":{},"28":{},"29":{},"30":{},"31":{},"33":{},"44":{},"45":{},"46":{},"47":{},"48":{},"50":{},"62":{},"63":{},"64":{},"65":{},"66":{},"68":{},"84":{},"85":{},"86":{},"87":{},"88":{},"90":{}},"component":{}}],["key.pem",{"_index":1800,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["key_down",{"_index":1130,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["key_up",{"_index":1132,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["keyboard",{"_index":187,"title":{"11-4":{},"30-4":{},"47-4":{},"65-4":{},"87-4":{},"115-3":{}},"name":{},"text":{"2":{},"5":{},"11":{},"17":{},"21":{},"24":{},"30":{},"36":{},"39":{},"47":{},"53":{},"54":{},"57":{},"65":{},"71":{},"72":{},"78":{},"81":{},"87":{},"93":{},"96":{},"101":{},"115":{},"116":{}},"component":{}}],["kick",{"_index":2163,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["kind",{"_index":323,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"79":{},"83":{}},"component":{}}],["kmod",{"_index":2044,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"107":{}},"component":{}}],["know",{"_index":860,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"51":{},"61":{},"69":{},"83":{},"99":{},"100":{},"103":{},"106":{}},"component":{}}],["knowledg",{"_index":2465,"title":{},"name":{},"text":{"99":{}},"component":{}}],["kubernet",{"_index":2529,"title":{"104-1":{},"104-3":{}},"name":{"104":{}},"text":{"104":{}},"component":{}}],["l",{"_index":1248,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"47":{},"51":{},"54":{},"65":{},"69":{},"72":{},"87":{},"93":{}},"component":{}}],["l$home/gst",{"_index":778,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["l$home/gstreamer/usr/local/lib/x86_64",{"_index":753,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["la",{"_index":2095,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"104":{},"107":{},"110":{}},"component":{}}],["label",{"_index":2605,"title":{},"name":{},"text":{"105":{}},"component":{}}],["lack",{"_index":905,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["lag",{"_index":2848,"title":{"115-1":{}},"name":{},"text":{},"component":{}}],["laptop",{"_index":2733,"title":{},"name":{},"text":{"108":{}},"component":{}}],["last",{"_index":895,"title":{},"name":{},"text":{"7":{},"14":{},"17":{},"26":{},"33":{},"36":{},"43":{},"50":{},"54":{},"61":{},"68":{},"72":{},"83":{},"90":{},"93":{},"106":{},"112":{}},"component":{}}],["lastli",{"_index":2492,"title":{},"name":{},"text":{"100":{}},"component":{}}],["latenc",{"_index":59,"title":{},"name":{},"text":{"1":{},"7":{},"20":{},"26":{},"38":{},"43":{},"53":{},"56":{},"61":{},"71":{},"74":{},"83":{},"101":{},"108":{},"116":{}},"component":{}}],["latency=0",{"_index":2702,"title":{},"name":{},"text":{"107":{}},"component":{}}],["later",{"_index":353,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"79":{},"83":{}},"component":{}}],["latest",{"_index":2223,"title":{},"name":{},"text":{"19":{},"37":{},"94":{},"95":{}},"component":{}}],["launch",{"_index":980,"title":{"15-15":{},"18-1":{},"34-15":{},"77-1":{},"91-15":{},"105-11":{},"113-2":{}},"name":{},"text":{"8":{},"12":{},"14":{},"16":{},"18":{},"27":{},"31":{},"33":{},"34":{},"35":{},"44":{},"48":{},"50":{},"52":{},"62":{},"66":{},"68":{},"70":{},"75":{},"76":{},"77":{},"84":{},"88":{},"90":{},"92":{},"97":{},"100":{},"101":{},"105":{},"106":{},"112":{},"113":{},"116":{},"117":{}},"component":{}}],["launcher",{"_index":2592,"title":{},"name":{},"text":{"105":{},"108":{},"111":{}},"component":{}}],["lay",{"_index":927,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["layer",{"_index":1479,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"100":{},"116":{},"117":{}},"component":{}}],["layer=(int)3",{"_index":1911,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["layout",{"_index":911,"title":{"105-1":{}},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["ld_library_path=\"$ld_library_path:$home/gst",{"_index":777,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["ld_library_path=\"$ld_library_path:$home/gstreamer/lib/x86_64",{"_index":751,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["ldflags=\"$ldflag",{"_index":752,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["lead",{"_index":465,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"79":{},"83":{}},"component":{}}],["learn",{"_index":2799,"title":{},"name":{},"text":{"111":{}},"component":{}}],["leav",{"_index":2809,"title":{},"name":{},"text":{"112":{}},"component":{}}],["led",{"_index":968,"title":{"8-8":{},"27-8":{},"44-8":{},"62-8":{},"84-8":{}},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"44":{},"47":{},"62":{},"65":{},"84":{},"87":{}},"component":{}}],["left",{"_index":1166,"title":{},"name":{},"text":{"11":{},"19":{},"30":{},"37":{},"47":{},"55":{},"65":{},"73":{},"87":{},"94":{}},"component":{}}],["left/right",{"_index":1039,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["left_button",{"_index":1406,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["left_stick",{"_index":1402,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["leftalt",{"_index":1182,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["leftbrac",{"_index":1351,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["leftctrl",{"_index":1180,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["leftmeta",{"_index":1275,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["leftshift",{"_index":1178,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["legaci",{"_index":1377,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["len",{"_index":993,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["less",{"_index":2717,"title":{},"name":{},"text":{"107":{}},"component":{}}],["let",{"_index":2461,"title":{},"name":{},"text":{"99":{},"108":{}},"component":{}}],["let’",{"_index":374,"title":{},"name":{},"text":{"3":{},"7":{},"17":{},"22":{},"26":{},"36":{},"40":{},"43":{},"54":{},"58":{},"61":{},"72":{},"79":{},"83":{},"93":{},"95":{},"112":{}},"component":{}}],["level",{"_index":80,"title":{},"name":{},"text":{"1":{},"2":{},"7":{},"10":{},"13":{},"15":{},"20":{},"21":{},"26":{},"29":{},"32":{},"34":{},"38":{},"39":{},"43":{},"46":{},"49":{},"51":{},"53":{},"56":{},"57":{},"61":{},"64":{},"67":{},"69":{},"71":{},"74":{},"78":{},"83":{},"86":{},"89":{},"91":{},"105":{},"116":{}},"component":{}}],["level=(string)2",{"_index":1927,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["le’t",{"_index":1728,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["lib",{"_index":1991,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["lib/firmware/i915",{"_index":2225,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["lib/utils.sh",{"_index":2390,"title":{},"name":{},"text":{"95":{},"105":{}},"component":{}}],["libaom",{"_index":698,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libboost",{"_index":787,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libcairo",{"_index":694,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libcairo2",{"_index":693,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libcap2",{"_index":683,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libcurl",{"_index":177,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{},"105":{}},"component":{}}],["libcurl4",{"_index":795,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libdrm",{"_index":678,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libevdev",{"_index":798,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libgbm",{"_index":794,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libglib2.0",{"_index":689,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libharfbuzz",{"_index":699,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libinput",{"_index":792,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["liblcms2",{"_index":692,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libllvm15",{"_index":671,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libmfx",{"_index":680,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libopenjp2",{"_index":690,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libopu",{"_index":674,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libpango1.0",{"_index":700,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libpci",{"_index":800,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libpuls",{"_index":199,"title":{},"name":{},"text":{"2":{},"5":{},"6":{},"21":{},"24":{},"25":{},"42":{},"60":{},"78":{},"81":{},"82":{}},"component":{}}],["librari",{"_index":167,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"6":{},"7":{},"21":{},"23":{},"24":{},"25":{},"26":{},"39":{},"41":{},"42":{},"43":{},"57":{},"59":{},"60":{},"61":{},"78":{},"80":{},"81":{},"82":{},"83":{}},"component":{}}],["libraries=app,video",{"_index":716,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["library_path=\"$library_path:$home/gst",{"_index":775,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["library_path=\"$library_path:$home/gstreamer/usr/local/lib/x86_64",{"_index":749,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["librsvg2",{"_index":697,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libssl",{"_index":797,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libudev",{"_index":425,"title":{},"name":{},"text":{"3":{},"6":{},"22":{},"25":{},"40":{},"42":{},"58":{},"60":{},"79":{},"82":{}},"component":{}}],["libunwind",{"_index":799,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libunwind8",{"_index":682,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libva",{"_index":679,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libvpl",{"_index":681,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libwayland",{"_index":688,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libwebp7",{"_index":696,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libx11",{"_index":685,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libx265",{"_index":673,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libxdamag",{"_index":687,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libxfix",{"_index":686,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libxkbcommon",{"_index":793,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libzbar",{"_index":677,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["libzx",{"_index":676,"title":{},"name":{},"text":{"6":{},"25":{},"82":{}},"component":{}}],["libzxingcor",{"_index":2227,"title":{},"name":{},"text":{"42":{},"60":{}},"component":{}}],["limit",{"_index":2138,"title":{},"name":{},"text":{"18":{},"77":{},"101":{}},"component":{}}],["line",{"_index":626,"title":{},"name":{},"text":{"5":{},"14":{},"15":{},"16":{},"17":{},"19":{},"24":{},"33":{},"34":{},"35":{},"36":{},"37":{},"50":{},"51":{},"52":{},"54":{},"55":{},"68":{},"69":{},"70":{},"72":{},"73":{},"76":{},"81":{},"90":{},"91":{},"92":{},"93":{},"94":{},"95":{},"97":{},"100":{},"105":{},"106":{},"109":{},"112":{},"115":{}},"component":{}}],["linear",{"_index":489,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["link",{"_index":857,"title":{},"name":{},"text":{"7":{},"17":{},"26":{},"36":{},"43":{},"54":{},"61":{},"72":{},"83":{},"93":{}},"component":{}}],["linux",{"_index":63,"title":{"18-4":{},"77-4":{}},"name":{},"text":{"1":{},"3":{},"6":{},"7":{},"19":{},"20":{},"22":{},"25":{},"26":{},"37":{},"38":{},"40":{},"42":{},"43":{},"56":{},"58":{},"60":{},"61":{},"74":{},"79":{},"82":{},"83":{},"94":{},"105":{},"108":{},"110":{}},"component":{}}],["linux/index.html#runfil",{"_index":2049,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["lion",{"_index":6,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["list",{"_index":516,"title":{},"name":{},"text":{"4":{},"15":{},"16":{},"17":{},"18":{},"23":{},"35":{},"36":{},"41":{},"51":{},"52":{},"54":{},"59":{},"69":{},"70":{},"72":{},"77":{},"80":{},"91":{},"92":{},"93":{},"97":{},"107":{},"111":{},"115":{}},"component":{}}],["listen",{"_index":362,"title":{},"name":{},"text":{"3":{},"6":{},"22":{},"25":{},"40":{},"42":{},"58":{},"60":{},"79":{},"82":{}},"component":{}}],["littl",{"_index":200,"title":{},"name":{},"text":{"2":{},"3":{},"8":{},"11":{},"17":{},"21":{},"22":{},"27":{},"30":{},"36":{},"39":{},"40":{},"44":{},"47":{},"54":{},"57":{},"58":{},"62":{},"65":{},"72":{},"78":{},"79":{},"84":{},"87":{},"93":{},"99":{}},"component":{}}],["live",{"_index":250,"title":{},"name":{},"text":{"2":{},"5":{},"21":{},"24":{},"39":{},"57":{},"78":{},"81":{}},"component":{}}],["live=tru",{"_index":1864,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["lo",{"_index":2608,"title":{},"name":{},"text":{"105":{}},"component":{}}],["load",{"_index":2018,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{},"107":{},"112":{}},"component":{}}],["local",{"_index":788,"title":{"97-1":{}},"name":{},"text":{"6":{},"17":{},"19":{},"25":{},"36":{},"37":{},"42":{},"54":{},"55":{},"60":{},"72":{},"73":{},"82":{},"93":{},"94":{},"96":{},"97":{}},"component":{}}],["local_st",{"_index":2426,"title":{},"name":{},"text":{"97":{},"115":{}},"component":{}}],["local_state/.config",{"_index":2843,"title":{},"name":{},"text":{"114":{}},"component":{}}],["local_state/.config/unity3d/nobrakesgames/human/player.log",{"_index":2844,"title":{},"name":{},"text":{"114":{}},"component":{}}],["local_state/.steam/debian",{"_index":2839,"title":{},"name":{},"text":{"114":{}},"component":{}}],["local_state/steam/logs/bootstrap_log.txt",{"_index":2846,"title":{},"name":{},"text":{"114":{}},"component":{}}],["localhost",{"_index":2091,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["locat",{"_index":1931,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"76":{},"92":{},"97":{},"107":{}},"component":{}}],["location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight",{"_index":1936,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["location=\"https://storage.googleapis.com/gtv",{"_index":1919,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["location=/users/ale/downloads/elevate.mp3",{"_index":1896,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["lock",{"_index":2868,"title":{},"name":{},"text":{"115":{}},"component":{}}],["log",{"_index":789,"title":{"114-4":{},"115-5":{}},"name":{},"text":{"6":{},"15":{},"17":{},"19":{},"25":{},"34":{},"36":{},"37":{},"42":{},"51":{},"54":{},"55":{},"60":{},"69":{},"72":{},"73":{},"82":{},"91":{},"93":{},"94":{},"110":{},"114":{},"115":{}},"component":{}}],["logic",{"_index":170,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["loki",{"_index":99,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["long",{"_index":2396,"title":{},"name":{},"text":{"95":{},"96":{},"101":{}},"component":{}}],["longer",{"_index":2648,"title":{},"name":{},"text":{"105":{},"115":{}},"component":{}}],["look",{"_index":84,"title":{},"name":{},"text":{"1":{},"13":{},"14":{},"19":{},"20":{},"32":{},"33":{},"37":{},"38":{},"49":{},"50":{},"53":{},"55":{},"56":{},"67":{},"68":{},"71":{},"73":{},"74":{},"76":{},"89":{},"90":{},"94":{},"114":{},"116":{}},"component":{}}],["loss",{"_index":2877,"title":{},"name":{},"text":{"116":{}},"component":{}}],["loss_stat",{"_index":1011,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["lost",{"_index":926,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["lot",{"_index":936,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"105":{},"114":{}},"component":{}}],["low",{"_index":58,"title":{},"name":{},"text":{"1":{},"13":{},"20":{},"32":{},"38":{},"49":{},"53":{},"56":{},"67":{},"71":{},"74":{},"89":{},"101":{},"108":{},"116":{}},"component":{}}],["low/high",{"_index":1036,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["lower",{"_index":2124,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["ls",{"_index":2016,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"51":{},"54":{},"55":{},"69":{},"72":{},"73":{},"93":{},"94":{},"104":{},"107":{},"110":{}},"component":{}}],["lshw",{"_index":2700,"title":{},"name":{},"text":{"107":{}},"component":{}}],["lt",{"_index":1379,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"95":{}},"component":{}}],["luckili",{"_index":455,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["lutri",{"_index":2545,"title":{"105":{},"105-3":{},"105-6":{},"105-8":{}},"name":{"105":{}},"text":{"105":{}},"component":{}}],["lutris.sh",{"_index":2552,"title":{"105-17":{}},"name":{},"text":{"105":{}},"component":{}}],["lutris.yml",{"_index":2569,"title":{},"name":{},"text":{"105":{}},"component":{}}],["lutris_arg",{"_index":2642,"title":{},"name":{},"text":{"105":{}},"component":{}}],["lutris_args=(\"lutris:rungame/supertux",{"_index":2610,"title":{},"name":{},"text":{"105":{}},"component":{}}],["lutris_args=(\"lutris:supertux",{"_index":2611,"title":{},"name":{},"text":{"105":{}},"component":{}}],["m",{"_index":1250,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"47":{},"54":{},"65":{},"72":{},"87":{},"93":{}},"component":{}}],["machin",{"_index":2536,"title":{},"name":{},"text":{"104":{},"108":{}},"component":{}}],["machine’",{"_index":2779,"title":{},"name":{},"text":{"110":{}},"component":{}}],["made",{"_index":25,"title":{"116-1":{}},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{},"101":{},"102":{},"108":{},"112":{}},"component":{}}],["main",{"_index":422,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"10":{},"14":{},"17":{},"22":{},"23":{},"24":{},"26":{},"29":{},"33":{},"36":{},"40":{},"41":{},"43":{},"46":{},"50":{},"51":{},"54":{},"58":{},"59":{},"61":{},"64":{},"68":{},"69":{},"72":{},"79":{},"80":{},"81":{},"83":{},"86":{},"90":{},"93":{},"96":{},"115":{}},"component":{}}],["maintain",{"_index":2462,"title":{},"name":{},"text":{"99":{}},"component":{}}],["major",{"_index":2070,"title":{},"name":{},"text":{"17":{},"36":{},"53":{},"54":{},"71":{},"72":{},"93":{}},"component":{}}],["major:minor",{"_index":308,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["major=13",{"_index":348,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["make",{"_index":270,"title":{"3-2":{},"22-2":{},"40-2":{},"58-2":{},"79-2":{}},"name":{},"text":{"5":{},"6":{},"9":{},"15":{},"17":{},"18":{},"19":{},"24":{},"25":{},"28":{},"34":{},"36":{},"37":{},"42":{},"45":{},"51":{},"54":{},"55":{},"60":{},"63":{},"69":{},"72":{},"73":{},"76":{},"77":{},"81":{},"82":{},"85":{},"91":{},"93":{},"94":{},"95":{},"96":{},"97":{},"100":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"110":{},"111":{},"112":{},"114":{},"117":{}},"component":{}}],["manag",{"_index":400,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"22":{},"24":{},"26":{},"40":{},"43":{},"58":{},"61":{},"76":{},"79":{},"81":{},"83":{},"96":{},"104":{},"105":{},"108":{},"110":{},"112":{},"116":{}},"component":{}}],["mangohud",{"_index":2133,"title":{"18-2":{},"77-2":{}},"name":{},"text":{"18":{},"77":{}},"component":{}}],["mani",{"_index":864,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"99":{},"103":{},"105":{},"108":{},"111":{},"112":{},"114":{},"116":{},"117":{}},"component":{}}],["manual",{"_index":1968,"title":{},"name":{},"text":{"17":{},"36":{},"93":{},"98":{},"100":{},"104":{},"109":{},"112":{}},"component":{}}],["manual_build",{"_index":643,"title":{},"name":{"6":{},"25":{},"42":{},"60":{},"82":{}},"text":{},"component":{}}],["map",{"_index":1789,"title":{"15-7":{},"34-7":{},"91-7":{}},"name":{},"text":{"76":{},"97":{},"107":{}},"component":{}}],["mark",{"_index":1776,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["mask",{"_index":1117,"title":{"11-12":{},"30-12":{},"47-12":{},"65-12":{},"87-12":{}},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["match",{"_index":1851,"title":{},"name":{},"text":{"15":{},"91":{},"97":{}},"component":{}}],["matchdriv",{"_index":2769,"title":{},"name":{},"text":{"109":{}},"component":{}}],["matshona",{"_index":8,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["matter",{"_index":370,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["matthew1000/gstream",{"_index":1877,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["matur",{"_index":2411,"title":{},"name":{},"text":{"96":{}},"component":{}}],["mcdonough",{"_index":463,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["mean",{"_index":869,"title":{},"name":{},"text":{"7":{},"11":{},"13":{},"17":{},"19":{},"26":{},"30":{},"32":{},"36":{},"37":{},"43":{},"47":{},"49":{},"54":{},"55":{},"61":{},"65":{},"67":{},"72":{},"73":{},"83":{},"87":{},"89":{},"93":{},"94":{},"96":{},"106":{},"107":{},"113":{},"115":{},"117":{}},"component":{}}],["mechan",{"_index":385,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"22":{},"23":{},"26":{},"40":{},"41":{},"43":{},"58":{},"59":{},"61":{},"79":{},"80":{},"83":{},"96":{},"112":{}},"component":{}}],["media",{"_index":481,"title":{},"name":{},"text":{"4":{},"16":{},"23":{},"35":{},"41":{},"52":{},"59":{},"70":{},"80":{},"92":{}},"component":{}}],["meet",{"_index":2675,"title":{},"name":{},"text":{"106":{},"110":{},"115":{}},"component":{}}],["memori",{"_index":833,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"116":{}},"component":{}}],["mention",{"_index":1778,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{},"115":{}},"component":{}}],["menu",{"_index":2593,"title":{},"name":{},"text":{"105":{},"115":{}},"component":{}}],["mesa",{"_index":871,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["meson",{"_index":663,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["messag",{"_index":227,"title":{"14-3":{},"14-4":{},"14-7":{},"14-8":{},"33-3":{},"33-4":{},"33-7":{},"33-8":{},"50-3":{},"50-4":{},"50-7":{},"50-8":{},"68-3":{},"68-4":{},"68-7":{},"68-8":{},"90-3":{},"90-4":{},"90-7":{},"90-8":{}},"name":{},"text":{"2":{},"3":{},"8":{},"11":{},"14":{},"21":{},"22":{},"27":{},"30":{},"33":{},"39":{},"40":{},"44":{},"47":{},"50":{},"57":{},"58":{},"62":{},"65":{},"68":{},"78":{},"79":{},"84":{},"87":{},"90":{}},"component":{}}],["meta",{"_index":2561,"title":{},"name":{},"text":{"105":{}},"component":{}}],["method",{"_index":136,"title":{},"name":{},"text":{"2":{},"4":{},"21":{},"23":{},"39":{},"41":{},"57":{},"59":{},"78":{},"80":{}},"component":{}}],["mfx_err_unsupport",{"_index":2160,"title":{"19-5":{},"37-5":{},"94-5":{}},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["mfxvideoencode::queri",{"_index":2203,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["mice",{"_index":2410,"title":{},"name":{},"text":{"96":{}},"component":{}}],["micro",{"_index":570,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["middl",{"_index":1167,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["mind",{"_index":414,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{},"101":{},"112":{}},"component":{}}],["minim",{"_index":2387,"title":{},"name":{},"text":{"95":{}},"component":{}}],["minimum",{"_index":2079,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["minor",{"_index":2186,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{},"107":{}},"component":{}}],["minor=0",{"_index":349,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["minu",{"_index":1298,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["minut",{"_index":2829,"title":{},"name":{},"text":{"113":{}},"component":{}}],["misc",{"_index":1419,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["miss",{"_index":2042,"title":{"115-1":{},"115-4":{}},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"110":{},"117":{}},"component":{}}],["mix",{"_index":487,"title":{},"name":{},"text":{"4":{},"5":{},"16":{},"23":{},"24":{},"35":{},"41":{},"52":{},"59":{},"70":{},"80":{},"81":{},"92":{}},"component":{}}],["mkdir",{"_index":708,"title":{"115-2":{}},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["mknod",{"_index":312,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"58":{},"72":{},"76":{},"79":{},"93":{},"105":{}},"component":{}}],["mobil",{"_index":2751,"title":{},"name":{},"text":{"108":{}},"component":{}}],["mock",{"_index":254,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["mode",{"_index":1439,"title":{"116-2":{},"116-3":{}},"name":{},"text":{"12":{},"31":{},"48":{},"66":{},"88":{},"97":{},"101":{},"105":{},"108":{},"112":{},"115":{},"116":{}},"component":{}}],["mode=\"0660",{"_index":2106,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["model",{"_index":851,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"107":{}},"component":{}}],["modern",{"_index":2758,"title":{},"name":{},"text":{"108":{}},"component":{}}],["modeset",{"_index":2040,"title":{"115-6":{}},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"115":{}},"component":{}}],["modeset=1",{"_index":2019,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["modifi",{"_index":76,"title":{},"name":{},"text":{"1":{},"7":{},"11":{},"19":{},"20":{},"26":{},"30":{},"37":{},"38":{},"43":{},"47":{},"51":{},"55":{},"56":{},"61":{},"65":{},"69":{},"73":{},"74":{},"83":{},"87":{},"94":{},"95":{},"105":{}},"component":{}}],["modul",{"_index":117,"title":{"2-1":{},"21-1":{},"39-1":{},"57-1":{},"78-1":{}},"name":{},"text":{"2":{},"17":{},"19":{},"21":{},"36":{},"37":{},"39":{},"54":{},"55":{},"57":{},"72":{},"73":{},"78":{},"93":{},"94":{},"96":{},"104":{},"110":{},"117":{}},"component":{}}],["modulepath",{"_index":2770,"title":{},"name":{},"text":{"109":{}},"component":{}}],["monitor",{"_index":45,"title":{"106":{},"106-1":{},"110-3":{},"110-5":{},"110-6":{}},"name":{"106":{}},"text":{"1":{},"3":{},"7":{},"20":{},"22":{},"26":{},"38":{},"40":{},"43":{},"56":{},"58":{},"61":{},"74":{},"79":{},"83":{},"106":{},"110":{},"115":{}},"component":{}}],["monitor0",{"_index":2681,"title":{},"name":{},"text":{"106":{}},"component":{}}],["monoton",{"_index":997,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["moonlight",{"_index":14,"title":{"10":{},"29":{},"46":{},"64":{},"86":{},"17-2":{},"19-1":{},"36-2":{},"37-1":{},"54-2":{},"55-1":{},"72-2":{},"73-1":{},"93-2":{},"94-1":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"80":{},"81":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"93":{},"94":{},"96":{},"98":{},"104":{},"105":{},"108":{},"112":{},"115":{}},"component":{}}],["more",{"_index":189,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"11":{},"13":{},"14":{},"15":{},"16":{},"17":{},"19":{},"21":{},"22":{},"24":{},"26":{},"30":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"39":{},"40":{},"43":{},"47":{},"49":{},"50":{},"51":{},"52":{},"54":{},"55":{},"57":{},"58":{},"61":{},"65":{},"67":{},"68":{},"69":{},"70":{},"72":{},"73":{},"76":{},"78":{},"79":{},"81":{},"83":{},"87":{},"89":{},"90":{},"91":{},"92":{},"93":{},"94":{},"96":{},"97":{},"101":{},"106":{},"107":{},"108":{},"109":{},"111":{},"112":{},"114":{},"115":{}},"component":{}}],["mostli",{"_index":71,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{},"97":{},"105":{}},"component":{}}],["motion",{"_index":966,"title":{"8-7":{},"11-15":{},"27-7":{},"30-15":{},"44-7":{},"47-15":{},"62-7":{},"65-15":{},"84-7":{},"87-15":{}},"name":{},"text":{"8":{},"17":{},"27":{},"36":{},"44":{},"54":{},"62":{},"72":{},"84":{},"93":{}},"component":{}}],["motion_ev",{"_index":1029,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["mount",{"_index":266,"title":{"3-1":{},"22-1":{},"40-1":{},"58-1":{},"76-6":{},"79-1":{}},"name":{},"text":{"3":{},"5":{},"15":{},"17":{},"22":{},"24":{},"34":{},"36":{},"40":{},"51":{},"54":{},"58":{},"69":{},"72":{},"76":{},"79":{},"81":{},"91":{},"93":{},"105":{},"106":{}},"component":{}}],["mous",{"_index":186,"title":{"11-1":{},"11-2":{},"11-3":{},"11-5":{},"11-6":{},"30-1":{},"30-2":{},"30-3":{},"30-5":{},"30-6":{},"47-1":{},"47-2":{},"47-3":{},"47-5":{},"47-6":{},"65-1":{},"65-2":{},"65-3":{},"65-5":{},"65-6":{},"87-1":{},"87-2":{},"87-3":{},"87-5":{},"87-6":{},"115-3":{}},"name":{},"text":{"2":{},"5":{},"11":{},"17":{},"21":{},"24":{},"30":{},"36":{},"39":{},"47":{},"53":{},"54":{},"57":{},"65":{},"71":{},"72":{},"78":{},"81":{},"87":{},"93":{},"101":{},"104":{},"110":{},"115":{},"116":{}},"component":{}}],["mouse_button_down",{"_index":1126,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["mouse_button_up",{"_index":1128,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["mouse_hscrol",{"_index":1136,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["mouse_move_ab",{"_index":1124,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["mouse_move_rel",{"_index":1122,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["mouse_scrol",{"_index":1134,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["move",{"_index":604,"title":{"11-1":{},"11-2":{},"30-1":{},"30-2":{},"47-1":{},"47-2":{},"65-1":{},"65-2":{},"87-1":{},"87-2":{}},"name":{},"text":{"5":{},"15":{},"17":{},"24":{},"36":{},"54":{},"72":{},"81":{},"91":{},"93":{},"105":{},"115":{}},"component":{}}],["movement",{"_index":1157,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["mp4",{"_index":1915,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["mpegaudioversion=(int)1",{"_index":1910,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["mpegversion=(int)1",{"_index":1909,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["mpegversion=(int)4",{"_index":1924,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["much",{"_index":2388,"title":{},"name":{},"text":{"95":{},"101":{},"106":{},"111":{},"116":{}},"component":{}}],["multi",{"_index":1115,"title":{"11-11":{},"30-11":{},"47-11":{},"65-11":{},"87-11":{}},"name":{},"text":{},"component":{}}],["multilib",{"_index":2831,"title":{},"name":{},"text":{"114":{}},"component":{}}],["multipl",{"_index":18,"title":{"15-3":{},"15-12":{},"34-3":{},"34-12":{},"51-8":{},"69-8":{},"91-3":{},"91-12":{}},"name":{},"text":{"1":{},"2":{},"5":{},"7":{},"15":{},"19":{},"20":{},"21":{},"24":{},"26":{},"34":{},"37":{},"38":{},"39":{},"43":{},"51":{},"53":{},"55":{},"56":{},"57":{},"61":{},"69":{},"71":{},"73":{},"74":{},"76":{},"78":{},"81":{},"83":{},"91":{},"94":{},"97":{},"104":{},"105":{},"108":{},"112":{}},"component":{}}],["music",{"_index":1889,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["myapp",{"_index":2392,"title":{},"name":{},"text":{"95":{}},"component":{}}],["myapp.yml",{"_index":2399,"title":{},"name":{},"text":{"95":{}},"component":{}}],["myself",{"_index":2471,"title":{"100-2":{}},"name":{},"text":{},"component":{}}],["n",{"_index":1252,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"47":{},"54":{},"65":{},"72":{},"87":{},"93":{}},"component":{}}],["n3d",{"_index":2062,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["n3d=`echo",{"_index":2055,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["n=`expr",{"_index":2061,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["nal",{"_index":1448,"title":{"13-7":{},"32-7":{},"49-7":{},"67-7":{},"89-7":{}},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["nal_ref_idc",{"_index":1449,"title":{"13-8":{},"32-8":{},"49-8":{},"67-8":{},"89-8":{}},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["nal_unit_typ",{"_index":1450,"title":{"13-9":{},"32-9":{},"49-9":{},"67-9":{},"89-9":{}},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["nalu",{"_index":1484,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["name",{"_index":558,"title":{},"name":{},"text":{"4":{},"11":{},"15":{},"17":{},"18":{},"19":{},"23":{},"30":{},"34":{},"36":{},"37":{},"41":{},"47":{},"51":{},"54":{},"55":{},"59":{},"65":{},"69":{},"72":{},"73":{},"76":{},"77":{},"80":{},"87":{},"91":{},"93":{},"94":{},"101":{},"105":{},"112":{},"113":{}},"component":{}}],["name=comp",{"_index":1950,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["name=demux",{"_index":1921,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["name=t",{"_index":1898,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["namespac",{"_index":416,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["nasm",{"_index":675,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["nat",{"_index":1431,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{}},"component":{}}],["nathanle1406",{"_index":2148,"title":{},"name":{},"text":{"18":{},"34":{},"77":{}},"component":{}}],["nativ",{"_index":2136,"title":{"18-4":{},"77-4":{}},"name":{},"text":{"105":{}},"component":{}}],["natur",{"_index":146,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{},"105":{},"117":{}},"component":{}}],["ne",{"_index":442,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["near",{"_index":496,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["necessari",{"_index":1430,"title":{},"name":{},"text":{"12":{},"13":{},"19":{},"31":{},"32":{},"37":{},"48":{},"49":{},"55":{},"66":{},"67":{},"73":{},"88":{},"89":{},"94":{},"95":{},"96":{},"101":{}},"component":{}}],["necessarili",{"_index":2507,"title":{},"name":{},"text":{"101":{},"106":{},"108":{}},"component":{}}],["need",{"_index":44,"title":{},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"6":{},"7":{},"9":{},"10":{},"14":{},"15":{},"17":{},"19":{},"20":{},"22":{},"23":{},"24":{},"25":{},"26":{},"28":{},"29":{},"33":{},"34":{},"36":{},"37":{},"38":{},"40":{},"41":{},"42":{},"43":{},"45":{},"46":{},"50":{},"51":{},"53":{},"54":{},"55":{},"56":{},"58":{},"59":{},"60":{},"61":{},"63":{},"64":{},"68":{},"69":{},"71":{},"72":{},"73":{},"74":{},"76":{},"79":{},"80":{},"81":{},"82":{},"83":{},"85":{},"86":{},"90":{},"91":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"104":{},"105":{},"106":{},"107":{},"108":{},"110":{},"112":{},"113":{},"115":{}},"component":{}}],["negoti",{"_index":888,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["net_admin",{"_index":2337,"title":{},"name":{},"text":{"76":{},"105":{}},"component":{}}],["net_raw",{"_index":2336,"title":{},"name":{},"text":{"76":{},"105":{}},"component":{}}],["netlink",{"_index":393,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["netlink_kobject_uev",{"_index":432,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["network",{"_index":415,"title":{},"name":{},"text":{"3":{},"9":{},"13":{},"22":{},"28":{},"32":{},"40":{},"45":{},"49":{},"58":{},"63":{},"67":{},"79":{},"85":{},"89":{},"101":{},"117":{}},"component":{}}],["network:host",{"_index":2078,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["network=host",{"_index":418,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"93":{}},"component":{}}],["network_mod",{"_index":1985,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"101":{},"115":{}},"component":{}}],["new",{"_index":140,"title":{},"name":{},"text":{"2":{},"3":{},"5":{},"7":{},"8":{},"11":{},"14":{},"15":{},"21":{},"22":{},"24":{},"26":{},"27":{},"30":{},"33":{},"34":{},"39":{},"40":{},"43":{},"44":{},"47":{},"50":{},"51":{},"53":{},"57":{},"58":{},"61":{},"62":{},"65":{},"68":{},"69":{},"71":{},"78":{},"79":{},"81":{},"83":{},"84":{},"87":{},"90":{},"91":{},"95":{},"97":{},"106":{},"108":{},"109":{},"117":{}},"component":{}}],["newli",{"_index":2121,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"100":{},"101":{}},"component":{}}],["newlin",{"_index":1757,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["next",{"_index":908,"title":{"98-1":{},"104-7":{}},"name":{},"text":{"7":{},"8":{},"9":{},"10":{},"11":{},"14":{},"26":{},"27":{},"28":{},"29":{},"30":{},"33":{},"43":{},"44":{},"45":{},"46":{},"47":{},"50":{},"61":{},"62":{},"63":{},"64":{},"65":{},"68":{},"76":{},"83":{},"84":{},"85":{},"86":{},"87":{},"90":{},"103":{},"106":{},"113":{}},"component":{}}],["ninja",{"_index":661,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["nintendo",{"_index":1369,"title":{},"name":{},"text":{"11":{},"17":{},"30":{},"36":{},"47":{},"54":{},"65":{},"72":{},"87":{},"93":{},"108":{}},"component":{}}],["node",{"_index":1791,"title":{"15-13":{},"34-14":{},"51-10":{},"69-10":{},"91-13":{}},"name":{},"text":{"15":{},"17":{},"34":{},"36":{},"51":{},"54":{},"69":{},"72":{},"91":{},"93":{},"104":{}},"component":{}}],["nomenclatur",{"_index":537,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["non",{"_index":488,"title":{},"name":{},"text":{"4":{},"13":{},"23":{},"32":{},"41":{},"49":{},"59":{},"67":{},"80":{},"89":{},"101":{},"112":{}},"component":{}}],["none",{"_index":917,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["normal",{"_index":298,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{},"96":{},"106":{},"117":{}},"component":{}}],["notabl",{"_index":2423,"title":{},"name":{},"text":{"96":{},"112":{}},"component":{}}],["note",{"_index":1452,"title":{},"name":{},"text":{"13":{},"19":{},"32":{},"37":{},"49":{},"67":{},"89":{},"94":{},"105":{}},"component":{}}],["noth",{"_index":2265,"title":{},"name":{},"text":{"53":{},"71":{},"106":{}},"component":{}}],["notif",{"_index":387,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["nouveau",{"_index":2699,"title":{"107-4":{}},"name":{},"text":{"107":{}},"component":{}}],["now",{"_index":758,"title":{},"name":{},"text":{"6":{},"7":{},"9":{},"13":{},"17":{},"25":{},"26":{},"28":{},"32":{},"36":{},"42":{},"43":{},"45":{},"49":{},"54":{},"60":{},"61":{},"63":{},"67":{},"72":{},"82":{},"83":{},"85":{},"89":{},"93":{},"97":{},"102":{},"105":{},"106":{},"108":{},"112":{},"113":{},"117":{}},"component":{}}],["null",{"_index":2638,"title":{},"name":{},"text":{"105":{}},"component":{}}],["number",{"_index":890,"title":{},"name":{},"text":{"7":{},"8":{},"11":{},"12":{},"14":{},"17":{},"26":{},"27":{},"30":{},"31":{},"33":{},"36":{},"43":{},"44":{},"47":{},"48":{},"50":{},"54":{},"61":{},"62":{},"65":{},"66":{},"68":{},"72":{},"83":{},"84":{},"87":{},"88":{},"90":{},"93":{}},"component":{}}],["numlock",{"_index":1328,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["numpad",{"_index":1281,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["nv",{"_index":1447,"title":{"13-4":{},"32-4":{},"49-4":{},"67-4":{},"89-4":{}},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["nv_version=$(cat",{"_index":2007,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["nvcodec",{"_index":760,"title":{},"name":{},"text":{"6":{},"15":{},"25":{},"42":{},"51":{},"60":{},"69":{},"82":{},"91":{}},"component":{}}],["nvdev",{"_index":2056,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["nvdevs=`lspci",{"_index":2054,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["nvga",{"_index":2063,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["nvga=`echo",{"_index":2058,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["nvidia",{"_index":636,"title":{"107":{},"6-1":{},"25-1":{},"42-1":{},"60-1":{},"82-1":{},"107-2":{},"107-4":{},"110-9":{}},"name":{"107":{}},"text":{"6":{},"15":{},"17":{},"19":{},"25":{},"34":{},"36":{},"37":{},"42":{},"51":{},"54":{},"55":{},"60":{},"69":{},"72":{},"73":{},"82":{},"91":{},"93":{},"94":{},"96":{},"107":{},"108":{},"109":{},"110":{},"112":{}},"component":{}}],["nvidia/xorg",{"_index":2771,"title":{},"name":{},"text":{"109":{}},"component":{}}],["nvidia_driver_capabilities=al",{"_index":1995,"title":{},"name":{},"text":{"17":{},"93":{}},"component":{}}],["nvidia_driver_volume_nam",{"_index":1818,"title":{},"name":{},"text":{"15":{},"19":{},"34":{},"37":{},"51":{},"55":{},"69":{},"73":{},"91":{},"94":{}},"component":{}}],["nvidia_driver_volume_name=nvidia",{"_index":2031,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["nvidia_visible_devices=al",{"_index":1996,"title":{},"name":{},"text":{"17":{},"93":{}},"component":{}}],["nvidiagraphicsdriv",{"_index":650,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["nvidia’",{"_index":2742,"title":{},"name":{},"text":{"108":{}},"component":{}}],["nvrm",{"_index":2705,"title":{},"name":{},"text":{"107":{}},"component":{}}],["o",{"_index":1254,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["object",{"_index":544,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["objects/vari",{"_index":132,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["obtain",{"_index":1084,"title":{"106-4":{}},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["obvious",{"_index":468,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["occur",{"_index":1732,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["offici",{"_index":538,"title":{},"name":{},"text":{"4":{},"6":{},"7":{},"23":{},"25":{},"26":{},"41":{},"42":{},"43":{},"59":{},"60":{},"61":{},"76":{},"80":{},"82":{},"83":{},"95":{},"107":{}},"component":{}}],["ogg/vorbi",{"_index":483,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["ok",{"_index":1780,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["older",{"_index":943,"title":{"107-2":{}},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"107":{},"110":{}},"component":{}}],["on",{"_index":356,"title":{},"name":{},"text":{"3":{},"4":{},"6":{},"7":{},"8":{},"11":{},"12":{},"13":{},"14":{},"15":{},"17":{},"18":{},"22":{},"23":{},"25":{},"26":{},"27":{},"30":{},"31":{},"32":{},"33":{},"34":{},"36":{},"40":{},"41":{},"42":{},"43":{},"44":{},"47":{},"48":{},"49":{},"50":{},"51":{},"54":{},"58":{},"59":{},"60":{},"61":{},"62":{},"65":{},"66":{},"67":{},"68":{},"69":{},"72":{},"77":{},"79":{},"80":{},"82":{},"83":{},"84":{},"87":{},"88":{},"89":{},"90":{},"91":{},"93":{},"95":{},"97":{},"100":{},"101":{},"104":{},"106":{},"107":{},"108":{},"109":{},"112":{},"115":{},"116":{}},"component":{}}],["onc",{"_index":948,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"51":{},"61":{},"69":{},"75":{},"76":{},"83":{},"95":{},"98":{},"101":{},"112":{}},"component":{}}],["onlin",{"_index":2860,"title":{},"name":{},"text":{"115":{}},"component":{}}],["open",{"_index":10,"title":{},"name":{},"text":{"1":{},"6":{},"12":{},"13":{},"17":{},"20":{},"25":{},"31":{},"32":{},"36":{},"38":{},"42":{},"48":{},"49":{},"53":{},"56":{},"60":{},"66":{},"67":{},"71":{},"74":{},"82":{},"88":{},"89":{},"93":{},"98":{},"100":{},"101":{},"104":{},"105":{},"107":{},"108":{},"109":{},"115":{},"117":{}},"component":{}}],["opengl",{"_index":859,"title":{"18-4":{},"77-4":{}},"name":{},"text":{"7":{},"18":{},"26":{},"43":{},"61":{},"77":{},"83":{}},"component":{}}],["openssl",{"_index":796,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["oper",{"_index":915,"title":{},"name":{},"text":{"7":{},"12":{},"13":{},"26":{},"31":{},"32":{},"43":{},"48":{},"49":{},"61":{},"66":{},"67":{},"83":{},"88":{},"89":{}},"component":{}}],["opt/gow",{"_index":2573,"title":{},"name":{},"text":{"105":{}},"component":{}}],["opt/gow/bash",{"_index":2389,"title":{},"name":{},"text":{"95":{},"105":{}},"component":{}}],["opt/gow/startup.d",{"_index":2575,"title":{},"name":{},"text":{"105":{}},"component":{}}],["opt/gow/startup.d/20",{"_index":2595,"title":{},"name":{},"text":{"105":{}},"component":{}}],["opt/gow/startup.sh",{"_index":2570,"title":{},"name":{},"text":{"105":{}},"component":{}}],["opt/gow/supertux",{"_index":2643,"title":{},"name":{},"text":{"105":{}},"component":{}}],["optim",{"_index":1155,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["optimis",{"_index":620,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["option",{"_index":264,"title":{"14-5":{},"33-5":{},"50-5":{},"68-5":{},"90-5":{},"109-1":{}},"name":{},"text":{"2":{},"7":{},"11":{},"14":{},"15":{},"17":{},"18":{},"21":{},"26":{},"30":{},"33":{},"34":{},"36":{},"39":{},"43":{},"47":{},"50":{},"51":{},"54":{},"57":{},"61":{},"65":{},"68":{},"69":{},"72":{},"77":{},"78":{},"83":{},"87":{},"90":{},"91":{},"93":{},"95":{},"100":{},"106":{},"109":{},"112":{},"113":{},"114":{},"115":{},"116":{}},"component":{}}],["options+=\"static_node=uinput",{"_index":2108,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["opu",{"_index":1106,"title":{"12-4":{},"31-4":{},"48-4":{},"66-4":{},"88-4":{}},"name":{"12":{},"31":{},"48":{},"66":{},"88":{}},"text":{"10":{},"12":{},"29":{},"31":{},"46":{},"48":{},"64":{},"66":{},"86":{},"88":{}},"component":{}}],["order",{"_index":21,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"15":{},"16":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"30":{},"31":{},"32":{},"34":{},"35":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"47":{},"48":{},"49":{},"51":{},"52":{},"53":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"65":{},"66":{},"67":{},"69":{},"70":{},"71":{},"73":{},"74":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"87":{},"88":{},"89":{},"91":{},"92":{},"94":{},"96":{},"97":{},"102":{},"104":{},"107":{},"112":{},"114":{},"115":{}},"component":{}}],["org.opencontainers.image.sourc",{"_index":2606,"title":{},"name":{},"text":{"105":{}},"component":{}}],["origin",{"_index":408,"title":{},"name":{},"text":{"3":{},"4":{},"8":{},"9":{},"22":{},"23":{},"27":{},"28":{},"40":{},"41":{},"44":{},"45":{},"58":{},"59":{},"62":{},"63":{},"79":{},"80":{},"84":{},"85":{},"108":{},"112":{}},"component":{}}],["os",{"_index":2413,"title":{},"name":{},"text":{"96":{},"108":{},"112":{},"117":{}},"component":{}}],["osx",{"_index":1885,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["other",{"_index":2466,"title":{},"name":{},"text":{"99":{}},"component":{}}],["otherwis",{"_index":1093,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["ourselv",{"_index":2888,"title":{},"name":{},"text":{"117":{}},"component":{}}],["out",{"_index":89,"title":{},"name":{},"text":{"1":{},"3":{},"7":{},"16":{},"17":{},"18":{},"19":{},"20":{},"22":{},"26":{},"35":{},"36":{},"37":{},"38":{},"40":{},"43":{},"52":{},"54":{},"55":{},"56":{},"58":{},"61":{},"70":{},"72":{},"73":{},"74":{},"77":{},"79":{},"83":{},"92":{},"93":{},"94":{},"97":{},"98":{},"99":{},"100":{},"101":{},"103":{},"104":{},"110":{},"114":{},"115":{},"116":{}},"component":{}}],["outlin",{"_index":2215,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["output",{"_index":141,"title":{},"name":{},"text":{"2":{},"4":{},"7":{},"19":{},"21":{},"23":{},"26":{},"37":{},"39":{},"41":{},"43":{},"57":{},"59":{},"61":{},"75":{},"78":{},"80":{},"83":{},"94":{},"112":{}},"component":{}}],["outputclass",{"_index":2766,"title":{},"name":{},"text":{"109":{}},"component":{}}],["outsid",{"_index":313,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"79":{},"83":{},"97":{}},"component":{}}],["over",{"_index":295,"title":{},"name":{},"text":{"3":{},"7":{},"8":{},"9":{},"10":{},"12":{},"14":{},"22":{},"26":{},"27":{},"28":{},"29":{},"31":{},"33":{},"40":{},"43":{},"44":{},"45":{},"46":{},"48":{},"50":{},"51":{},"58":{},"61":{},"62":{},"63":{},"64":{},"66":{},"68":{},"69":{},"79":{},"83":{},"84":{},"85":{},"86":{},"88":{},"90":{},"96":{},"100":{},"104":{},"108":{}},"component":{}}],["overal",{"_index":2664,"title":{},"name":{},"text":{"106":{}},"component":{}}],["overhead",{"_index":1473,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["overlap",{"_index":284,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"22":{},"23":{},"24":{},"40":{},"41":{},"58":{},"59":{},"79":{},"80":{},"81":{}},"component":{}}],["overlay",{"_index":1944,"title":{},"name":{},"text":{"16":{},"18":{},"35":{},"52":{},"70":{},"77":{},"92":{}},"component":{}}],["overrid",{"_index":1788,"title":{"15-7":{},"34-7":{},"91-7":{}},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{},"112":{}},"component":{}}],["overridden",{"_index":629,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["overview",{"_index":476,"title":{"53":{},"71":{},"96":{},"108":{},"4-1":{},"8-1":{},"9-1":{},"10-1":{},"12-1":{},"13-1":{},"14-1":{},"23-1":{},"27-1":{},"28-1":{},"29-1":{},"31-1":{},"32-1":{},"33-1":{},"41-1":{},"44-1":{},"45-1":{},"46-1":{},"48-1":{},"49-1":{},"50-1":{},"59-1":{},"62-1":{},"63-1":{},"64-1":{},"66-1":{},"67-1":{},"68-1":{},"75-1":{},"80-1":{},"84-1":{},"85-1":{},"86-1":{},"88-1":{},"89-1":{},"90-1":{}},"name":{"53":{},"71":{},"96":{},"108":{}},"text":{"7":{},"10":{},"26":{},"29":{},"43":{},"46":{},"61":{},"64":{},"83":{},"86":{},"96":{},"103":{},"104":{},"108":{}},"component":{}}],["overwrit",{"_index":2571,"title":{},"name":{},"text":{"105":{}},"component":{}}],["own",{"_index":2428,"title":{},"name":{},"text":{"97":{},"115":{}},"component":{}}],["p",{"_index":709,"title":{},"name":{},"text":{"6":{},"11":{},"13":{},"25":{},"30":{},"32":{},"42":{},"47":{},"49":{},"60":{},"65":{},"67":{},"82":{},"87":{},"89":{},"112":{}},"component":{}}],["packag",{"_index":1428,"title":{},"name":{},"text":{"12":{},"13":{},"14":{},"31":{},"32":{},"33":{},"48":{},"49":{},"50":{},"66":{},"67":{},"68":{},"88":{},"89":{},"90":{},"95":{},"103":{},"108":{}},"component":{}}],["packet",{"_index":217,"title":{"8-2":{},"12-3":{},"13-3":{},"27-2":{},"31-3":{},"32-3":{},"44-2":{},"48-3":{},"49-3":{},"62-2":{},"66-3":{},"67-3":{},"84-2":{},"88-3":{},"89-3":{}},"name":{},"text":{"2":{},"3":{},"4":{},"8":{},"11":{},"12":{},"13":{},"14":{},"21":{},"22":{},"23":{},"27":{},"30":{},"31":{},"32":{},"33":{},"39":{},"40":{},"41":{},"44":{},"47":{},"48":{},"49":{},"50":{},"57":{},"58":{},"59":{},"62":{},"65":{},"66":{},"67":{},"68":{},"78":{},"79":{},"80":{},"84":{},"87":{},"88":{},"89":{},"90":{}},"component":{}}],["packets",{"_index":1454,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["packets/request",{"_index":255,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["pad",{"_index":2116,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["paddl",{"_index":1413,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["page",{"_index":1870,"title":{},"name":{},"text":{"15":{},"17":{},"18":{},"19":{},"36":{},"37":{},"51":{},"54":{},"55":{},"69":{},"72":{},"73":{},"77":{},"91":{},"93":{},"94":{},"104":{},"113":{},"116":{}},"component":{}}],["pagedown",{"_index":1201,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["pageup",{"_index":1199,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["pair",{"_index":1050,"title":{"9":{},"28":{},"45":{},"63":{},"85":{},"17-2":{},"36-2":{},"54-2":{},"72-2":{},"93-2":{}},"name":{"9":{},"28":{},"45":{},"63":{},"85":{}},"text":{"9":{},"10":{},"15":{},"17":{},"28":{},"29":{},"34":{},"36":{},"45":{},"46":{},"51":{},"54":{},"63":{},"64":{},"69":{},"72":{},"85":{},"86":{},"91":{},"93":{},"98":{}},"component":{}}],["paired_cli",{"_index":1839,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["pairingsecret",{"_index":1077,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["paradigm",{"_index":135,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["parallel",{"_index":145,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["param",{"_index":1469,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["paramet",{"_index":1432,"title":{},"name":{},"text":{"12":{},"13":{},"17":{},"31":{},"32":{},"36":{},"48":{},"49":{},"54":{},"66":{},"67":{},"72":{},"88":{},"89":{},"93":{}},"component":{}}],["params=21101",{"_index":1767,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["pariti",{"_index":1427,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{}},"component":{}}],["pars",{"_index":236,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"50":{},"57":{},"68":{},"78":{},"90":{}},"component":{}}],["parser",{"_index":228,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["parser.hpp",{"_index":229,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"50":{},"57":{},"68":{},"78":{},"90":{}},"component":{}}],["part",{"_index":159,"title":{},"name":{},"text":{"2":{},"7":{},"14":{},"21":{},"26":{},"33":{},"39":{},"43":{},"50":{},"51":{},"57":{},"61":{},"68":{},"69":{},"78":{},"83":{},"90":{},"114":{}},"component":{}}],["parti",{"_index":2511,"title":{},"name":{},"text":{"101":{}},"component":{}}],["particularli",{"_index":2376,"title":{},"name":{},"text":{"95":{},"117":{}},"component":{}}],["pass",{"_index":351,"title":{},"name":{},"text":{"3":{},"14":{},"19":{},"22":{},"33":{},"37":{},"40":{},"50":{},"55":{},"58":{},"68":{},"73":{},"79":{},"90":{},"94":{},"100":{},"101":{},"104":{},"105":{},"107":{},"112":{}},"component":{}}],["passthrough",{"_index":2538,"title":{},"name":{},"text":{"104":{}},"component":{}}],["password",{"_index":1062,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{},"98":{},"104":{}},"component":{}}],["past",{"_index":1858,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["patch",{"_index":2710,"title":{},"name":{},"text":{"107":{}},"component":{}}],["path",{"_index":1797,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"76":{},"91":{},"105":{},"107":{}},"component":{}}],["path/to/edid.txt:/home/retro/edid.txt:ro",{"_index":2693,"title":{},"name":{},"text":{"106":{}},"component":{}}],["path/to/rom",{"_index":2331,"title":{},"name":{},"text":{"76":{}},"component":{}}],["path/to/roms:/rom",{"_index":2330,"title":{},"name":{},"text":{"76":{}},"component":{}}],["path/to/xorg",{"_index":2694,"title":{},"name":{},"text":{"106":{},"109":{}},"component":{}}],["path=\"$home/gstreamer/usr/local/bin:$path",{"_index":748,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["path=/tmp/pipe.sock",{"_index":1900,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["patient",{"_index":956,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["pattern=bal",{"_index":1862,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["paus",{"_index":1184,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["payload",{"_index":439,"title":{"8-3":{},"14-6":{},"27-3":{},"33-6":{},"44-3":{},"50-6":{},"62-3":{},"68-6":{},"84-3":{},"90-6":{}},"name":{},"text":{"3":{},"4":{},"8":{},"12":{},"13":{},"14":{},"22":{},"23":{},"27":{},"31":{},"32":{},"33":{},"40":{},"41":{},"44":{},"48":{},"49":{},"50":{},"58":{},"59":{},"62":{},"66":{},"67":{},"68":{},"79":{},"80":{},"84":{},"88":{},"89":{},"90":{}},"component":{}}],["pci",{"_index":2537,"title":{},"name":{},"text":{"104":{}},"component":{}}],["pcsx2",{"_index":2342,"title":{},"name":{},"text":{"76":{}},"component":{}}],["peculiar",{"_index":2566,"title":{},"name":{},"text":{"105":{}},"component":{}}],["peek",{"_index":2796,"title":{},"name":{},"text":{"111":{}},"component":{}}],["peg",{"_index":235,"title":{},"name":{},"text":{"2":{},"14":{},"21":{},"33":{},"39":{},"50":{},"57":{},"68":{},"78":{},"90":{}},"component":{}}],["pegasu",{"_index":2275,"title":{"76":{}},"name":{"76":{}},"text":{"75":{},"76":{}},"component":{}}],["pegasus/.config/pegasu",{"_index":2359,"title":{},"name":{},"text":{"76":{}},"component":{}}],["peglib",{"_index":232,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["pen",{"_index":1114,"title":{"11-8":{},"30-8":{},"47-8":{},"65-8":{},"87-8":{}},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["pend",{"_index":887,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["peopl",{"_index":2793,"title":{},"name":{},"text":{"111":{}},"component":{}}],["per",{"_index":2153,"title":{},"name":{},"text":{"18":{},"77":{},"97":{}},"component":{}}],["perform",{"_index":827,"title":{},"name":{},"text":{"7":{},"11":{},"26":{},"30":{},"43":{},"47":{},"61":{},"65":{},"83":{},"87":{}},"component":{}}],["periodic_p",{"_index":1019,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["perman",{"_index":1785,"title":{"15-2":{},"34-2":{},"91-2":{}},"name":{},"text":{"15":{},"34":{},"51":{},"53":{},"69":{},"71":{},"91":{}},"component":{}}],["permiss",{"_index":303,"title":{"115-2":{},"115-6":{}},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"93":{}},"component":{}}],["persist",{"_index":2023,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{},"97":{}},"component":{}}],["phase",{"_index":981,"title":{"9-2":{},"9-3":{},"9-4":{},"9-5":{},"9-6":{},"28-2":{},"28-3":{},"28-4":{},"28-5":{},"28-6":{},"45-2":{},"45-3":{},"45-4":{},"45-5":{},"45-6":{},"63-2":{},"63-3":{},"63-4":{},"63-5":{},"63-6":{},"85-2":{},"85-3":{},"85-4":{},"85-5":{},"85-6":{}},"name":{},"text":{"8":{},"9":{},"12":{},"13":{},"27":{},"28":{},"31":{},"32":{},"44":{},"45":{},"48":{},"49":{},"62":{},"63":{},"66":{},"67":{},"84":{},"85":{},"88":{},"89":{}},"component":{}}],["phone",{"_index":2752,"title":{},"name":{},"text":{"108":{}},"component":{}}],["physf",{"_index":2624,"title":{},"name":{},"text":{"105":{}},"component":{}}],["physic",{"_index":824,"title":{},"name":{},"text":{"7":{},"19":{},"26":{},"37":{},"43":{},"55":{},"61":{},"73":{},"83":{},"94":{},"106":{}},"component":{}}],["pi",{"_index":2737,"title":{},"name":{},"text":{"108":{}},"component":{}}],["pick",{"_index":321,"title":{},"name":{},"text":{"3":{},"6":{},"10":{},"17":{},"22":{},"25":{},"29":{},"36":{},"40":{},"42":{},"46":{},"51":{},"54":{},"58":{},"60":{},"64":{},"69":{},"72":{},"79":{},"82":{},"86":{},"93":{},"105":{},"108":{}},"component":{}}],["pictur",{"_index":855,"title":{"16-7":{},"35-7":{},"52-7":{},"70-7":{},"92-7":{}},"name":{},"text":{"7":{},"13":{},"26":{},"32":{},"43":{},"49":{},"61":{},"67":{},"83":{},"89":{}},"component":{}}],["piec",{"_index":2405,"title":{},"name":{},"text":{"96":{},"105":{},"108":{}},"component":{}}],["pin",{"_index":1064,"title":{},"name":{},"text":{"9":{},"17":{},"28":{},"36":{},"45":{},"54":{},"63":{},"72":{},"85":{},"93":{},"98":{},"104":{}},"component":{}}],["ping",{"_index":1423,"title":{"12-2":{},"13-2":{},"31-2":{},"32-2":{},"48-2":{},"49-2":{},"66-2":{},"67-2":{},"88-2":{},"89-2":{}},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{}},"component":{}}],["pip",{"_index":1945,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["pipelin",{"_index":77,"title":{"16-2":{},"35-2":{},"52-2":{},"70-2":{},"92-2":{}},"name":{},"text":{"1":{},"4":{},"5":{},"7":{},"15":{},"16":{},"20":{},"23":{},"24":{},"26":{},"35":{},"38":{},"41":{},"43":{},"51":{},"52":{},"56":{},"59":{},"61":{},"69":{},"70":{},"74":{},"80":{},"81":{},"83":{},"91":{},"92":{},"111":{}},"component":{}}],["pipewiresrc",{"_index":1886,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["pixel",{"_index":910,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["pkg",{"_index":785,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["pkg_config_path=\"$pkg_config_path:$home/gst",{"_index":781,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["pkg_config_path=\"$pkg_config_path:$home/gstreamer/usr/local/lib/x86_64",{"_index":756,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["place",{"_index":655,"title":{},"name":{},"text":{"6":{},"12":{},"13":{},"25":{},"31":{},"32":{},"42":{},"48":{},"49":{},"60":{},"66":{},"67":{},"76":{},"82":{},"88":{},"89":{},"97":{},"105":{},"114":{}},"component":{}}],["plain",{"_index":435,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["plaincert",{"_index":1068,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["plaintext",{"_index":1755,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["plan",{"_index":949,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"100":{},"108":{},"112":{}},"component":{}}],["platform",{"_index":212,"title":{"116":{},"97-4":{},"110-2":{},"112-1":{}},"name":{"116":{}},"text":{"2":{},"21":{},"39":{},"57":{},"76":{},"78":{},"100":{},"101":{},"105":{},"108":{},"110":{},"111":{},"112":{},"113":{},"116":{}},"component":{}}],["platform/hw",{"_index":260,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["play",{"_index":22,"title":{"16-4":{},"18-3":{},"35-4":{},"52-4":{},"70-4":{},"77-3":{},"92-4":{}},"name":{},"text":{"1":{},"7":{},"14":{},"20":{},"26":{},"33":{},"38":{},"43":{},"50":{},"51":{},"56":{},"61":{},"68":{},"69":{},"74":{},"83":{},"90":{},"98":{},"108":{},"111":{},"114":{}},"component":{}}],["playback",{"_index":484,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["pleas",{"_index":649,"title":{},"name":{},"text":{"6":{},"19":{},"25":{},"37":{},"42":{},"55":{},"60":{},"73":{},"76":{},"82":{},"94":{},"114":{}},"component":{}}],["plu",{"_index":1294,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["plug",{"_index":47,"title":{"106-2":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"11":{},"20":{},"22":{},"23":{},"24":{},"26":{},"30":{},"38":{},"40":{},"41":{},"43":{},"47":{},"56":{},"58":{},"59":{},"61":{},"65":{},"74":{},"79":{},"80":{},"81":{},"83":{},"87":{},"106":{},"110":{}},"component":{}}],["plugin",{"_index":477,"title":{"4-2":{},"23-2":{},"41-2":{},"59-2":{},"80-2":{}},"name":{},"text":{"4":{},"5":{},"6":{},"7":{},"15":{},"16":{},"23":{},"24":{},"25":{},"26":{},"35":{},"41":{},"42":{},"43":{},"51":{},"52":{},"59":{},"60":{},"61":{},"69":{},"70":{},"80":{},"81":{},"82":{},"83":{},"91":{},"92":{},"110":{}},"component":{}}],["pod",{"_index":2544,"title":{},"name":{},"text":{"104":{}},"component":{}}],["point",{"_index":2088,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"95":{},"98":{},"105":{}},"component":{}}],["pointer",{"_index":2670,"title":{},"name":{},"text":{"106":{}},"component":{}}],["polul",{"_index":2010,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["popul",{"_index":2014,"title":{},"name":{},"text":{"17":{},"36":{},"51":{},"54":{},"69":{},"72":{},"93":{}},"component":{}}],["popular",{"_index":2340,"title":{},"name":{},"text":{"76":{},"106":{},"108":{},"111":{},"117":{}},"component":{}}],["port",{"_index":813,"title":{},"name":{},"text":{"6":{},"10":{},"12":{},"13":{},"14":{},"17":{},"19":{},"25":{},"29":{},"31":{},"32":{},"33":{},"36":{},"37":{},"42":{},"46":{},"48":{},"49":{},"50":{},"51":{},"54":{},"55":{},"60":{},"64":{},"66":{},"67":{},"68":{},"69":{},"72":{},"73":{},"76":{},"82":{},"86":{},"88":{},"89":{},"90":{},"93":{},"94":{},"97":{},"105":{}},"component":{}}],["portabl",{"_index":165,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["posit",{"_index":845,"title":{},"name":{},"text":{"7":{},"11":{},"18":{},"26":{},"30":{},"43":{},"47":{},"61":{},"65":{},"77":{},"83":{},"87":{}},"component":{}}],["possibl",{"_index":128,"title":{},"name":{},"text":{"2":{},"6":{},"7":{},"12":{},"13":{},"21":{},"25":{},"26":{},"31":{},"32":{},"39":{},"42":{},"43":{},"48":{},"49":{},"51":{},"57":{},"60":{},"61":{},"66":{},"67":{},"69":{},"78":{},"82":{},"83":{},"88":{},"89":{},"95":{},"106":{},"107":{},"108":{},"109":{},"112":{},"116":{}},"component":{}}],["post",{"_index":2518,"title":{},"name":{},"text":{"101":{}},"component":{}}],["potenti",{"_index":597,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["power",{"_index":155,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"51":{},"57":{},"69":{},"76":{},"78":{}},"component":{}}],["pp",{"_index":1751,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["practic",{"_index":2547,"title":{"105-9":{}},"name":{},"text":{},"component":{}}],["pre",{"_index":619,"title":{},"name":{},"text":{"5":{},"17":{},"18":{},"24":{},"36":{},"54":{},"72":{},"77":{},"81":{},"93":{},"113":{}},"component":{}}],["preconfigur",{"_index":2274,"title":{},"name":{},"text":{"75":{},"76":{}},"component":{}}],["predomin",{"_index":872,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["prefer",{"_index":653,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"76":{},"82":{},"97":{}},"component":{}}],["prefix=$home/gst",{"_index":770,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["prefix=$home/gstream",{"_index":712,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["prepar",{"_index":2574,"title":{},"name":{},"text":{"105":{}},"component":{}}],["present",{"_index":429,"title":{},"name":{},"text":{"3":{},"5":{},"6":{},"7":{},"11":{},"14":{},"15":{},"17":{},"19":{},"22":{},"24":{},"25":{},"26":{},"30":{},"33":{},"34":{},"36":{},"37":{},"40":{},"42":{},"43":{},"47":{},"50":{},"51":{},"54":{},"55":{},"58":{},"60":{},"61":{},"65":{},"68":{},"69":{},"72":{},"73":{},"79":{},"81":{},"82":{},"83":{},"87":{},"90":{},"91":{},"93":{},"94":{},"102":{},"104":{},"108":{},"112":{}},"component":{}}],["preserv",{"_index":2557,"title":{},"name":{},"text":{"105":{}},"component":{}}],["press",{"_index":1165,"title":{},"name":{},"text":{"11":{},"18":{},"30":{},"47":{},"65":{},"77":{},"87":{},"115":{}},"component":{}}],["pretend",{"_index":2658,"title":{},"name":{},"text":{"106":{}},"component":{}}],["pretti",{"_index":2381,"title":{},"name":{},"text":{"95":{}},"component":{}}],["previou",{"_index":2641,"title":{},"name":{},"text":{"105":{},"115":{}},"component":{}}],["previous",{"_index":932,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["primari",{"_index":29,"title":{"109":{}},"name":{"109":{}},"text":{"1":{},"20":{},"38":{},"56":{},"74":{},"109":{}},"component":{}}],["primarygpu",{"_index":2761,"title":{"109-1":{}},"name":{},"text":{"109":{}},"component":{}}],["print",{"_index":447,"title":{},"name":{},"text":{"3":{},"11":{},"15":{},"17":{},"19":{},"22":{},"30":{},"34":{},"36":{},"37":{},"40":{},"47":{},"51":{},"54":{},"55":{},"58":{},"65":{},"69":{},"72":{},"73":{},"79":{},"87":{},"91":{},"93":{},"94":{},"112":{}},"component":{}}],["prior",{"_index":2576,"title":{},"name":{},"text":{"105":{}},"component":{}}],["prioriti",{"_index":1736,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["privat",{"_index":1078,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["privileg",{"_index":67,"title":{},"name":{},"text":{"1":{},"3":{},"20":{},"22":{},"38":{},"40":{},"51":{},"56":{},"58":{},"69":{},"74":{},"76":{},"79":{},"101":{},"105":{},"115":{}},"component":{}}],["pro",{"_index":2872,"title":{},"name":{},"text":{"116":{}},"component":{}}],["probabl",{"_index":2162,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{},"108":{}},"component":{}}],["problem",{"_index":2488,"title":{},"name":{},"text":{"100":{},"115":{},"117":{}},"component":{}}],["proc/devic",{"_index":2072,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["process",{"_index":388,"title":{"15-9":{},"34-9":{},"51-5":{},"69-5":{},"91-9":{}},"name":{},"text":{"3":{},"4":{},"17":{},"19":{},"22":{},"23":{},"36":{},"37":{},"40":{},"41":{},"51":{},"54":{},"55":{},"58":{},"59":{},"69":{},"72":{},"73":{},"79":{},"80":{},"93":{},"94":{},"95":{},"96":{},"108":{}},"component":{}}],["produc",{"_index":2814,"title":{},"name":{},"text":{"112":{}},"component":{}}],["product",{"_index":2558,"title":{},"name":{},"text":{"105":{}},"component":{}}],["profile=(string)lc",{"_index":1928,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["program",{"_index":134,"title":{},"name":{},"text":{"2":{},"3":{},"7":{},"21":{},"22":{},"26":{},"39":{},"40":{},"43":{},"57":{},"58":{},"61":{},"78":{},"79":{},"83":{},"105":{}},"component":{}}],["progress",{"_index":2893,"title":{},"name":{},"text":{"117":{}},"component":{}}],["project",{"_index":107,"title":{},"name":{},"text":{"1":{},"2":{},"20":{},"21":{},"38":{},"39":{},"56":{},"57":{},"74":{},"78":{},"99":{},"111":{},"116":{}},"component":{}}],["project’",{"_index":2369,"title":{},"name":{},"text":{"76":{}},"component":{}}],["prompt",{"_index":1059,"title":{},"name":{},"text":{"9":{},"17":{},"28":{},"36":{},"45":{},"54":{},"63":{},"72":{},"85":{},"93":{},"98":{}},"component":{}}],["proper",{"_index":451,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{},"96":{}},"component":{}}],["properg",{"_index":2579,"title":{},"name":{},"text":{"105":{}},"component":{}}],["properli",{"_index":633,"title":{},"name":{},"text":{"5":{},"12":{},"17":{},"24":{},"31":{},"36":{},"48":{},"66":{},"81":{},"88":{},"93":{}},"component":{}}],["properti",{"_index":528,"title":{},"name":{},"text":{"4":{},"7":{},"15":{},"23":{},"26":{},"34":{},"41":{},"43":{},"51":{},"59":{},"61":{},"69":{},"80":{},"83":{},"91":{}},"component":{}}],["proprietari",{"_index":651,"title":{"107-1":{}},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"107":{}},"component":{}}],["protocol",{"_index":122,"title":{"10":{},"29":{},"46":{},"64":{},"86":{},"2-4":{},"21-4":{},"39-4":{},"57-4":{},"78-4":{}},"name":{},"text":{"2":{},"7":{},"10":{},"13":{},"14":{},"21":{},"26":{},"29":{},"32":{},"33":{},"39":{},"43":{},"46":{},"49":{},"50":{},"57":{},"61":{},"64":{},"67":{},"68":{},"78":{},"83":{},"86":{},"89":{},"90":{},"108":{}},"component":{}}],["protocol.hpp",{"_index":216,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["proton",{"_index":2134,"title":{"18-3":{},"77-3":{}},"name":{},"text":{"18":{},"77":{},"114":{}},"component":{}}],["proton_log=1",{"_index":2143,"title":{},"name":{},"text":{"18":{},"34":{},"51":{},"69":{},"77":{}},"component":{}}],["prototyp",{"_index":466,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["provid",{"_index":57,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"7":{},"8":{},"20":{},"21":{},"22":{},"24":{},"26":{},"27":{},"38":{},"39":{},"40":{},"43":{},"44":{},"56":{},"57":{},"58":{},"61":{},"62":{},"74":{},"76":{},"78":{},"79":{},"81":{},"83":{},"84":{},"96":{},"101":{},"105":{},"107":{},"108":{},"112":{},"113":{},"116":{}},"component":{}}],["ps",{"_index":1368,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["ps5",{"_index":2117,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["public",{"_index":1067,"title":{},"name":{},"text":{"9":{},"10":{},"28":{},"29":{},"45":{},"46":{},"63":{},"64":{},"85":{},"86":{},"99":{}},"component":{}}],["pull",{"_index":2379,"title":{"113-1":{}},"name":{},"text":{"95":{},"100":{},"113":{}},"component":{}}],["puls",{"_index":2806,"title":{},"name":{},"text":{"112":{}},"component":{}}],["pulseaudio",{"_index":589,"title":{"96-2":{}},"name":{},"text":{"5":{},"15":{},"24":{},"34":{},"51":{},"69":{},"81":{},"91":{},"96":{},"101":{},"108":{},"116":{}},"component":{}}],["purpos",{"_index":86,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["push",{"_index":386,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"22":{},"23":{},"26":{},"40":{},"41":{},"43":{},"58":{},"59":{},"61":{},"79":{},"80":{},"83":{},"100":{}},"component":{}}],["put",{"_index":274,"title":{"3-7":{},"22-7":{},"40-7":{},"58-7":{},"79-7":{}},"name":{},"text":{"6":{},"16":{},"25":{},"35":{},"42":{},"52":{},"60":{},"70":{},"82":{},"92":{},"95":{},"97":{},"106":{},"114":{}},"component":{}}],["q",{"_index":1257,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"112":{}},"component":{}}],["qsv",{"_index":1857,"title":{},"name":{},"text":{"15":{},"51":{},"69":{},"91":{}},"component":{}}],["qsvencod",{"_index":2201,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["qtdemux",{"_index":1920,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["question",{"_index":931,"title":{},"name":{},"text":{"7":{},"9":{},"26":{},"28":{},"43":{},"45":{},"61":{},"63":{},"83":{},"85":{},"99":{},"114":{}},"component":{}}],["queue",{"_index":1899,"title":{},"name":{},"text":{"16":{},"19":{},"35":{},"37":{},"52":{},"55":{},"70":{},"73":{},"92":{},"94":{}},"component":{}}],["quick",{"_index":962,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["quickstart",{"_index":1964,"title":{"17":{},"36":{},"54":{},"72":{},"93":{},"104-6":{}},"name":{"17":{},"36":{},"54":{},"72":{},"93":{}},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["quicksync",{"_index":624,"title":{},"name":{},"text":{"5":{},"15":{},"24":{},"51":{},"69":{},"81":{},"91":{}},"component":{}}],["quiet",{"_index":2813,"title":{},"name":{},"text":{"112":{}},"component":{}}],["quit",{"_index":1056,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{},"98":{}},"component":{}}],["r",{"_index":1259,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"115":{}},"component":{}}],["r1",{"_index":1437,"title":{},"name":{},"text":{"12":{},"31":{},"48":{},"66":{},"88":{}},"component":{}}],["r\\n",{"_index":1770,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["race",{"_index":152,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["random",{"_index":1429,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{}},"component":{}}],["randomli",{"_index":1073,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"51":{},"63":{},"69":{},"85":{}},"component":{}}],["rang",{"_index":307,"title":{},"name":{},"text":{"3":{},"4":{},"22":{},"23":{},"40":{},"41":{},"58":{},"59":{},"79":{},"80":{}},"component":{}}],["rare",{"_index":2712,"title":{},"name":{},"text":{"107":{}},"component":{}}],["raspberri",{"_index":2736,"title":{},"name":{},"text":{"108":{}},"component":{}}],["rate",{"_index":2449,"title":{},"name":{},"text":{"97":{}},"component":{}}],["rate=(int)44100",{"_index":1912,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["rational",{"_index":205,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["raw",{"_index":576,"title":{},"name":{},"text":{"5":{},"15":{},"16":{},"24":{},"35":{},"51":{},"52":{},"69":{},"70":{},"81":{},"91":{},"92":{}},"component":{}}],["raw(memory:vamemori",{"_index":2208,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["rc",{"_index":2801,"title":{"112-4":{}},"name":{},"text":{"112":{}},"component":{}}],["rc3",{"_index":2791,"title":{},"name":{},"text":{"110":{}},"component":{}}],["re",{"_index":158,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"51":{},"57":{},"69":{},"78":{}},"component":{}}],["reach",{"_index":1095,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{},"114":{},"115":{}},"component":{}}],["react",{"_index":246,"title":{},"name":{},"text":{"2":{},"3":{},"21":{},"22":{},"40":{},"58":{},"78":{},"79":{}},"component":{}}],["read",{"_index":204,"title":{},"name":{},"text":{"2":{},"5":{},"6":{},"7":{},"13":{},"21":{},"24":{},"25":{},"26":{},"32":{},"39":{},"42":{},"43":{},"49":{},"51":{},"57":{},"60":{},"61":{},"67":{},"69":{},"78":{},"81":{},"82":{},"83":{},"89":{},"96":{},"103":{},"106":{}},"component":{}}],["readabl",{"_index":127,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["readi",{"_index":884,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"102":{},"113":{}},"component":{}}],["real",{"_index":258,"title":{},"name":{},"text":{"2":{},"7":{},"17":{},"21":{},"26":{},"36":{},"39":{},"43":{},"54":{},"57":{},"61":{},"72":{},"78":{},"83":{},"93":{},"96":{}},"component":{}}],["realli",{"_index":918,"title":{},"name":{},"text":{"7":{},"17":{},"26":{},"36":{},"43":{},"54":{},"61":{},"72":{},"83":{},"93":{},"106":{},"116":{},"117":{}},"component":{}}],["reason",{"_index":847,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"96":{},"117":{}},"component":{}}],["reboot",{"_index":2029,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"72":{},"93":{},"94":{}},"component":{}}],["receiv",{"_index":294,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"12":{},"13":{},"19":{},"22":{},"23":{},"26":{},"31":{},"32":{},"37":{},"40":{},"41":{},"43":{},"48":{},"49":{},"55":{},"58":{},"59":{},"61":{},"66":{},"67":{},"73":{},"79":{},"80":{},"83":{},"88":{},"89":{},"94":{}},"component":{}}],["recogn",{"_index":383,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["recognis",{"_index":2159,"title":{"19-4":{},"37-4":{},"55-4":{},"73-4":{},"94-4":{}},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["recommend",{"_index":783,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{},"96":{},"105":{},"110":{},"114":{}},"component":{}}],["red",{"_index":2195,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["reed",{"_index":220,"title":{},"name":{},"text":{"2":{},"12":{},"13":{},"21":{},"31":{},"32":{},"39":{},"48":{},"49":{},"57":{},"66":{},"67":{},"78":{},"88":{},"89":{}},"component":{}}],["reenignearch",{"_index":104,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["refer",{"_index":276,"title":{"3-8":{},"7-5":{},"22-8":{},"26-5":{},"40-8":{},"43-5":{},"58-8":{},"61-5":{},"79-8":{},"83-5":{}},"name":{},"text":{"6":{},"7":{},"11":{},"25":{},"26":{},"30":{},"42":{},"43":{},"47":{},"60":{},"61":{},"65":{},"76":{},"82":{},"83":{},"87":{},"105":{}},"component":{}}],["region",{"_index":863,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["registri",{"_index":2497,"title":{},"name":{},"text":{"100":{}},"component":{}}],["reinstal",{"_index":2216,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["reject",{"_index":2207,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["rel",{"_index":930,"title":{"11-1":{},"30-1":{},"47-1":{},"65-1":{},"87-1":{}},"name":{},"text":{"7":{},"11":{},"26":{},"30":{},"43":{},"47":{},"61":{},"65":{},"83":{},"87":{},"106":{}},"component":{}}],["relat",{"_index":2175,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"76":{},"94":{},"106":{},"114":{}},"component":{}}],["releas",{"_index":942,"title":{},"name":{},"text":{"7":{},"11":{},"26":{},"30":{},"43":{},"47":{},"61":{},"65":{},"83":{},"87":{},"95":{}},"component":{}}],["reli",{"_index":2748,"title":{},"name":{},"text":{"108":{}},"component":{}}],["reload",{"_index":2132,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["remain",{"_index":1034,"title":{},"name":{},"text":{"8":{},"13":{},"27":{},"32":{},"44":{},"49":{},"62":{},"67":{},"84":{},"89":{},"105":{}},"component":{}}],["remot",{"_index":19,"title":{"16-5":{},"35-5":{},"52-5":{},"70-5":{},"92-5":{}},"name":{},"text":{"1":{},"7":{},"9":{},"11":{},"16":{},"20":{},"26":{},"28":{},"30":{},"35":{},"38":{},"43":{},"45":{},"47":{},"52":{},"53":{},"56":{},"61":{},"63":{},"65":{},"70":{},"71":{},"74":{},"83":{},"85":{},"87":{},"92":{},"96":{},"101":{},"102":{}},"component":{}}],["remov",{"_index":854,"title":{},"name":{},"text":{"7":{},"15":{},"17":{},"26":{},"34":{},"36":{},"43":{},"51":{},"54":{},"61":{},"69":{},"72":{},"83":{},"91":{},"93":{},"105":{},"116":{}},"component":{}}],["render",{"_index":850,"title":{"15-13":{},"34-14":{},"51-10":{},"69-10":{},"91-13":{}},"name":{},"text":{"7":{},"15":{},"26":{},"34":{},"43":{},"51":{},"61":{},"69":{},"83":{},"91":{},"107":{},"114":{}},"component":{}}],["render_nod",{"_index":1845,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["renderd128",{"_index":1843,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{},"107":{}},"component":{}}],["renderd129",{"_index":1844,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["repetit",{"_index":2822,"title":{},"name":{},"text":{"112":{}},"component":{}}],["replac",{"_index":2090,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"76":{},"93":{},"102":{},"108":{},"112":{}},"component":{}}],["replic",{"_index":371,"title":{},"name":{},"text":{"3":{},"19":{},"22":{},"37":{},"40":{},"55":{},"58":{},"73":{},"79":{},"94":{},"105":{}},"component":{}}],["repo",{"_index":2380,"title":{},"name":{},"text":{"95":{},"102":{},"104":{},"108":{},"112":{},"113":{}},"component":{}}],["report",{"_index":2460,"title":{},"name":{},"text":{"99":{},"100":{},"112":{}},"component":{}}],["repositori",{"_index":2374,"title":{"95-6":{}},"name":{},"text":{"95":{}},"component":{}}],["repres",{"_index":1004,"title":{},"name":{},"text":{"8":{},"11":{},"14":{},"27":{},"30":{},"33":{},"44":{},"47":{},"50":{},"62":{},"65":{},"68":{},"84":{},"87":{},"90":{},"106":{}},"component":{}}],["repurpos",{"_index":2395,"title":{},"name":{},"text":{"95":{}},"component":{}}],["request",{"_index":392,"title":{"13-11":{},"14-3":{},"32-11":{},"33-3":{},"49-11":{},"50-3":{},"67-11":{},"68-3":{},"89-11":{},"90-3":{}},"name":{},"text":{"3":{},"7":{},"9":{},"14":{},"22":{},"26":{},"28":{},"33":{},"40":{},"43":{},"45":{},"50":{},"58":{},"61":{},"63":{},"68":{},"79":{},"83":{},"85":{},"90":{},"95":{}},"component":{}}],["requir",{"_index":243,"title":{"106":{},"110":{},"104-2":{},"110-2":{}},"name":{"110":{}},"text":{"2":{},"3":{},"4":{},"6":{},"14":{},"17":{},"21":{},"22":{},"23":{},"25":{},"33":{},"36":{},"39":{},"40":{},"41":{},"42":{},"50":{},"54":{},"57":{},"58":{},"59":{},"60":{},"68":{},"72":{},"78":{},"79":{},"80":{},"82":{},"90":{},"93":{},"95":{},"96":{},"101":{},"103":{},"104":{},"105":{},"110":{},"112":{},"114":{},"115":{},"117":{}},"component":{}}],["required_packag",{"_index":2373,"title":{"95-5":{}},"name":{},"text":{"95":{}},"component":{}}],["resembl",{"_index":2129,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["reserv",{"_index":2000,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["resid",{"_index":1806,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["resolut",{"_index":2448,"title":{},"name":{},"text":{"97":{},"106":{}},"component":{}}],["resolution/fp",{"_index":42,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["resourc",{"_index":870,"title":{"76-11":{}},"name":{},"text":{"7":{},"17":{},"26":{},"36":{},"43":{},"61":{},"76":{},"83":{},"93":{}},"component":{}}],["respect",{"_index":1381,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"76":{},"87":{},"96":{}},"component":{}}],["respons",{"_index":390,"title":{"14-7":{},"33-7":{},"50-7":{},"68-7":{},"90-7":{}},"name":{},"text":{"3":{},"9":{},"14":{},"22":{},"28":{},"33":{},"40":{},"45":{},"50":{},"58":{},"63":{},"68":{},"79":{},"85":{},"90":{}},"component":{}}],["rest",{"_index":994,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["restart",{"_index":1986,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"97":{}},"component":{}}],["restrict",{"_index":602,"title":{},"name":{},"text":{"5":{},"17":{},"24":{},"36":{},"81":{},"93":{},"101":{}},"component":{}}],["result",{"_index":366,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"16":{},"22":{},"23":{},"24":{},"26":{},"35":{},"40":{},"41":{},"43":{},"52":{},"58":{},"59":{},"61":{},"70":{},"79":{},"80":{},"81":{},"83":{},"92":{},"96":{}},"component":{}}],["retro",{"_index":2501,"title":{},"name":{},"text":{"101":{}},"component":{}}],["retroarch",{"_index":293,"title":{"115-4":{}},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"76":{},"79":{},"95":{},"101":{},"108":{},"111":{},"112":{}},"component":{}}],["retroarch.yml",{"_index":2398,"title":{},"name":{},"text":{"95":{}},"component":{}}],["retrofit",{"_index":543,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["return",{"_index":139,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{},"106":{}},"component":{}}],["revers",{"_index":456,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["revolv",{"_index":244,"title":{},"name":{},"text":{"2":{},"21":{},"78":{}},"component":{}}],["rfc",{"_index":1433,"title":{},"name":{},"text":{"12":{},"31":{},"48":{},"66":{},"88":{}},"component":{}}],["rgb",{"_index":967,"title":{"8-8":{},"27-8":{},"44-8":{},"62-8":{},"84-8":{}},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["rgb_led",{"_index":1031,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["right",{"_index":291,"title":{},"name":{},"text":{"3":{},"11":{},"18":{},"22":{},"30":{},"40":{},"47":{},"51":{},"58":{},"65":{},"69":{},"77":{},"79":{},"87":{},"98":{},"100":{},"105":{},"110":{},"117":{}},"component":{}}],["right_button",{"_index":1407,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["right_stick",{"_index":1404,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["rightalt",{"_index":1339,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["rightbrac",{"_index":1355,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["rightctrl",{"_index":1336,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["rightmeta",{"_index":1277,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["rightshift",{"_index":1333,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["ring",{"_index":2141,"title":{},"name":{},"text":{"18":{},"34":{},"77":{}},"component":{}}],["rm",{"_index":2011,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["rmw",{"_index":1980,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"76":{},"93":{},"105":{}},"component":{}}],["roadmap",{"_index":2792,"title":{"111":{}},"name":{"111":{}},"text":{},"component":{}}],["rom",{"_index":2278,"title":{"76-3":{},"76-4":{},"76-6":{}},"name":{},"text":{"76":{}},"component":{}}],["roms/3do",{"_index":2288,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/amiga",{"_index":2289,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/amigacd32",{"_index":2290,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/arcad",{"_index":2291,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/atari2600",{"_index":2292,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/atari5200",{"_index":2293,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/atari7800",{"_index":2294,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/atarijaguar",{"_index":2295,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/atarijaguarcd",{"_index":2296,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/atarilynx",{"_index":2297,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/atarist",{"_index":2298,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/gb",{"_index":2299,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/gba",{"_index":2300,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/gbc",{"_index":2301,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/gc",{"_index":2302,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/genesi",{"_index":2303,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/megacd",{"_index":2304,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/model2",{"_index":2305,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/model3",{"_index":2306,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/n",{"_index":2310,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/n64",{"_index":2307,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/naomi",{"_index":2308,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/neogeo",{"_index":2309,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/ngp",{"_index":2311,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/ngpc",{"_index":2312,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/ps2",{"_index":2313,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/ps3",{"_index":2314,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/psp",{"_index":2315,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/psx",{"_index":2316,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/saturn",{"_index":2317,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/sega32x",{"_index":2318,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/segacd",{"_index":2319,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/sn",{"_index":2320,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/snes_widescreen",{"_index":2321,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/switch",{"_index":2322,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/virtualboy",{"_index":2323,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/wii",{"_index":2324,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/wiiu",{"_index":2325,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/wonderswan",{"_index":2326,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/wonderswancolor",{"_index":2327,"title":{},"name":{},"text":{"76":{}},"component":{}}],["roms/xbox",{"_index":2328,"title":{},"name":{},"text":{"76":{}},"component":{}}],["room",{"_index":2875,"title":{},"name":{},"text":{"116":{}},"component":{}}],["root",{"_index":475,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"93":{},"97":{},"104":{},"107":{},"110":{}},"component":{}}],["roughli",{"_index":438,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["rout",{"_index":843,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["rpcs3",{"_index":2346,"title":{},"name":{},"text":{"76":{}},"component":{}}],["rt",{"_index":1380,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["rtp",{"_index":492,"title":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{},"12-3":{},"13-3":{},"31-3":{},"32-3":{},"48-3":{},"49-3":{},"66-3":{},"67-3":{},"88-3":{},"89-3":{}},"name":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{}},"text":{"4":{},"5":{},"10":{},"12":{},"13":{},"23":{},"24":{},"29":{},"31":{},"32":{},"41":{},"46":{},"48":{},"49":{},"59":{},"64":{},"66":{},"67":{},"80":{},"81":{},"86":{},"88":{},"89":{}},"component":{}}],["rtp_header_s",{"_index":1456,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["rtpmoonlightpay_audio",{"_index":540,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["rtpmoonlightpay_video",{"_index":539,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["rtsp",{"_index":226,"title":{"14":{},"33":{},"50":{},"68":{},"90":{},"14-2":{},"33-2":{},"50-2":{},"68-2":{},"90-2":{}},"name":{"14":{},"33":{},"50":{},"68":{},"90":{}},"text":{"2":{},"10":{},"12":{},"13":{},"14":{},"17":{},"19":{},"21":{},"29":{},"31":{},"32":{},"33":{},"36":{},"37":{},"39":{},"46":{},"48":{},"49":{},"50":{},"54":{},"55":{},"57":{},"64":{},"66":{},"67":{},"68":{},"72":{},"73":{},"78":{},"86":{},"88":{},"89":{},"90":{},"93":{},"94":{}},"component":{}}],["rtsp/1.0",{"_index":1760,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["rtsp://192.168.1.100:48010",{"_index":1759,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["rule",{"_index":304,"title":{},"name":{},"text":{"3":{},"5":{},"17":{},"22":{},"24":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"81":{},"93":{}},"component":{}}],["rumbl",{"_index":965,"title":{"8-5":{},"8-6":{},"27-5":{},"27-6":{},"44-5":{},"44-6":{},"62-5":{},"62-6":{},"84-5":{},"84-6":{}},"name":{},"text":{"8":{},"11":{},"27":{},"30":{},"44":{},"47":{},"62":{},"65":{},"84":{},"87":{}},"component":{}}],["rumble_data",{"_index":1025,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["rumble_trigg",{"_index":1027,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["run",{"_index":66,"title":{"112":{},"113":{},"5-5":{},"24-5":{},"81-5":{},"112-4":{},"114-3":{}},"name":{"112":{},"113":{}},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"28":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"42":{},"43":{},"44":{},"45":{},"51":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"60":{},"61":{},"62":{},"63":{},"69":{},"71":{},"72":{},"73":{},"74":{},"76":{},"78":{},"79":{},"81":{},"82":{},"83":{},"84":{},"85":{},"91":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{},"102":{},"103":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{}},"component":{}}],["run/udev/control",{"_index":426,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["run/udev/data",{"_index":434,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["run/udev:/run/udev:ro",{"_index":2246,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["run/udev:/run/udev:rw",{"_index":1979,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["run_cmd",{"_index":2241,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["run_gamescope=tru",{"_index":2247,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["run_sway=1",{"_index":2334,"title":{},"name":{},"text":{"76":{}},"component":{}}],["run_sway=1\",\"gow_required_devices=/dev/input/ev",{"_index":2587,"title":{},"name":{},"text":{"105":{}},"component":{}}],["run_sway=tru",{"_index":2144,"title":{},"name":{},"text":{"18":{},"34":{},"77":{}},"component":{}}],["runner",{"_index":1790,"title":{"15-8":{},"34-8":{},"51-4":{},"69-4":{},"91-8":{}},"name":{},"text":{"51":{},"69":{},"105":{}},"component":{}}],["runtim",{"_index":1998,"title":{},"name":{},"text":{"17":{},"36":{},"51":{},"69":{},"93":{},"107":{}},"component":{}}],["rust",{"_index":574,"title":{},"name":{},"text":{"5":{},"6":{},"15":{},"24":{},"25":{},"34":{},"42":{},"51":{},"60":{},"69":{},"81":{},"82":{},"91":{}},"component":{}}],["rust_backtrac",{"_index":1829,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["rw",{"_index":2727,"title":{},"name":{},"text":{"107":{}},"component":{}}],["s",{"_index":1261,"title":{},"name":{},"text":{"11":{},"12":{},"30":{},"31":{},"47":{},"48":{},"65":{},"66":{},"87":{},"88":{},"112":{}},"component":{}}],["sacrific",{"_index":829,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["sad",{"_index":901,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["safe",{"_index":612,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["salt",{"_index":1058,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["same",{"_index":372,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"11":{},"12":{},"15":{},"17":{},"19":{},"22":{},"23":{},"24":{},"30":{},"31":{},"34":{},"36":{},"37":{},"40":{},"41":{},"47":{},"48":{},"51":{},"54":{},"55":{},"58":{},"59":{},"65":{},"66":{},"69":{},"72":{},"73":{},"79":{},"80":{},"81":{},"87":{},"88":{},"91":{},"93":{},"94":{},"96":{},"97":{},"100":{},"101":{},"105":{},"106":{},"108":{},"112":{},"116":{}},"component":{}}],["sampl",{"_index":1890,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["sandbox",{"_index":2757,"title":{},"name":{},"text":{"108":{}},"component":{}}],["save",{"_index":1043,"title":{},"name":{},"text":{"8":{},"13":{},"27":{},"32":{},"44":{},"49":{},"51":{},"62":{},"67":{},"69":{},"84":{},"89":{},"105":{}},"component":{}}],["sbin/modprob",{"_index":2051,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["scale",{"_index":830,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["scene",{"_index":840,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["schema",{"_index":1035,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["scope",{"_index":921,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"106":{}},"component":{}}],["scratch",{"_index":654,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["screen",{"_index":1882,"title":{"19-1":{},"37-1":{},"55-1":{},"73-1":{},"94-1":{},"106-5":{}},"name":{},"text":{"16":{},"17":{},"18":{},"19":{},"35":{},"36":{},"37":{},"52":{},"54":{},"55":{},"70":{},"72":{},"73":{},"77":{},"92":{},"93":{},"94":{},"101":{},"106":{},"115":{}},"component":{}}],["screen.conf",{"_index":2678,"title":{},"name":{},"text":{"106":{}},"component":{}}],["screen.conf:/usr/share/x11/xorg.conf.d/01",{"_index":2695,"title":{},"name":{},"text":{"106":{}},"component":{}}],["screen.conf:ro",{"_index":2696,"title":{},"name":{},"text":{"106":{}},"component":{}}],["screen0",{"_index":2679,"title":{},"name":{},"text":{"106":{}},"component":{}}],["screen=tru",{"_index":1884,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["script",{"_index":556,"title":{"95-3":{},"105-14":{}},"name":{},"text":{"4":{},"17":{},"23":{},"36":{},"41":{},"54":{},"59":{},"72":{},"80":{},"93":{},"95":{},"100":{},"102":{},"105":{},"107":{},"108":{},"109":{},"112":{},"113":{},"116":{}},"component":{}}],["scripts/startup",{"_index":2548,"title":{"105-11":{}},"name":{},"text":{"105":{}},"component":{}}],["scripts/supertux",{"_index":2646,"title":{},"name":{},"text":{"105":{}},"component":{}}],["scroll",{"_index":1111,"title":{"11-5":{},"11-6":{},"30-5":{},"30-6":{},"47-5":{},"47-6":{},"65-5":{},"65-6":{},"87-5":{},"87-6":{}},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["scrolllock",{"_index":1330,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["seat",{"_index":605,"title":{},"name":{},"text":{"5":{},"17":{},"24":{},"36":{},"54":{},"72":{},"81":{},"93":{}},"component":{}}],["seat1",{"_index":2125,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["seat9",{"_index":2122,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["second",{"_index":1773,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["secret",{"_index":1072,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["section",{"_index":1435,"title":{},"name":{},"text":{"12":{},"14":{},"31":{},"33":{},"48":{},"50":{},"66":{},"68":{},"76":{},"88":{},"90":{},"96":{},"100":{},"106":{},"109":{}},"component":{}}],["secur",{"_index":1051,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{},"101":{}},"component":{}}],["see",{"_index":606,"title":{"114-1":{}},"name":{},"text":{"5":{},"9":{},"11":{},"13":{},"15":{},"16":{},"17":{},"18":{},"19":{},"24":{},"28":{},"30":{},"32":{},"34":{},"35":{},"36":{},"37":{},"45":{},"47":{},"49":{},"51":{},"52":{},"54":{},"55":{},"63":{},"65":{},"67":{},"69":{},"70":{},"72":{},"73":{},"75":{},"77":{},"81":{},"85":{},"87":{},"89":{},"91":{},"92":{},"93":{},"94":{},"98":{},"101":{},"104":{},"107":{},"110":{},"112":{},"113":{},"115":{}},"component":{}}],["seem",{"_index":2009,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"116":{}},"component":{}}],["seen",{"_index":256,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["sei",{"_index":1747,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["select",{"_index":557,"title":{},"name":{},"text":{"4":{},"7":{},"11":{},"15":{},"19":{},"23":{},"26":{},"30":{},"34":{},"37":{},"41":{},"43":{},"47":{},"51":{},"55":{},"59":{},"61":{},"65":{},"69":{},"73":{},"76":{},"80":{},"83":{},"87":{},"91":{},"94":{},"105":{},"108":{},"115":{}},"component":{}}],["self",{"_index":2556,"title":{},"name":{},"text":{"105":{}},"component":{}}],["semicolon",{"_index":1341,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["send",{"_index":396,"title":{},"name":{},"text":{"3":{},"4":{},"5":{},"7":{},"8":{},"9":{},"11":{},"12":{},"13":{},"22":{},"23":{},"24":{},"26":{},"27":{},"28":{},"30":{},"31":{},"32":{},"40":{},"41":{},"43":{},"44":{},"45":{},"47":{},"48":{},"49":{},"58":{},"59":{},"61":{},"62":{},"63":{},"65":{},"66":{},"67":{},"79":{},"80":{},"81":{},"83":{},"84":{},"85":{},"87":{},"88":{},"89":{}},"component":{}}],["sender",{"_index":421,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["sensit",{"_index":2835,"title":{},"name":{},"text":{"114":{}},"component":{}}],["sensor",{"_index":2118,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["sent",{"_index":368,"title":{},"name":{},"text":{"3":{},"8":{},"9":{},"11":{},"12":{},"13":{},"22":{},"27":{},"28":{},"30":{},"31":{},"32":{},"40":{},"44":{},"45":{},"47":{},"48":{},"49":{},"58":{},"62":{},"63":{},"65":{},"66":{},"67":{},"79":{},"84":{},"85":{},"87":{},"88":{},"89":{}},"component":{}}],["separ",{"_index":169,"title":{},"name":{},"text":{"2":{},"6":{},"12":{},"13":{},"14":{},"21":{},"25":{},"31":{},"32":{},"33":{},"39":{},"42":{},"48":{},"49":{},"50":{},"51":{},"53":{},"57":{},"60":{},"66":{},"67":{},"68":{},"69":{},"71":{},"76":{},"78":{},"82":{},"88":{},"89":{},"90":{},"106":{},"116":{}},"component":{}}],["seq",{"_index":995,"title":{},"name":{},"text":{"8":{},"17":{},"27":{},"36":{},"44":{},"54":{},"62":{},"72":{},"84":{},"93":{}},"component":{}}],["sequenc",{"_index":999,"title":{},"name":{},"text":{"8":{},"13":{},"14":{},"27":{},"32":{},"33":{},"44":{},"49":{},"50":{},"62":{},"67":{},"68":{},"84":{},"89":{},"90":{}},"component":{}}],["server",{"_index":13,"title":{"2-5":{},"8-4":{},"21-5":{},"27-4":{},"39-5":{},"44-4":{},"57-5":{},"62-4":{},"78-5":{},"84-4":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"7":{},"8":{},"9":{},"17":{},"20":{},"21":{},"22":{},"24":{},"25":{},"26":{},"27":{},"28":{},"36":{},"38":{},"39":{},"40":{},"42":{},"43":{},"44":{},"45":{},"53":{},"54":{},"56":{},"57":{},"58":{},"60":{},"61":{},"62":{},"63":{},"71":{},"72":{},"74":{},"78":{},"79":{},"81":{},"82":{},"83":{},"84":{},"85":{},"93":{},"96":{},"98":{},"99":{},"101":{},"106":{},"108":{},"112":{},"116":{},"117":{}},"component":{}}],["server/gst",{"_index":635,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["server0",{"_index":791,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["server_challeng",{"_index":1074,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["server_secret",{"_index":1081,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["serverchallengeresp",{"_index":1076,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["servic",{"_index":1982,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"106":{},"112":{},"116":{}},"component":{}}],["session",{"_index":259,"title":{},"name":{},"text":{"2":{},"14":{},"15":{},"17":{},"19":{},"21":{},"33":{},"34":{},"36":{},"37":{},"39":{},"50":{},"54":{},"55":{},"57":{},"68":{},"72":{},"73":{},"78":{},"90":{},"91":{},"93":{},"94":{}},"component":{}}],["set",{"_index":78,"title":{"76-4":{},"76-6":{}},"name":{},"text":{"1":{},"4":{},"5":{},"8":{},"10":{},"11":{},"13":{},"15":{},"17":{},"20":{},"23":{},"24":{},"27":{},"29":{},"30":{},"32":{},"34":{},"36":{},"38":{},"41":{},"44":{},"46":{},"47":{},"49":{},"51":{},"54":{},"56":{},"59":{},"62":{},"64":{},"65":{},"67":{},"69":{},"72":{},"74":{},"76":{},"80":{},"81":{},"84":{},"86":{},"87":{},"89":{},"91":{},"93":{},"95":{},"97":{},"101":{},"104":{},"105":{},"106":{},"107":{},"109":{},"110":{},"112":{},"113":{},"114":{}},"component":{}}],["setup",{"_index":561,"title":{"6":{},"25":{},"42":{},"60":{},"82":{}},"name":{},"text":{"4":{},"5":{},"6":{},"14":{},"23":{},"24":{},"25":{},"33":{},"41":{},"42":{},"50":{},"51":{},"59":{},"60":{},"68":{},"69":{},"80":{},"81":{},"82":{},"90":{},"106":{},"117":{}},"component":{}}],["sever",{"_index":2339,"title":{},"name":{},"text":{"76":{},"106":{},"112":{}},"component":{}}],["sh",{"_index":317,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"51":{},"54":{},"58":{},"69":{},"72":{},"79":{},"93":{}},"component":{}}],["sha256",{"_index":1069,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{},"100":{}},"component":{}}],["sha256(server_challeng",{"_index":1088,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["sha256:6b8555260ed07c7ed466e0b821922a3cedf4ee27b9d6b8fea9d6aa2995b75f61",{"_index":2481,"title":{},"name":{},"text":{"100":{}},"component":{}}],["shape",{"_index":495,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["share",{"_index":16,"title":{"15-3":{},"34-3":{},"91-3":{}},"name":{},"text":{"1":{},"2":{},"7":{},"9":{},"15":{},"16":{},"20":{},"21":{},"26":{},"28":{},"34":{},"35":{},"38":{},"39":{},"43":{},"45":{},"52":{},"53":{},"56":{},"57":{},"61":{},"63":{},"70":{},"71":{},"74":{},"78":{},"83":{},"85":{},"91":{},"92":{},"96":{},"97":{},"99":{},"105":{}},"component":{}}],["shareabl",{"_index":852,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["sheet",{"_index":1879,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["shift",{"_index":2156,"title":{},"name":{},"text":{"18":{},"77":{}},"component":{}}],["shine",{"_index":2882,"title":{},"name":{},"text":{"116":{}},"component":{}}],["ship",{"_index":2780,"title":{},"name":{},"text":{"110":{}},"component":{}}],["shm",{"_index":862,"title":{},"name":{},"text":{"7":{},"16":{},"26":{},"35":{},"43":{},"52":{},"61":{},"70":{},"83":{},"92":{},"114":{}},"component":{}}],["shmsink",{"_index":1887,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["shmsrc",{"_index":1888,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["short",{"_index":989,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["shortcut",{"_index":2594,"title":{},"name":{},"text":{"105":{}},"component":{}}],["show",{"_index":1793,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{},"106":{}},"component":{}}],["shown",{"_index":2240,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["side",{"_index":129,"title":{},"name":{},"text":{"2":{},"7":{},"11":{},"16":{},"21":{},"26":{},"30":{},"35":{},"39":{},"43":{},"47":{},"52":{},"57":{},"61":{},"65":{},"70":{},"78":{},"83":{},"87":{},"92":{},"98":{},"104":{}},"component":{}}],["sign",{"_index":1079,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["signal",{"_index":1041,"title":{},"name":{},"text":{"8":{},"12":{},"19":{},"27":{},"31":{},"37":{},"44":{},"48":{},"55":{},"62":{},"66":{},"73":{},"84":{},"88":{},"94":{}},"component":{}}],["signatur",{"_index":1071,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["signifi",{"_index":2821,"title":{},"name":{},"text":{"112":{}},"component":{}}],["significantli",{"_index":906,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"106":{},"107":{}},"component":{}}],["similar",{"_index":2282,"title":{},"name":{},"text":{"76":{}},"component":{}}],["simpl",{"_index":191,"title":{},"name":{},"text":{"2":{},"4":{},"5":{},"7":{},"8":{},"17":{},"21":{},"23":{},"24":{},"26":{},"27":{},"36":{},"39":{},"41":{},"43":{},"44":{},"54":{},"57":{},"59":{},"61":{},"62":{},"72":{},"78":{},"80":{},"81":{},"83":{},"84":{},"93":{},"96":{},"97":{},"102":{},"103":{},"108":{},"112":{}},"component":{}}],["simpli",{"_index":2385,"title":{},"name":{},"text":{"95":{},"106":{},"116":{}},"component":{}}],["simplifi",{"_index":848,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["simultan",{"_index":50,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["singl",{"_index":17,"title":{},"name":{},"text":{"1":{},"5":{},"7":{},"15":{},"17":{},"20":{},"24":{},"26":{},"34":{},"36":{},"38":{},"43":{},"51":{},"53":{},"54":{},"56":{},"61":{},"69":{},"71":{},"72":{},"74":{},"81":{},"83":{},"91":{},"93":{},"96":{},"101":{},"103":{},"105":{}},"component":{}}],["singular",{"_index":922,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["sink",{"_index":502,"title":{},"name":{},"text":{"4":{},"5":{},"23":{},"24":{},"41":{},"59":{},"80":{},"81":{}},"component":{}}],["sink_0::alpha=1.0",{"_index":1951,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["sink_0::xpos=1280",{"_index":1953,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["sink_0::zorder=2",{"_index":1952,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["sink_1::alpha=1.0",{"_index":1954,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["sink_1::zorder=1",{"_index":1955,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["sit",{"_index":498,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["site=(string)mpeg2",{"_index":2213,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["site={color_rang",{"_index":1961,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["situaion",{"_index":2654,"title":{},"name":{},"text":{"106":{}},"component":{}}],["situat",{"_index":2660,"title":{},"name":{},"text":{"106":{},"107":{},"109":{},"116":{}},"component":{}}],["size",{"_index":511,"title":{},"name":{},"text":{"4":{},"8":{},"11":{},"13":{},"14":{},"23":{},"27":{},"30":{},"32":{},"33":{},"41":{},"44":{},"47":{},"49":{},"50":{},"59":{},"62":{},"65":{},"67":{},"68":{},"80":{},"84":{},"87":{},"89":{},"90":{},"114":{}},"component":{}}],["size=10000000",{"_index":1901,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["ski",{"_index":2523,"title":{},"name":{},"text":{"101":{}},"component":{}}],["skip",{"_index":2119,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"105":{}},"component":{}}],["skype",{"_index":2522,"title":{},"name":{},"text":{"101":{}},"component":{}}],["slam",{"_index":2662,"title":{},"name":{},"text":{"106":{}},"component":{}}],["slash",{"_index":1302,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["sleep",{"_index":1279,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"51":{},"65":{},"69":{},"87":{}},"component":{}}],["sleepybishop/nanor",{"_index":225,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["slice",{"_index":1742,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["slightli",{"_index":1376,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["slow",{"_index":2849,"title":{"115-1":{}},"name":{},"text":{"117":{}},"component":{}}],["slug",{"_index":2636,"title":{},"name":{},"text":{"105":{}},"component":{}}],["small",{"_index":591,"title":{},"name":{},"text":{"5":{},"7":{},"24":{},"26":{},"43":{},"61":{},"81":{},"83":{}},"component":{}}],["smaller",{"_index":2734,"title":{},"name":{},"text":{"108":{}},"component":{}}],["smart",{"_index":2765,"title":{},"name":{},"text":{"109":{}},"component":{}}],["smi",{"_index":1990,"title":{},"name":{},"text":{"17":{},"36":{},"93":{},"107":{}},"component":{}}],["smithay",{"_index":573,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["snippet",{"_index":2698,"title":{},"name":{},"text":{"106":{}},"component":{}}],["socket",{"_index":181,"title":{},"name":{},"text":{"2":{},"3":{},"15":{},"16":{},"21":{},"22":{},"34":{},"35":{},"39":{},"40":{},"51":{},"52":{},"57":{},"58":{},"69":{},"70":{},"78":{},"79":{},"91":{},"92":{},"96":{},"97":{},"101":{}},"component":{}}],["sof",{"_index":1465,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["softwar",{"_index":937,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"96":{},"105":{},"108":{},"110":{}},"component":{}}],["solomon",{"_index":221,"title":{},"name":{},"text":{"2":{},"12":{},"13":{},"21":{},"31":{},"32":{},"39":{},"48":{},"49":{},"57":{},"66":{},"67":{},"78":{},"88":{},"89":{}},"component":{}}],["solut",{"_index":87,"title":{},"name":{},"text":{"1":{},"5":{},"20":{},"24":{},"38":{},"56":{},"74":{},"81":{},"101":{},"115":{},"116":{},"117":{}},"component":{}}],["solv",{"_index":2854,"title":{},"name":{},"text":{"115":{}},"component":{}}],["solvabl",{"_index":2889,"title":{},"name":{},"text":{"117":{}},"component":{}}],["someth",{"_index":448,"title":{"101-1":{},"114-4":{}},"name":{},"text":{"3":{},"19":{},"22":{},"37":{},"40":{},"55":{},"58":{},"73":{},"79":{},"94":{},"106":{},"108":{},"110":{},"115":{}},"component":{}}],["somewher",{"_index":2677,"title":{},"name":{},"text":{"106":{},"109":{}},"component":{}}],["sound",{"_index":271,"title":{"3-2":{},"22-2":{},"40-2":{},"58-2":{},"79-2":{}},"name":{},"text":{"96":{},"106":{},"108":{}},"component":{}}],["sourc",{"_index":11,"title":{},"name":{},"text":{"1":{},"7":{},"15":{},"16":{},"20":{},"26":{},"35":{},"38":{},"43":{},"51":{},"52":{},"53":{},"56":{},"61":{},"69":{},"70":{},"71":{},"74":{},"83":{},"91":{},"92":{},"95":{},"101":{},"105":{},"107":{},"108":{}},"component":{}}],["source=nvidia",{"_index":2012,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["sp",{"_index":1749,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["space",{"_index":410,"title":{},"name":{},"text":{"3":{},"11":{},"22":{},"30":{},"40":{},"47":{},"58":{},"65":{},"79":{},"87":{},"105":{},"106":{}},"component":{}}],["spacescop",{"_index":1893,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["spec",{"_index":969,"title":{},"name":{"8":{},"27":{},"44":{},"62":{},"84":{}},"text":{"12":{},"31":{},"48":{},"66":{},"88":{}},"component":{}}],["special",{"_index":611,"title":{},"name":{},"text":{"5":{},"7":{},"24":{},"26":{},"43":{},"61":{},"81":{},"83":{},"101":{}},"component":{}}],["special_flag",{"_index":1412,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["specif",{"_index":82,"title":{"8":{},"27":{},"44":{},"62":{},"84":{},"14-2":{},"33-2":{},"50-2":{},"68-2":{},"90-2":{},"110-2":{}},"name":{},"text":{"1":{},"2":{},"4":{},"5":{},"7":{},"11":{},"13":{},"14":{},"17":{},"20":{},"21":{},"23":{},"24":{},"26":{},"30":{},"32":{},"33":{},"36":{},"38":{},"39":{},"41":{},"43":{},"47":{},"49":{},"50":{},"51":{},"54":{},"56":{},"57":{},"59":{},"61":{},"65":{},"67":{},"68":{},"69":{},"72":{},"74":{},"76":{},"78":{},"80":{},"81":{},"83":{},"87":{},"89":{},"90":{},"93":{},"95":{},"96":{},"97":{},"100":{},"105":{},"107":{},"114":{}},"component":{}}],["specifi",{"_index":1107,"title":{},"name":{},"text":{"10":{},"11":{},"13":{},"14":{},"29":{},"30":{},"32":{},"33":{},"46":{},"47":{},"49":{},"50":{},"64":{},"65":{},"67":{},"68":{},"86":{},"87":{},"89":{},"90":{},"98":{},"100":{},"101":{},"109":{},"112":{}},"component":{}}],["speed",{"_index":913,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["spin",{"_index":1965,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["splash",{"_index":2219,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["split",{"_index":507,"title":{},"name":{},"text":{"4":{},"5":{},"23":{},"24":{},"41":{},"59":{},"80":{},"81":{}},"component":{}}],["spotifi",{"_index":2520,"title":{},"name":{},"text":{"101":{}},"component":{}}],["src",{"_index":2634,"title":{},"name":{},"text":{"105":{}},"component":{}}],["src/core",{"_index":118,"title":{"2-2":{},"21-2":{},"39-2":{},"57-2":{},"78-2":{}},"name":{},"text":{},"component":{}}],["src/fake",{"_index":119,"title":{"2-3":{},"21-3":{},"39-3":{},"57-3":{},"78-3":{}},"name":{},"text":{},"component":{}}],["src/moonlight",{"_index":121,"title":{"2-4":{},"2-5":{},"21-4":{},"21-5":{},"39-4":{},"39-5":{},"57-4":{},"57-5":{},"78-4":{},"78-5":{}},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["ssl",{"_index":1100,"title":{},"name":{},"text":{"10":{},"29":{},"46":{},"64":{},"86":{}},"component":{}}],["stabl",{"_index":2816,"title":{},"name":{},"text":{"112":{}},"component":{}}],["stackoverflow.com",{"_index":1477,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["stacktrac",{"_index":790,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["stage",{"_index":939,"title":{},"name":{},"text":{"7":{},"9":{},"26":{},"28":{},"43":{},"45":{},"61":{},"63":{},"83":{},"85":{},"105":{}},"component":{}}],["standalon",{"_index":201,"title":{},"name":{},"text":{"2":{},"5":{},"21":{},"24":{},"78":{},"81":{}},"component":{}}],["standard",{"_index":2730,"title":{},"name":{},"text":{"107":{}},"component":{}}],["stargaz",{"_index":106,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["start",{"_index":554,"title":{"76-2":{}},"name":{},"text":{"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"13":{},"14":{},"15":{},"17":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"32":{},"33":{},"34":{},"36":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"49":{},"50":{},"51":{},"53":{},"54":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"67":{},"68":{},"69":{},"71":{},"72":{},"75":{},"76":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"89":{},"90":{},"91":{},"93":{},"95":{},"104":{},"105":{},"106":{},"108":{},"109":{},"115":{}},"component":{}}],["start/stop",{"_index":2800,"title":{},"name":{},"text":{"111":{}},"component":{}}],["start_a",{"_index":1005,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["start_b",{"_index":1007,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["start_virtual_compositor",{"_index":2142,"title":{},"name":{},"text":{"18":{},"34":{},"51":{},"69":{},"76":{},"77":{},"105":{}},"component":{}}],["starting/upd",{"_index":2847,"title":{},"name":{},"text":{"114":{}},"component":{}}],["startup",{"_index":2228,"title":{"105-17":{}},"name":{},"text":{"51":{},"69":{},"105":{}},"component":{}}],["startup.sh",{"_index":2386,"title":{},"name":{},"text":{"95":{},"105":{}},"component":{}}],["stat",{"_index":2150,"title":{},"name":{},"text":{"18":{},"77":{},"115":{}},"component":{}}],["state",{"_index":883,"title":{"97-1":{}},"name":{},"text":{"7":{},"15":{},"26":{},"34":{},"43":{},"51":{},"61":{},"69":{},"83":{},"91":{},"116":{}},"component":{}}],["stateless",{"_index":168,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["statu",{"_index":1784,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{},"117":{}},"component":{}}],["steam",{"_index":583,"title":{"18":{},"77":{},"114":{},"15-15":{},"18-1":{},"18-3":{},"34-15":{},"77-1":{},"77-3":{},"91-15":{},"114-1":{},"114-2":{}},"name":{"18":{},"77":{},"114":{}},"text":{"5":{},"8":{},"15":{},"18":{},"24":{},"27":{},"34":{},"44":{},"51":{},"62":{},"69":{},"75":{},"77":{},"81":{},"84":{},"101":{},"103":{},"108":{},"111":{},"112":{},"114":{}},"component":{}}],["steam.adoc",{"_index":2371,"title":{},"name":{},"text":{"91":{}},"component":{}}],["steam_startup_flags=steam://rungameid/1245620",{"_index":2146,"title":{},"name":{},"text":{"18":{},"34":{},"77":{}},"component":{}}],["steamid",{"_index":2637,"title":{},"name":{},"text":{"105":{}},"component":{}}],["steam’",{"_index":2832,"title":{},"name":{},"text":{"114":{}},"component":{}}],["step",{"_index":375,"title":{"98-1":{},"104-7":{},"105-4":{},"105-5":{},"105-6":{},"105-7":{}},"name":{},"text":{"3":{},"7":{},"9":{},"19":{},"22":{},"26":{},"28":{},"37":{},"40":{},"43":{},"45":{},"58":{},"61":{},"63":{},"75":{},"79":{},"83":{},"85":{},"94":{},"98":{},"100":{},"106":{},"110":{}},"component":{}}],["stereo",{"_index":1441,"title":{},"name":{},"text":{"12":{},"31":{},"48":{},"66":{},"88":{}},"component":{}}],["stick",{"_index":1383,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["still",{"_index":320,"title":{},"name":{},"text":{"3":{},"7":{},"18":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"77":{},"79":{},"83":{},"96":{},"106":{},"108":{},"112":{},"115":{},"116":{},"117":{}},"component":{}}],["stop",{"_index":1814,"title":{},"name":{},"text":{"15":{},"17":{},"34":{},"36":{},"51":{},"53":{},"54":{},"69":{},"71":{},"72":{},"91":{},"93":{},"97":{}},"component":{}}],["storag",{"_index":2267,"title":{},"name":{},"text":{"53":{},"71":{},"105":{}},"component":{}}],["store",{"_index":1066,"title":{"15-2":{},"34-2":{},"91-2":{}},"name":{},"text":{"9":{},"15":{},"28":{},"34":{},"45":{},"51":{},"63":{},"69":{},"85":{},"91":{},"97":{},"105":{},"108":{}},"component":{}}],["straight",{"_index":834,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["straightforward",{"_index":2375,"title":{},"name":{},"text":{"95":{},"108":{}},"component":{}}],["stream",{"_index":12,"title":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{},"5-6":{},"16-3":{},"16-5":{},"16-6":{},"24-6":{},"35-3":{},"35-5":{},"35-6":{},"52-3":{},"52-5":{},"52-6":{},"70-3":{},"70-5":{},"70-6":{},"81-6":{},"92-3":{},"92-5":{},"92-6":{},"96-1":{}},"name":{},"text":{"1":{},"3":{},"4":{},"5":{},"7":{},"8":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"19":{},"20":{},"22":{},"23":{},"24":{},"26":{},"27":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"37":{},"38":{},"40":{},"41":{},"43":{},"44":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"55":{},"56":{},"58":{},"59":{},"61":{},"62":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"73":{},"74":{},"75":{},"79":{},"80":{},"81":{},"83":{},"84":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"94":{},"96":{},"101":{},"108":{},"110":{},"112":{},"115":{},"116":{}},"component":{}}],["streamer",{"_index":2499,"title":{},"name":{},"text":{"100":{},"112":{}},"component":{}}],["strictli",{"_index":174,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["string",{"_index":628,"title":{},"name":{},"text":{"5":{},"13":{},"14":{},"24":{},"32":{},"33":{},"49":{},"50":{},"67":{},"68":{},"81":{},"89":{},"90":{}},"component":{}}],["strip",{"_index":714,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["structur",{"_index":125,"title":{"2":{},"21":{},"39":{},"57":{},"78":{},"76-3":{},"105-15":{}},"name":{"2":{},"21":{},"39":{},"57":{},"78":{}},"text":{"2":{},"4":{},"14":{},"15":{},"21":{},"23":{},"33":{},"34":{},"39":{},"41":{},"50":{},"57":{},"59":{},"68":{},"76":{},"78":{},"80":{},"90":{},"91":{},"105":{}},"component":{}}],["stuff",{"_index":464,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["style=color",{"_index":1894,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["subdirectori",{"_index":2287,"title":{},"name":{},"text":{"76":{}},"component":{}}],["submit",{"_index":2378,"title":{},"name":{},"text":{"95":{}},"component":{}}],["subpag",{"_index":2276,"title":{},"name":{},"text":{"75":{}},"component":{}}],["subsect",{"_index":2689,"title":{},"name":{},"text":{"106":{}},"component":{}}],["substitut",{"_index":2439,"title":{},"name":{},"text":{"97":{}},"component":{}}],["subsystem==\"misc",{"_index":2105,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["subsystem=input",{"_index":334,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["subsystems==\"input",{"_index":2111,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["succesfulli",{"_index":2239,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["successfulli",{"_index":1096,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"51":{},"63":{},"69":{},"85":{}},"component":{}}],["such",{"_index":858,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"75":{},"83":{},"105":{},"108":{},"110":{}},"component":{}}],["sudo",{"_index":445,"title":{},"name":{},"text":{"3":{},"17":{},"19":{},"22":{},"36":{},"37":{},"40":{},"54":{},"55":{},"58":{},"72":{},"73":{},"79":{},"93":{},"94":{},"100":{},"107":{},"115":{}},"component":{}}],["suggest",{"_index":545,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["suit",{"_index":2354,"title":{},"name":{},"text":{"76":{},"97":{}},"component":{}}],["sum",{"_index":1421,"title":{},"name":{},"text":{"11":{},"13":{},"30":{},"32":{},"47":{},"49":{},"65":{},"67":{},"87":{},"89":{}},"component":{}}],["summari",{"_index":2178,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{},"106":{}},"component":{}}],["sunshin",{"_index":90,"title":{},"name":{},"text":{"1":{},"19":{},"20":{},"37":{},"38":{},"55":{},"56":{},"73":{},"74":{},"94":{},"96":{},"98":{},"101":{},"104":{},"108":{},"112":{},"115":{},"117":{}},"component":{}}],["super",{"_index":2598,"title":{},"name":{},"text":{"105":{}},"component":{}}],["superflu",{"_index":2647,"title":{},"name":{},"text":{"105":{}},"component":{}}],["supertux",{"_index":2550,"title":{"105-16":{}},"name":{},"text":{"105":{}},"component":{}}],["supertux.sh",{"_index":2549,"title":{"105-11":{}},"name":{},"text":{"105":{}},"component":{}}],["supplement",{"_index":1745,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["suppli",{"_index":2508,"title":{},"name":{},"text":{"101":{},"106":{},"112":{}},"component":{}}],["support",{"_index":41,"title":{"5-4":{},"17-3":{},"24-4":{},"36-3":{},"54-3":{},"72-3":{},"81-4":{},"93-3":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"7":{},"8":{},"11":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"27":{},"30":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"43":{},"44":{},"47":{},"51":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"61":{},"62":{},"65":{},"69":{},"72":{},"73":{},"74":{},"76":{},"78":{},"79":{},"80":{},"81":{},"83":{},"84":{},"87":{},"91":{},"93":{},"94":{},"96":{},"97":{},"101":{},"104":{},"105":{},"106":{},"107":{},"108":{},"111":{},"112":{},"113":{},"114":{},"116":{}},"component":{}}],["support_hevc",{"_index":2230,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["sure",{"_index":354,"title":{},"name":{},"text":{"3":{},"6":{},"9":{},"15":{},"17":{},"19":{},"22":{},"25":{},"28":{},"34":{},"36":{},"37":{},"40":{},"42":{},"45":{},"54":{},"55":{},"58":{},"60":{},"63":{},"72":{},"73":{},"79":{},"82":{},"85":{},"91":{},"93":{},"94":{},"95":{},"96":{},"97":{},"100":{},"103":{},"104":{},"106":{},"107":{},"114":{},"115":{}},"component":{}}],["surfac",{"_index":886,"title":{},"name":{},"text":{"7":{},"19":{},"26":{},"37":{},"43":{},"55":{},"61":{},"73":{},"83":{},"94":{}},"component":{}}],["surprisingli",{"_index":2841,"title":{},"name":{},"text":{"114":{}},"component":{}}],["surround",{"_index":1766,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["sway",{"_index":2564,"title":{},"name":{},"text":{"105":{}},"component":{}}],["switch",{"_index":522,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{},"108":{}},"component":{}}],["syntax",{"_index":1734,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["sys/class/drm/renderd*/device/driv",{"_index":2262,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["sys/class/drm/renderd128/device/driv",{"_index":2263,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["sys/class/drm/renderd129/device/driv",{"_index":1841,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["sys/module/nvidia/vers",{"_index":2008,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["sys/module/nvidia_drm/parameters/modeset",{"_index":2021,"title":{},"name":{},"text":{"17":{},"19":{},"36":{},"37":{},"54":{},"55":{},"72":{},"73":{},"93":{},"94":{}},"component":{}}],["sys_admin",{"_index":2253,"title":{},"name":{},"text":{"51":{},"69":{},"76":{},"105":{}},"component":{}}],["sys_nic",{"_index":2254,"title":{},"name":{},"text":{"51":{},"69":{},"76":{},"105":{}},"component":{}}],["sysrq",{"_index":1213,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["system",{"_index":596,"title":{"100-4":{}},"name":{},"text":{"5":{},"6":{},"7":{},"16":{},"17":{},"19":{},"24":{},"25":{},"26":{},"35":{},"36":{},"37":{},"42":{},"43":{},"52":{},"54":{},"60":{},"61":{},"70":{},"72":{},"76":{},"81":{},"82":{},"83":{},"92":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"100":{},"105":{},"108":{},"109":{},"110":{},"112":{},"113":{},"114":{},"115":{},"116":{},"117":{}},"component":{}}],["system.yml",{"_index":2568,"title":{},"name":{},"text":{"105":{}},"component":{}}],["t",{"_index":1263,"title":{},"name":{},"text":{"11":{},"16":{},"17":{},"30":{},"35":{},"36":{},"47":{},"52":{},"54":{},"65":{},"70":{},"72":{},"87":{},"92":{},"93":{},"100":{},"105":{}},"component":{}}],["tab",{"_index":1172,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["tabl",{"_index":1121,"title":{},"name":{},"text":{"11":{},"12":{},"13":{},"30":{},"31":{},"32":{},"47":{},"48":{},"49":{},"65":{},"66":{},"67":{},"76":{},"87":{},"88":{},"89":{}},"component":{}}],["tag",{"_index":983,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{},"100":{}},"component":{}}],["tag+=\"uaccess",{"_index":2110,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["take",{"_index":108,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"7":{},"12":{},"13":{},"19":{},"20":{},"21":{},"22":{},"26":{},"31":{},"32":{},"37":{},"38":{},"39":{},"40":{},"43":{},"48":{},"49":{},"53":{},"55":{},"56":{},"57":{},"58":{},"61":{},"66":{},"67":{},"71":{},"73":{},"74":{},"78":{},"79":{},"83":{},"88":{},"89":{},"94":{},"99":{},"106":{},"112":{},"113":{},"116":{}},"component":{}}],["taken",{"_index":1916,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["talk",{"_index":2804,"title":{},"name":{},"text":{"112":{}},"component":{}}],["tamper",{"_index":985,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{},"100":{}},"component":{}}],["target",{"_index":1772,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["tast",{"_index":2425,"title":{},"name":{},"text":{"97":{}},"component":{}}],["tcp",{"_index":1099,"title":{},"name":{},"text":{"10":{},"14":{},"15":{},"29":{},"33":{},"34":{},"46":{},"50":{},"51":{},"64":{},"68":{},"69":{},"86":{},"90":{},"91":{}},"component":{}}],["tee",{"_index":1897,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["tell",{"_index":896,"title":{},"name":{},"text":{"7":{},"12":{},"13":{},"15":{},"26":{},"31":{},"32":{},"34":{},"43":{},"48":{},"49":{},"51":{},"61":{},"66":{},"67":{},"69":{},"83":{},"88":{},"89":{},"91":{},"107":{},"109":{},"112":{}},"component":{}}],["templat",{"_index":2509,"title":{},"name":{},"text":{"101":{},"104":{}},"component":{}}],["termin",{"_index":1017,"title":{},"name":{},"text":{"8":{},"19":{},"27":{},"37":{},"44":{},"55":{},"62":{},"73":{},"84":{},"94":{}},"component":{}}],["test",{"_index":123,"title":{"2-6":{},"21-6":{},"39-6":{},"57-6":{},"78-6":{}},"name":{},"text":{"2":{},"6":{},"7":{},"15":{},"16":{},"17":{},"21":{},"25":{},"26":{},"35":{},"36":{},"39":{},"42":{},"43":{},"51":{},"52":{},"57":{},"60":{},"61":{},"69":{},"70":{},"78":{},"82":{},"83":{},"91":{},"92":{},"93":{},"106":{},"107":{},"108":{}},"component":{}}],["tests/cmakelists.txt",{"_index":265,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["text",{"_index":436,"title":{},"name":{},"text":{"3":{},"14":{},"22":{},"33":{},"40":{},"50":{},"58":{},"68":{},"79":{},"90":{},"112":{}},"component":{}}],["textur",{"_index":861,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["thank",{"_index":460,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"18":{},"22":{},"24":{},"26":{},"34":{},"40":{},"43":{},"58":{},"61":{},"77":{},"79":{},"81":{},"83":{},"99":{}},"component":{}}],["that’",{"_index":474,"title":{},"name":{},"text":{"3":{},"7":{},"17":{},"22":{},"26":{},"36":{},"40":{},"43":{},"51":{},"54":{},"58":{},"61":{},"69":{},"72":{},"79":{},"83":{},"93":{},"96":{},"100":{},"106":{},"115":{}},"component":{}}],["theme",{"_index":2279,"title":{"76-10":{}},"name":{},"text":{"76":{}},"component":{}}],["themselv",{"_index":2484,"title":{},"name":{},"text":{"100":{}},"component":{}}],["theori",{"_index":835,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"108":{}},"component":{}}],["therefor",{"_index":2485,"title":{},"name":{},"text":{"100":{},"114":{},"116":{}},"component":{}}],["there’",{"_index":358,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"18":{},"22":{},"24":{},"26":{},"40":{},"43":{},"58":{},"61":{},"77":{},"79":{},"81":{},"83":{},"100":{}},"component":{}}],["they’ll",{"_index":1467,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["they’r",{"_index":2515,"title":{},"name":{},"text":{"101":{},"106":{}},"component":{}}],["thing",{"_index":581,"title":{},"name":{},"text":{"5":{},"6":{},"7":{},"17":{},"19":{},"24":{},"25":{},"26":{},"36":{},"37":{},"42":{},"43":{},"54":{},"55":{},"60":{},"61":{},"72":{},"73":{},"81":{},"82":{},"83":{},"93":{},"94":{},"105":{},"111":{},"113":{},"117":{}},"component":{}}],["think",{"_index":2506,"title":{},"name":{},"text":{"101":{},"112":{}},"component":{}}],["third",{"_index":2510,"title":{},"name":{},"text":{"101":{}},"component":{}}],["those",{"_index":327,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{},"97":{},"100":{},"108":{},"112":{},"116":{},"117":{}},"component":{}}],["though",{"_index":378,"title":{},"name":{},"text":{"3":{},"5":{},"22":{},"24":{},"40":{},"58":{},"79":{},"81":{},"106":{},"108":{},"117":{}},"component":{}}],["thread",{"_index":149,"title":{},"name":{},"text":{"2":{},"6":{},"21":{},"25":{},"39":{},"42":{},"57":{},"60":{},"78":{},"82":{}},"component":{}}],["three",{"_index":1480,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["through",{"_index":904,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"76":{},"83":{}},"component":{}}],["throw",{"_index":2187,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["thrown",{"_index":1831,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["thu",{"_index":2746,"title":{},"name":{},"text":{"108":{}},"component":{}}],["ti",{"_index":175,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{},"108":{},"112":{}},"component":{}}],["time",{"_index":301,"title":{"97-2":{}},"name":{},"text":{"3":{},"7":{},"11":{},"15":{},"17":{},"19":{},"22":{},"26":{},"30":{},"34":{},"36":{},"37":{},"40":{},"43":{},"47":{},"51":{},"54":{},"55":{},"58":{},"61":{},"65":{},"69":{},"72":{},"73":{},"79":{},"83":{},"87":{},"91":{},"93":{},"94":{},"97":{},"98":{},"99":{},"101":{},"106":{},"107":{},"112":{},"113":{}},"component":{}}],["time_zon",{"_index":2433,"title":{},"name":{},"text":{"97":{}},"component":{}}],["timestamp=tru",{"_index":1907,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["tip",{"_index":2139,"title":{},"name":{},"text":{"18":{},"34":{},"77":{}},"component":{}}],["tireless",{"_index":115,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["titl",{"_index":1837,"title":{},"name":{},"text":{"15":{},"16":{},"18":{},"34":{},"35":{},"51":{},"52":{},"69":{},"70":{},"76":{},"77":{},"91":{},"92":{},"105":{},"114":{}},"component":{}}],["tmp/socket",{"_index":1805,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["tmp/sockets:/tmp/sockets:rw",{"_index":1971,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["toc",{"_index":1438,"title":{},"name":{},"text":{"12":{},"31":{},"48":{},"66":{},"88":{}},"component":{}}],["todo",{"_index":2244,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["togeth",{"_index":275,"title":{"3-7":{},"22-7":{},"40-7":{},"58-7":{},"79-7":{}},"name":{},"text":{"5":{},"13":{},"24":{},"32":{},"49":{},"67":{},"81":{},"89":{},"96":{},"108":{},"112":{}},"component":{}}],["toggl",{"_index":2861,"title":{},"name":{},"text":{"115":{}},"component":{}}],["toml",{"_index":1787,"title":{"15-5":{},"34-5":{},"51-2":{},"69-2":{},"91-5":{}},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["took",{"_index":2137,"title":{},"name":{},"text":{"18":{},"77":{}},"component":{}}],["tool",{"_index":83,"title":{},"name":{},"text":{"1":{},"2":{},"6":{},"15":{},"17":{},"20":{},"21":{},"25":{},"34":{},"36":{},"38":{},"39":{},"42":{},"51":{},"54":{},"56":{},"57":{},"60":{},"69":{},"72":{},"74":{},"78":{},"82":{},"91":{},"93":{},"95":{},"106":{}},"component":{}}],["toolkit",{"_index":1967,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"107":{}},"component":{}}],["top",{"_index":193,"title":{},"name":{},"text":{"2":{},"15":{},"21":{},"39":{},"51":{},"57":{},"69":{},"78":{},"91":{},"96":{},"101":{},"116":{},"117":{}},"component":{}}],["total",{"_index":1472,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"107":{}},"component":{}}],["touch",{"_index":1113,"title":{"11-7":{},"11-14":{},"30-7":{},"30-14":{},"47-7":{},"47-14":{},"65-7":{},"65-14":{},"87-7":{},"87-14":{}},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["touchpad",{"_index":1372,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["trace",{"_index":1794,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["track",{"_index":2786,"title":{},"name":{},"text":{"110":{}},"component":{}}],["tracker",{"_index":2370,"title":{},"name":{},"text":{"76":{}},"component":{}}],["transfer",{"_index":874,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["transform",{"_index":531,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["transit",{"_index":940,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["translat",{"_index":2408,"title":{},"name":{},"text":{"96":{}},"component":{}}],["transmiss",{"_index":1445,"title":{},"name":{},"text":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{}},"component":{}}],["tree",{"_index":267,"title":{"3-2":{},"22-2":{},"40-2":{},"58-2":{},"79-2":{}},"name":{},"text":{},"component":{}}],["tri",{"_index":88,"title":{},"name":{},"text":{"1":{},"2":{},"5":{},"7":{},"15":{},"16":{},"19":{},"20":{},"21":{},"24":{},"26":{},"35":{},"37":{},"38":{},"39":{},"43":{},"51":{},"52":{},"55":{},"56":{},"57":{},"61":{},"69":{},"70":{},"73":{},"74":{},"78":{},"81":{},"83":{},"91":{},"92":{},"94":{},"96":{},"106":{},"109":{},"110":{},"112":{},"115":{}},"component":{}}],["trick",{"_index":424,"title":{},"name":{},"text":{"3":{},"7":{},"16":{},"22":{},"26":{},"35":{},"40":{},"43":{},"52":{},"58":{},"61":{},"70":{},"79":{},"83":{},"92":{}},"component":{}}],["tricki",{"_index":2876,"title":{},"name":{},"text":{"116":{}},"component":{}}],["trigger",{"_index":290,"title":{"8-6":{},"27-6":{},"44-6":{},"62-6":{},"84-6":{}},"name":{},"text":{"3":{},"8":{},"10":{},"11":{},"17":{},"22":{},"27":{},"29":{},"30":{},"36":{},"40":{},"44":{},"46":{},"47":{},"54":{},"58":{},"62":{},"64":{},"65":{},"72":{},"79":{},"84":{},"86":{},"87":{},"93":{}},"component":{}}],["trivial",{"_index":521,"title":{},"name":{},"text":{"4":{},"5":{},"23":{},"24":{},"41":{},"59":{},"80":{},"81":{}},"component":{}}],["troubl",{"_index":2714,"title":{},"name":{},"text":{"107":{},"115":{}},"component":{}}],["troubleshoot",{"_index":2161,"title":{"19":{},"37":{},"55":{},"73":{},"94":{},"115":{},"76-11":{}},"name":{"19":{},"37":{},"55":{},"73":{},"94":{},"115":{}},"text":{"76":{},"98":{},"104":{}},"component":{}}],["true",{"_index":1811,"title":{},"name":{},"text":{"15":{},"17":{},"18":{},"34":{},"36":{},"51":{},"54":{},"69":{},"72":{},"76":{},"77":{},"91":{},"93":{},"101":{},"105":{},"106":{},"115":{}},"component":{}}],["trueli",{"_index":954,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["trust",{"_index":2470,"title":{"100-2":{}},"name":{},"text":{"100":{},"101":{}},"component":{}}],["tsdemux",{"_index":1939,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["turn",{"_index":326,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"11":{},"22":{},"23":{},"26":{},"30":{},"40":{},"41":{},"43":{},"47":{},"58":{},"59":{},"61":{},"65":{},"79":{},"80":{},"83":{},"87":{},"105":{}},"component":{}}],["tutori",{"_index":550,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["tux",{"_index":2599,"title":{},"name":{},"text":{"105":{}},"component":{}}],["tweak",{"_index":2445,"title":{},"name":{},"text":{"97":{}},"component":{}}],["twitch",{"_index":1871,"title":{"16-6":{},"35-6":{},"52-6":{},"70-6":{},"92-6":{}},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["twitch.tv",{"_index":1930,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["two",{"_index":278,"title":{},"name":{},"text":{"3":{},"4":{},"8":{},"13":{},"14":{},"15":{},"22":{},"23":{},"27":{},"32":{},"33":{},"40":{},"41":{},"44":{},"49":{},"50":{},"51":{},"58":{},"59":{},"62":{},"67":{},"68":{},"69":{},"79":{},"80":{},"84":{},"89":{},"90":{},"91":{},"96":{},"100":{},"108":{},"113":{},"116":{}},"component":{}}],["txt",{"_index":2672,"title":{},"name":{},"text":{"106":{}},"component":{}}],["type",{"_index":952,"title":{},"name":{},"text":{"7":{},"8":{},"11":{},"13":{},"14":{},"15":{},"26":{},"27":{},"30":{},"32":{},"33":{},"34":{},"43":{},"44":{},"47":{},"49":{},"50":{},"51":{},"61":{},"62":{},"65":{},"67":{},"68":{},"69":{},"76":{},"83":{},"84":{},"87":{},"89":{},"90":{},"91":{},"105":{},"109":{},"112":{}},"component":{}}],["typic",{"_index":856,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"97":{}},"component":{}}],["tz",{"_index":2434,"title":{},"name":{},"text":{"97":{}},"component":{}}],["u",{"_index":1265,"title":{},"name":{},"text":{"11":{},"19":{},"30":{},"37":{},"47":{},"65":{},"87":{},"94":{}},"component":{}}],["ubuntu",{"_index":2394,"title":{},"name":{},"text":{"95":{},"110":{}},"component":{}}],["udev",{"_index":120,"title":{"2-3":{},"3-3":{},"3-4":{},"3-5":{},"3-6":{},"5-4":{},"21-3":{},"22-3":{},"22-4":{},"22-5":{},"22-6":{},"24-4":{},"39-3":{},"40-3":{},"40-4":{},"40-5":{},"40-6":{},"57-3":{},"58-3":{},"58-4":{},"58-5":{},"58-6":{},"78-3":{},"79-3":{},"79-4":{},"79-5":{},"79-6":{},"81-4":{}},"name":{"3":{},"22":{},"40":{},"58":{},"79":{}},"text":{"2":{},"3":{},"5":{},"15":{},"17":{},"21":{},"22":{},"24":{},"34":{},"36":{},"39":{},"40":{},"51":{},"54":{},"57":{},"58":{},"69":{},"72":{},"78":{},"79":{},"81":{},"91":{},"93":{},"112":{},"116":{}},"component":{}}],["udevadm",{"_index":446,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"93":{}},"component":{}}],["udevd",{"_index":401,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["udevd_network",{"_index":2514,"title":{},"name":{},"text":{"101":{},"115":{}},"component":{}}],["udp",{"_index":501,"title":{},"name":{},"text":{"4":{},"8":{},"10":{},"13":{},"23":{},"27":{},"29":{},"32":{},"41":{},"44":{},"46":{},"49":{},"59":{},"62":{},"64":{},"67":{},"80":{},"84":{},"86":{},"89":{}},"component":{}}],["udp/tcp",{"_index":523,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["uhid",{"_index":594,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["ui",{"_index":2238,"title":{"114-2":{}},"name":{},"text":{"51":{},"69":{},"105":{},"114":{}},"component":{}}],["uid",{"_index":2430,"title":{},"name":{},"text":{"97":{}},"component":{}}],["uinput",{"_index":593,"title":{"104-4":{},"110-1":{},"110-7":{}},"name":{},"text":{"5":{},"17":{},"24":{},"36":{},"54":{},"72":{},"81":{},"93":{},"96":{},"110":{},"115":{},"117":{}},"component":{}}],["uinput/uhid",{"_index":2076,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["unabl",{"_index":810,"title":{"19-4":{},"37-4":{},"55-4":{},"73-4":{},"94-4":{}},"name":{},"text":{"6":{},"19":{},"25":{},"37":{},"42":{},"55":{},"60":{},"73":{},"82":{},"94":{}},"component":{}}],["unattend",{"_index":2788,"title":{},"name":{},"text":{"110":{}},"component":{}}],["uncom",{"_index":2496,"title":{},"name":{},"text":{"100":{}},"component":{}}],["under",{"_index":251,"title":{},"name":{},"text":{"2":{},"3":{},"6":{},"15":{},"17":{},"21":{},"22":{},"25":{},"36":{},"39":{},"40":{},"42":{},"51":{},"53":{},"54":{},"57":{},"58":{},"60":{},"69":{},"71":{},"72":{},"78":{},"79":{},"82":{},"91":{},"93":{},"106":{},"107":{}},"component":{}}],["underli",{"_index":2805,"title":{},"name":{},"text":{"112":{}},"component":{}}],["understand",{"_index":1738,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"99":{},"111":{}},"component":{}}],["undesir",{"_index":2655,"title":{},"name":{},"text":{"106":{}},"component":{}}],["unencrypt",{"_index":1086,"title":{},"name":{},"text":{"9":{},"10":{},"28":{},"29":{},"45":{},"46":{},"63":{},"64":{},"85":{},"86":{}},"component":{}}],["unfortun",{"_index":357,"title":{},"name":{},"text":{"3":{},"17":{},"22":{},"36":{},"40":{},"54":{},"58":{},"72":{},"79":{},"93":{},"101":{},"109":{},"117":{}},"component":{}}],["unifi",{"_index":2284,"title":{},"name":{},"text":{"76":{}},"component":{}}],["uniqu",{"_index":1739,"title":{},"name":{},"text":{"13":{},"15":{},"32":{},"34":{},"49":{},"67":{},"89":{},"91":{}},"component":{}}],["unit",{"_index":249,"title":{"13-7":{},"32-7":{},"49-7":{},"67-7":{},"89-7":{}},"name":{},"text":{"2":{},"13":{},"21":{},"32":{},"39":{},"49":{},"57":{},"67":{},"78":{},"89":{}},"component":{}}],["unknown",{"_index":1365,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["unless",{"_index":1987,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["unlik",{"_index":1781,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["unlock",{"_index":2869,"title":{},"name":{},"text":{"115":{}},"component":{}}],["unplug",{"_index":279,"title":{},"name":{},"text":{"3":{},"11":{},"22":{},"30":{},"40":{},"47":{},"58":{},"65":{},"79":{},"87":{},"106":{}},"component":{}}],["unprivileg",{"_index":2075,"title":{},"name":{},"text":{"17":{},"36":{},"93":{}},"component":{}}],["unraid",{"_index":2427,"title":{},"name":{},"text":{"97":{},"110":{},"113":{}},"component":{}}],["unsign",{"_index":988,"title":{},"name":{},"text":{"8":{},"27":{},"44":{},"62":{},"84":{}},"component":{}}],["unstructur",{"_index":1758,"title":{},"name":{},"text":{"14":{},"33":{},"50":{},"68":{},"90":{}},"component":{}}],["unsur",{"_index":2750,"title":{},"name":{},"text":{"108":{},"113":{}},"component":{}}],["until",{"_index":837,"title":{},"name":{},"text":{"7":{},"8":{},"26":{},"27":{},"43":{},"44":{},"61":{},"62":{},"83":{},"84":{},"97":{}},"component":{}}],["untouch",{"_index":2802,"title":{},"name":{},"text":{"112":{}},"component":{}}],["untrust",{"_index":1053,"title":{},"name":{},"text":{"9":{},"28":{},"45":{},"63":{},"85":{}},"component":{}}],["up",{"_index":27,"title":{"76-4":{},"76-6":{}},"name":{},"text":{"1":{},"3":{},"6":{},"7":{},"10":{},"11":{},"17":{},"20":{},"22":{},"25":{},"26":{},"29":{},"30":{},"36":{},"38":{},"40":{},"42":{},"43":{},"46":{},"47":{},"51":{},"54":{},"56":{},"58":{},"60":{},"61":{},"64":{},"65":{},"69":{},"72":{},"74":{},"76":{},"79":{},"82":{},"83":{},"86":{},"87":{},"93":{},"97":{},"98":{},"100":{},"105":{},"106":{},"107":{},"109":{},"110":{},"112":{},"113":{}},"component":{}}],["updat",{"_index":877,"title":{},"name":{},"text":{"7":{},"17":{},"19":{},"26":{},"36":{},"37":{},"43":{},"54":{},"55":{},"61":{},"72":{},"73":{},"83":{},"93":{},"94":{},"95":{},"97":{},"104":{},"115":{},"116":{}},"component":{}}],["upon",{"_index":2578,"title":{},"name":{},"text":{"105":{}},"component":{}}],["upstream",{"_index":818,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["url",{"_index":1934,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["us",{"_index":49,"title":{"101":{},"3-3":{},"19-3":{},"22-3":{},"37-3":{},"40-3":{},"55-3":{},"58-3":{},"73-3":{},"79-3":{},"94-3":{},"101-1":{},"105-7":{},"105-14":{},"106-2":{},"106-3":{},"107-1":{},"115-3":{}},"name":{"101":{}},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"72":{},"73":{},"74":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"100":{},"101":{},"102":{},"104":{},"105":{},"106":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"116":{}},"component":{}}],["usabl",{"_index":173,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{},"96":{}},"component":{}}],["usag",{"_index":2803,"title":{},"name":{},"text":{"112":{}},"component":{}}],["use_sway=1",{"_index":2565,"title":{},"name":{},"text":{"105":{}},"component":{}}],["usedisplaydevic",{"_index":2684,"title":{},"name":{},"text":{"106":{}},"component":{}}],["user",{"_index":31,"title":{"97-3":{},"110-4":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"7":{},"9":{},"10":{},"11":{},"14":{},"17":{},"20":{},"21":{},"22":{},"23":{},"24":{},"26":{},"28":{},"29":{},"30":{},"33":{},"36":{},"38":{},"39":{},"40":{},"41":{},"43":{},"45":{},"46":{},"47":{},"50":{},"51":{},"53":{},"54":{},"56":{},"57":{},"58":{},"59":{},"61":{},"63":{},"64":{},"65":{},"68":{},"69":{},"71":{},"72":{},"74":{},"78":{},"79":{},"80":{},"81":{},"83":{},"85":{},"86":{},"87":{},"90":{},"93":{},"96":{},"97":{},"105":{},"110":{},"111":{},"115":{}},"component":{}}],["user+group",{"_index":2131,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["user.env",{"_index":2436,"title":{},"name":{},"text":{"97":{},"115":{}},"component":{}}],["user:quickstart.adoc#_virtual_devices_support",{"_index":607,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["usermod",{"_index":2100,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["usernam",{"_index":2454,"title":{},"name":{},"text":{"98":{},"104":{}},"component":{}}],["userspac",{"_index":379,"title":{},"name":{},"text":{"3":{},"7":{},"22":{},"26":{},"40":{},"43":{},"58":{},"61":{},"79":{},"83":{}},"component":{}}],["usr/bin/myapp",{"_index":2393,"title":{},"name":{},"text":{"95":{}},"component":{}}],["usual",{"_index":912,"title":{},"name":{},"text":{"7":{},"12":{},"13":{},"17":{},"26":{},"31":{},"32":{},"36":{},"43":{},"48":{},"49":{},"54":{},"61":{},"66":{},"67":{},"72":{},"83":{},"88":{},"89":{},"93":{},"105":{},"114":{}},"component":{}}],["utf8_text",{"_index":1152,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["util",{"_index":172,"title":{},"name":{},"text":{"2":{},"3":{},"21":{},"22":{},"39":{},"40":{},"57":{},"58":{},"78":{},"79":{}},"component":{}}],["uuid",{"_index":2232,"title":{},"name":{},"text":{"51":{},"69":{},"107":{}},"component":{}}],["uvm",{"_index":2034,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["v",{"_index":1267,"title":{},"name":{},"text":{"11":{},"16":{},"17":{},"30":{},"35":{},"36":{},"47":{},"52":{},"54":{},"65":{},"70":{},"72":{},"87":{},"92":{},"93":{}},"component":{}}],["v0.6.3.glibc2.29",{"_index":2629,"title":{},"name":{},"text":{"105":{}},"component":{}}],["va",{"_index":2422,"title":{},"name":{},"text":{"96":{}},"component":{}}],["vaapi",{"_index":625,"title":{},"name":{},"text":{"5":{},"24":{},"81":{},"96":{}},"component":{}}],["vaapi:x11=dis",{"_index":742,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["valid",{"_index":431,"title":{},"name":{},"text":{"3":{},"4":{},"9":{},"22":{},"23":{},"28":{},"40":{},"41":{},"45":{},"58":{},"59":{},"63":{},"79":{},"80":{},"85":{},"98":{},"104":{}},"component":{}}],["valu",{"_index":1040,"title":{},"name":{},"text":{"8":{},"11":{},"13":{},"14":{},"15":{},"27":{},"30":{},"32":{},"33":{},"34":{},"44":{},"47":{},"49":{},"50":{},"62":{},"65":{},"67":{},"68":{},"84":{},"87":{},"89":{},"90":{},"91":{},"97":{},"104":{},"106":{},"112":{}},"component":{}}],["var/lib/docker/volum",{"_index":2589,"title":{},"name":{},"text":{"105":{}},"component":{}}],["var/log/xorg.0.log",{"_index":2862,"title":{},"name":{},"text":{"115":{}},"component":{}}],["var/lutri",{"_index":2562,"title":{},"name":{},"text":{"105":{}},"component":{}}],["var/lutris/gam",{"_index":2577,"title":{},"name":{},"text":{"105":{}},"component":{}}],["var/run/docker.sock",{"_index":1817,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["var/run/docker.sock:/var/run/docker.sock:rw",{"_index":1974,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["vari",{"_index":1120,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{},"106":{}},"component":{}}],["variabl",{"_index":745,"title":{"15-1":{},"34-1":{},"51-1":{},"69-1":{},"91-1":{}},"name":{},"text":{"6":{},"14":{},"15":{},"18":{},"19":{},"25":{},"33":{},"34":{},"37":{},"42":{},"50":{},"51":{},"55":{},"60":{},"68":{},"69":{},"73":{},"77":{},"82":{},"90":{},"91":{},"94":{},"95":{},"97":{},"100":{},"101":{},"105":{},"106":{},"107":{}},"component":{}}],["varibl",{"_index":2811,"title":{},"name":{},"text":{"112":{}},"component":{}}],["varieti",{"_index":2555,"title":{},"name":{},"text":{"105":{}},"component":{}}],["variou",{"_index":898,"title":{},"name":{},"text":{"7":{},"12":{},"26":{},"31":{},"43":{},"48":{},"61":{},"66":{},"76":{},"83":{},"88":{}},"component":{}}],["varyi",{"_index":907,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["vendor",{"_index":909,"title":{"19-4":{},"37-4":{},"55-4":{},"73-4":{},"94-4":{}},"name":{},"text":{"7":{},"17":{},"19":{},"26":{},"36":{},"37":{},"43":{},"54":{},"55":{},"61":{},"72":{},"73":{},"83":{},"93":{},"94":{}},"component":{}}],["vendor/product",{"_index":2128,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["veri",{"_index":844,"title":{},"name":{},"text":{"7":{},"13":{},"17":{},"19":{},"26":{},"32":{},"36":{},"37":{},"43":{},"49":{},"55":{},"61":{},"67":{},"73":{},"83":{},"89":{},"93":{},"94":{},"95":{},"96":{},"101":{},"108":{},"110":{},"112":{},"117":{}},"component":{}}],["verif",{"_index":2050,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["verifi",{"_index":1082,"title":{},"name":{},"text":{"9":{},"19":{},"28":{},"37":{},"45":{},"63":{},"85":{},"94":{},"110":{},"114":{}},"component":{}}],["version",{"_index":657,"title":{},"name":{},"text":{"6":{},"17":{},"25":{},"36":{},"42":{},"51":{},"54":{},"60":{},"69":{},"72":{},"82":{},"93":{},"95":{},"104":{},"105":{},"107":{},"110":{}},"component":{}}],["vga",{"_index":2059,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["via",{"_index":402,"title":{"12":{},"13":{},"31":{},"32":{},"48":{},"49":{},"66":{},"67":{},"88":{},"89":{},"5-4":{},"24-4":{},"81-4":{}},"name":{},"text":{"3":{},"5":{},"7":{},"8":{},"11":{},"12":{},"13":{},"15":{},"22":{},"24":{},"26":{},"27":{},"30":{},"31":{},"32":{},"34":{},"40":{},"43":{},"44":{},"47":{},"48":{},"49":{},"51":{},"58":{},"61":{},"62":{},"65":{},"66":{},"67":{},"69":{},"79":{},"81":{},"83":{},"84":{},"87":{},"88":{},"89":{},"91":{},"105":{},"114":{},"116":{}},"component":{}}],["video",{"_index":60,"title":{"13":{},"32":{},"49":{},"67":{},"89":{},"13-4":{},"15-14":{},"16-5":{},"32-4":{},"34-13":{},"35-5":{},"49-4":{},"51-9":{},"52-5":{},"67-4":{},"69-9":{},"70-5":{},"89-4":{},"91-14":{},"92-5":{}},"name":{"13":{},"32":{},"49":{},"67":{},"89":{}},"text":{"1":{},"4":{},"5":{},"7":{},"10":{},"13":{},"14":{},"15":{},"16":{},"17":{},"19":{},"20":{},"23":{},"24":{},"26":{},"29":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"41":{},"43":{},"46":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"59":{},"61":{},"64":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"76":{},"80":{},"81":{},"83":{},"86":{},"89":{},"90":{},"91":{},"92":{},"93":{},"94":{},"96":{},"101":{},"107":{},"108":{}},"component":{}}],["video.hpp",{"_index":565,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["video/audio",{"_index":541,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["video/x",{"_index":1865,"title":{},"name":{},"text":{"15":{},"16":{},"19":{},"35":{},"37":{},"51":{},"52":{},"69":{},"70":{},"91":{},"92":{},"94":{}},"component":{}}],["video_param",{"_index":1868,"title":{},"name":{},"text":{"15":{},"16":{},"35":{},"52":{},"70":{},"91":{},"92":{}},"component":{}}],["videoconvert",{"_index":1956,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["videoencod",{"_index":2205,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["videogam",{"_index":23,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{},"105":{}},"component":{}}],["videor",{"_index":1947,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["videoscal",{"_index":1946,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["videotestsrc",{"_index":1861,"title":{},"name":{},"text":{"15":{},"16":{},"35":{},"51":{},"52":{},"69":{},"70":{},"91":{},"92":{}},"component":{}}],["view",{"_index":849,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["viewport",{"_index":1160,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["violat",{"_index":1735,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["virtual",{"_index":38,"title":{"3-1":{},"5-1":{},"5-2":{},"5-3":{},"17-3":{},"22-1":{},"24-1":{},"24-2":{},"24-3":{},"36-3":{},"40-1":{},"54-3":{},"58-1":{},"72-3":{},"79-1":{},"81-1":{},"81-2":{},"81-3":{},"93-3":{}},"name":{},"text":{"1":{},"2":{},"3":{},"4":{},"5":{},"15":{},"17":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"51":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"69":{},"72":{},"73":{},"74":{},"78":{},"79":{},"80":{},"81":{},"91":{},"93":{},"94":{},"104":{},"110":{},"117":{}},"component":{}}],["visibl",{"_index":595,"title":{},"name":{},"text":{"5":{},"24":{},"81":{},"105":{}},"component":{}}],["vkcreatedevic",{"_index":2173,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["vkresult",{"_index":2174,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["vm",{"_index":2198,"title":{},"name":{},"text":{"19":{},"37":{},"55":{},"73":{},"94":{}},"component":{}}],["vol",{"_index":1819,"title":{},"name":{},"text":{"15":{},"17":{},"19":{},"34":{},"36":{},"37":{},"51":{},"54":{},"55":{},"69":{},"72":{},"73":{},"91":{},"93":{},"94":{}},"component":{}}],["vol,destination=/usr/nvidia",{"_index":2013,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["vol:/usr/nvidia:rw",{"_index":2032,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["volum",{"_index":1821,"title":{},"name":{},"text":{"15":{},"17":{},"19":{},"34":{},"36":{},"37":{},"51":{},"54":{},"55":{},"69":{},"72":{},"73":{},"91":{},"93":{},"94":{},"105":{},"106":{},"109":{}},"component":{}}],["vulkan",{"_index":2135,"title":{"18-3":{},"19-2":{},"37-2":{},"55-2":{},"73-2":{},"77-3":{},"94-2":{}},"name":{},"text":{"18":{},"19":{},"37":{},"55":{},"73":{},"77":{},"94":{}},"component":{}}],["w",{"_index":1269,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["want",{"_index":283,"title":{},"name":{},"text":{"3":{},"7":{},"15":{},"18":{},"22":{},"26":{},"34":{},"40":{},"43":{},"51":{},"58":{},"61":{},"69":{},"77":{},"79":{},"83":{},"91":{},"95":{},"96":{},"97":{},"100":{},"105":{},"106":{},"107":{},"109":{},"110":{},"111":{},"112":{},"116":{}},"component":{}}],["warn",{"_index":809,"title":{},"name":{},"text":{"6":{},"15":{},"19":{},"25":{},"34":{},"37":{},"42":{},"51":{},"55":{},"60":{},"69":{},"73":{},"82":{},"91":{},"94":{}},"component":{}}],["wasn’t",{"_index":2015,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"101":{}},"component":{}}],["watch",{"_index":2356,"title":{},"name":{},"text":{"76":{}},"component":{}}],["wave=tick",{"_index":2243,"title":{},"name":{},"text":{"51":{},"69":{}},"component":{}}],["wavescop",{"_index":1904,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["way",{"_index":373,"title":{},"name":{},"text":{"3":{},"5":{},"7":{},"8":{},"14":{},"15":{},"17":{},"18":{},"22":{},"24":{},"26":{},"27":{},"33":{},"36":{},"40":{},"43":{},"44":{},"50":{},"54":{},"58":{},"61":{},"62":{},"68":{},"72":{},"77":{},"79":{},"81":{},"83":{},"84":{},"90":{},"91":{},"93":{},"95":{},"97":{},"99":{},"101":{},"106":{},"108":{},"115":{}},"component":{}}],["wayland",{"_index":195,"title":{"7":{},"26":{},"43":{},"61":{},"83":{},"6-4":{},"7-1":{},"7-2":{},"7-3":{},"25-4":{},"26-1":{},"26-2":{},"26-3":{},"42-4":{},"43-1":{},"43-2":{},"43-3":{},"60-4":{},"61-1":{},"61-2":{},"61-3":{},"82-4":{},"83-1":{},"83-2":{},"83-3":{}},"name":{"7":{},"26":{},"43":{},"61":{},"83":{}},"text":{"2":{},"5":{},"6":{},"7":{},"16":{},"21":{},"24":{},"25":{},"26":{},"35":{},"39":{},"42":{},"43":{},"51":{},"52":{},"57":{},"60":{},"61":{},"69":{},"70":{},"78":{},"81":{},"82":{},"83":{},"92":{}},"component":{}}],["wc",{"_index":2057,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["we'll",{"_index":707,"title":{},"name":{},"text":{"6":{},"25":{},"42":{},"60":{},"82":{}},"component":{}}],["web",{"_index":2452,"title":{},"name":{},"text":{"98":{},"100":{},"104":{},"108":{}},"component":{}}],["websit",{"_index":2559,"title":{},"name":{},"text":{"105":{}},"component":{}}],["webview",{"_index":2834,"title":{},"name":{},"text":{"114":{}},"component":{}}],["well",{"_index":831,"title":{},"name":{},"text":{"7":{},"12":{},"17":{},"26":{},"31":{},"36":{},"43":{},"48":{},"54":{},"61":{},"66":{},"72":{},"83":{},"88":{},"93":{},"101":{},"105":{},"107":{},"108":{},"112":{}},"component":{}}],["we’d",{"_index":2784,"title":{},"name":{},"text":{"110":{}},"component":{}}],["we’ll",{"_index":419,"title":{},"name":{},"text":{"3":{},"4":{},"7":{},"9":{},"22":{},"23":{},"26":{},"28":{},"40":{},"41":{},"43":{},"45":{},"58":{},"59":{},"61":{},"63":{},"79":{},"80":{},"83":{},"85":{},"116":{}},"component":{}}],["we’r",{"_index":599,"title":{},"name":{},"text":{"5":{},"24":{},"81":{},"106":{},"111":{},"117":{}},"component":{}}],["we’v",{"_index":319,"title":{},"name":{},"text":{"3":{},"5":{},"22":{},"24":{},"40":{},"58":{},"79":{},"81":{},"101":{},"102":{},"105":{},"106":{},"108":{},"111":{},"112":{}},"component":{}}],["whale",{"_index":70,"title":{"102":{}},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{},"96":{},"101":{},"103":{},"104":{},"108":{},"112":{},"116":{},"117":{}},"component":{}}],["whales/gow",{"_index":621,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["whales/gow.git",{"_index":2528,"title":{},"name":{},"text":{"103":{}},"component":{}}],["whales/gow/master/images/nvidia",{"_index":2002,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["whales/gst",{"_index":194,"title":{},"name":{},"text":{"2":{},"6":{},"21":{},"25":{},"39":{},"42":{},"57":{},"60":{},"78":{},"82":{}},"component":{}}],["whales/lutri",{"_index":2554,"title":{},"name":{},"text":{"105":{}},"component":{}}],["whales/pegasus:edg",{"_index":2333,"title":{},"name":{},"text":{"76":{}},"component":{}}],["whales/pulseaudio:mast",{"_index":1809,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["whales/steam:edg",{"_index":1848,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["whales/wolf:st",{"_index":1981,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["whatev",{"_index":2667,"title":{},"name":{},"text":{"106":{}},"component":{}}],["what’",{"_index":1170,"title":{},"name":{},"text":{"11":{},"12":{},"30":{},"31":{},"47":{},"48":{},"65":{},"66":{},"87":{},"88":{},"101":{},"112":{}},"component":{}}],["wherev",{"_index":2503,"title":{},"name":{},"text":{"101":{}},"component":{}}],["whether",{"_index":1731,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{},"112":{}},"component":{}}],["whilst",{"_index":55,"title":{},"name":{},"text":{"1":{},"3":{},"5":{},"20":{},"22":{},"24":{},"38":{},"40":{},"56":{},"58":{},"74":{},"79":{},"81":{}},"component":{}}],["wider",{"_index":306,"title":{},"name":{},"text":{"3":{},"22":{},"40":{},"58":{},"79":{}},"component":{}}],["width",{"_index":1158,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["width=(int)1280",{"_index":2209,"title":{},"name":{},"text":{"19":{},"37":{},"94":{}},"component":{}}],["width=(int)640",{"_index":1948,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["width={width",{"_index":1957,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"92":{}},"component":{}}],["wildli",{"_index":2668,"title":{},"name":{},"text":{"106":{}},"component":{}}],["window",{"_index":839,"title":{"117":{},"114-2":{},"114-3":{}},"name":{"117":{}},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"105":{},"108":{},"117":{}},"component":{}}],["wipe",{"_index":2266,"title":{},"name":{},"text":{"53":{},"71":{}},"component":{}}],["wire",{"_index":1443,"title":{},"name":{},"text":{"12":{},"31":{},"48":{},"66":{},"88":{}},"component":{}}],["within",{"_index":2329,"title":{},"name":{},"text":{"76":{}},"component":{}}],["without",{"_index":43,"title":{},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"7":{},"11":{},"17":{},"20":{},"21":{},"22":{},"24":{},"26":{},"30":{},"36":{},"38":{},"39":{},"40":{},"43":{},"47":{},"56":{},"57":{},"58":{},"61":{},"65":{},"74":{},"78":{},"79":{},"81":{},"83":{},"87":{},"93":{},"96":{},"103":{},"106":{},"112":{}},"component":{}}],["wolf",{"_index":1,"title":{"1":{},"20":{},"38":{},"56":{},"74":{},"6-2":{},"6-5":{},"6-6":{},"25-2":{},"25-5":{},"25-6":{},"42-2":{},"42-5":{},"42-6":{},"60-2":{},"60-5":{},"60-6":{},"82-2":{},"82-5":{},"82-6":{},"105-7":{}},"name":{},"text":{"1":{},"2":{},"3":{},"5":{},"6":{},"9":{},"12":{},"13":{},"15":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"24":{},"25":{},"28":{},"31":{},"32":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"42":{},"45":{},"48":{},"49":{},"51":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"60":{},"63":{},"66":{},"67":{},"69":{},"71":{},"72":{},"73":{},"74":{},"75":{},"77":{},"78":{},"79":{},"81":{},"82":{},"85":{},"88":{},"89":{},"91":{},"93":{},"94":{},"96":{},"102":{},"105":{},"108":{},"112":{}},"component":{"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{},"94":{}}}],["wolf_cfg_fil",{"_index":1795,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["wolf_docker_fake_udev_path",{"_index":1827,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["wolf_docker_socket",{"_index":1816,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["wolf_encoder_nod",{"_index":1826,"title":{},"name":{},"text":{"15":{},"91":{}},"component":{}}],["wolf_log_level",{"_index":1792,"title":{},"name":{},"text":{"15":{},"19":{},"34":{},"37":{},"51":{},"55":{},"69":{},"73":{},"91":{},"94":{}},"component":{}}],["wolf_private_cert_fil",{"_index":1801,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["wolf_private_key_fil",{"_index":1798,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["wolf_pulse_imag",{"_index":1807,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["wolf_render_nod",{"_index":1824,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["wolf_stop_container_on_exit",{"_index":1810,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["wolfemul",{"_index":2332,"title":{},"name":{},"text":{"76":{}},"component":{}}],["wolflutri",{"_index":2585,"title":{},"name":{},"text":{"105":{}},"component":{}}],["wolfsteam",{"_index":1847,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["wolfsupertux",{"_index":2614,"title":{},"name":{},"text":{"105":{}},"component":{}}],["wonder",{"_index":2883,"title":{},"name":{},"text":{"117":{}},"component":{}}],["won’t",{"_index":2130,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{},"109":{},"112":{}},"component":{}}],["work",{"_index":288,"title":{"5":{},"24":{},"81":{},"53-1":{},"71-1":{},"108-1":{},"115-3":{}},"name":{"5":{},"24":{},"81":{}},"text":{"3":{},"5":{},"6":{},"7":{},"15":{},"16":{},"17":{},"18":{},"19":{},"22":{},"24":{},"25":{},"26":{},"35":{},"36":{},"37":{},"40":{},"42":{},"43":{},"51":{},"52":{},"54":{},"55":{},"58":{},"60":{},"61":{},"69":{},"70":{},"72":{},"73":{},"77":{},"79":{},"81":{},"82":{},"83":{},"91":{},"92":{},"93":{},"94":{},"95":{},"96":{},"98":{},"99":{},"101":{},"104":{},"105":{},"108":{},"111":{},"112":{},"115":{}},"component":{}}],["worker",{"_index":2535,"title":{},"name":{},"text":{"104":{}},"component":{}}],["worri",{"_index":919,"title":{},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{}},"component":{}}],["wrap",{"_index":2403,"title":{},"name":{},"text":{"96":{}},"component":{}}],["writabl",{"_index":2429,"title":{},"name":{},"text":{"97":{}},"component":{}}],["write",{"_index":233,"title":{},"name":{},"text":{"2":{},"5":{},"7":{},"21":{},"24":{},"26":{},"39":{},"43":{},"57":{},"61":{},"78":{},"81":{},"83":{},"97":{}},"component":{}}],["write’",{"_index":552,"title":{},"name":{},"text":{"4":{},"23":{},"41":{},"59":{},"80":{}},"component":{}}],["written",{"_index":126,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["wrong",{"_index":2764,"title":{"114-4":{}},"name":{},"text":{"109":{},"110":{}},"component":{}}],["wsl2",{"_index":1969,"title":{},"name":{},"text":{"17":{},"36":{},"93":{},"117":{}},"component":{}}],["x",{"_index":842,"title":{},"name":{},"text":{"7":{},"11":{},"14":{},"17":{},"26":{},"30":{},"33":{},"36":{},"43":{},"47":{},"50":{},"54":{},"61":{},"65":{},"68":{},"72":{},"83":{},"87":{},"90":{},"93":{},"107":{},"112":{}},"component":{}}],["x,i",{"_index":1161,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["x11",{"_index":821,"title":{},"name":{},"text":{"7":{},"16":{},"26":{},"35":{},"43":{},"52":{},"61":{},"70":{},"83":{},"92":{},"98":{},"101":{},"104":{}},"component":{}}],["x11docker",{"_index":2881,"title":{},"name":{},"text":{"116":{}},"component":{}}],["x509",{"_index":811,"title":{},"name":{},"text":{"6":{},"9":{},"25":{},"28":{},"42":{},"45":{},"60":{},"63":{},"82":{},"85":{}},"component":{}}],["x6b",{"_index":1293,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["x86_64.appimag",{"_index":2630,"title":{},"name":{},"text":{"105":{}},"component":{}}],["xbox",{"_index":1367,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["xdg_runtime_dir",{"_index":1804,"title":{},"name":{},"text":{"15":{},"34":{},"51":{},"69":{},"91":{}},"component":{}}],["xdg_runtime_dir=/tmp/socket",{"_index":1970,"title":{},"name":{},"text":{"17":{},"36":{},"54":{},"72":{},"93":{}},"component":{}}],["xemu",{"_index":2344,"title":{},"name":{},"text":{"76":{}},"component":{}}],["ximagesrc",{"_index":819,"title":{},"name":{},"text":{"7":{},"16":{},"26":{},"35":{},"43":{},"52":{},"61":{},"70":{},"83":{},"92":{}},"component":{}}],["xorg",{"_index":822,"title":{"96-2":{},"106-3":{},"106-5":{},"107-3":{},"115-5":{},"115-6":{}},"name":{},"text":{"7":{},"26":{},"43":{},"61":{},"83":{},"96":{},"100":{},"101":{},"104":{},"106":{},"107":{},"108":{},"109":{},"112":{},"115":{},"116":{},"117":{}},"component":{}}],["xorg.0.log",{"_index":2866,"title":{},"name":{},"text":{"115":{}},"component":{}}],["xorg.99.log",{"_index":2865,"title":{},"name":{},"text":{"115":{}},"component":{}}],["xorg.conf",{"_index":2767,"title":{},"name":{},"text":{"109":{}},"component":{}}],["xorg_display",{"_index":2446,"title":{},"name":{},"text":{"97":{}},"component":{}}],["xorg_display_port",{"_index":2697,"title":{},"name":{},"text":{"106":{}},"component":{}}],["xr",{"_index":2721,"title":{},"name":{},"text":{"107":{}},"component":{}}],["xvfb",{"_index":2416,"title":{},"name":{},"text":{"96":{}},"component":{}}],["xwayland",{"_index":582,"title":{},"name":{},"text":{"5":{},"24":{},"81":{}},"component":{}}],["y",{"_index":659,"title":{},"name":{},"text":{"6":{},"11":{},"17":{},"19":{},"25":{},"30":{},"36":{},"37":{},"42":{},"47":{},"54":{},"55":{},"60":{},"65":{},"72":{},"73":{},"82":{},"87":{},"93":{},"94":{}},"component":{}}],["yaml",{"_index":2495,"title":{},"name":{},"text":{"100":{},"105":{}},"component":{}}],["ye",{"_index":2772,"title":{},"name":{},"text":{"109":{}},"component":{}}],["year",{"_index":2639,"title":{},"name":{},"text":{"105":{}},"component":{}}],["yhirose/cpp",{"_index":231,"title":{},"name":{},"text":{"2":{},"21":{},"39":{},"57":{},"78":{}},"component":{}}],["yml",{"_index":2810,"title":{},"name":{},"text":{"112":{}},"component":{}}],["yourself",{"_index":2487,"title":{},"name":{},"text":{"100":{},"109":{}},"component":{}}],["youtub",{"_index":1932,"title":{},"name":{},"text":{"16":{},"35":{},"52":{},"70":{},"76":{},"92":{},"108":{}},"component":{}}],["you’d",{"_index":2808,"title":{},"name":{},"text":{"112":{}},"component":{}}],["you’ll",{"_index":978,"title":{},"name":{},"text":{"8":{},"17":{},"19":{},"27":{},"36":{},"37":{},"44":{},"54":{},"55":{},"62":{},"72":{},"73":{},"84":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"100":{},"101":{},"106":{},"107":{},"108":{},"110":{},"112":{}},"component":{}}],["you’r",{"_index":2414,"title":{},"name":{},"text":{"96":{},"97":{},"107":{},"108":{},"110":{},"112":{},"113":{},"115":{},"116":{}},"component":{}}],["you’v",{"_index":2457,"title":{},"name":{},"text":{"98":{},"100":{},"110":{},"112":{},"113":{}},"component":{}}],["yumichan.net",{"_index":1478,"title":{},"name":{},"text":{"13":{},"32":{},"49":{},"67":{},"89":{}},"component":{}}],["z",{"_index":1273,"title":{},"name":{},"text":{"11":{},"30":{},"47":{},"65":{},"87":{}},"component":{}}],["zb140",{"_index":96,"title":{},"name":{},"text":{"1":{},"20":{},"38":{},"56":{},"74":{}},"component":{}}],["zero",{"_index":953,"title":{},"name":{},"text":{"7":{},"13":{},"14":{},"26":{},"32":{},"33":{},"43":{},"49":{},"50":{},"61":{},"67":{},"68":{},"83":{},"89":{},"90":{}},"component":{}}],["zone",{"_index":2424,"title":{"97-2":{}},"name":{},"text":{"97":{}},"component":{}}]],"pipeline":["stemmer"]},"store":{"documents":{"1":{"id":1,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"dev-backend-api","name":"index","url":"/wolf/dev-backend-api/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"2":{"id":2,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: a simple abstraction on top of libpulse to create and control virtual audio devices. A little standalone CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. In order to keep modules decoupled most of the logic revolves around reacting to events in a shared event bus (implemented using DeveloperPaul123/eventbus). Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"dev-backend-api","name":"code-structure","url":"/wolf/dev-backend-api/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"3":{"id":3,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"dev-backend-api","name":"fake-udev","url":"/wolf/dev-backend-api/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"4":{"id":4,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"dev-backend-api","name":"gstreamer","url":"/wolf/dev-backend-api/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"5":{"id":5,"text":"Wolf is composed of a few independent components that, when used together, allow us to run and stream multiple graphical applications on the same server without any overlap between them. In order to create virtual desktops on-demand, we’ve created a custom (micro) Wayland compositor: gst-wayland-display. It’s based on Smithay, coded in Rust and exposes both a standalone GStreamer plugin and an easy-to-use C API. The main benefit of this solution is that our compositor will then expose the raw framebuffer so that Wolf can feed that directly to the video encoding pipeline. You can read more about it in Headless Wayland. To keep things simple, our Wayland compositor doesn’t support XWayland, for containers that need it (like Steam) we use Gamescope which can be run as a Wayland client, and it’ll provide XWayland support to the downstream app. Audio doesn’t need any HW acceleration, it’s fairly trivial to run PulseAudio as a standalone container and use libpulse in order to create virtual audio sink on-demand. Creating and managing virtual devices is handled by inputtino: a small library that abstracts away the complexities of managing uinput (and uhid) to create virtual input devices. Virtual devices created by inputtino will be visible on the host system and can potentially break the host isolation that we’re trying to achieve. In order to avoid this, we encourage users to install a set of udev rules that will restrict access to these devices to a specific group (e.g. input) and move mouse and keyboard to a different seat (see user:quickstart.adoc#_virtual_devices_support). You can read a more detailed explanation into why we’ve added uhid and how gyro/acceleration is achieved here Some devices like mouse and keyboard are always present and will be automatically created and setup before starting the application. Other devices can be hotplugged whilst the streaming is running; for example, a gamepad can be plugged in after the game has started. Special care is needed in order to safely mount these new devices in the app container and to make them available to the running application, there’s an in-depth article about it here: Hotplug in Docker We run applications in a containerised environment, this way we can ensure that the application will not interfere with the host system (and with other running apps) and that it will have access only to the virtual devices that we’ve created. We have a set of pre-built containers that are optimised to work with our flow in games-on-whales/gow. Generally, though, most of the GUI applications should work inside a container that can then be streamed via Wolf. We use GStreamer to encode the video and audio streams and send them to the client. We have automatic support for HW acceleration using CUDA, QuickSync and VAAPI but thanks to GStreamer we can easily add more encoders into the mix, without having to write a single line of code! The full encoding pipeline is described in a string that can be overridden by users just by changing the config.toml file. We’ve implemented a couple of custom GStreamer plugins in order to properly split, RTP encode and add FEC to the resulting buffers into the format that Moonlight expects; they live in here: src/moonlight-server/gst-plugin.","title":"How does it work?","component":"wolf","version":"dev-backend-api","name":"how-it-works","url":"/wolf/dev-backend-api/dev/how-it-works.html","titles":[{"text":"Virtual desktop","hash":"_virtual_desktop","id":1},{"text":"Virtual audio","hash":"_virtual_audio","id":2},{"text":"Virtual input devices","hash":"_virtual_input_devices","id":3},{"text":"Support hotplug via fake-udev","hash":"_support_hotplug_via_fake_udev","id":4},{"text":"Running applications/games","hash":"_running_applicationsgames","id":5},{"text":"Streaming","hash":"_streaming","id":6}]},"6":{"id":6,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxing-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.24.6 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev libboost-container-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"dev-backend-api","name":"manual_build","url":"/wolf/dev-backend-api/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"7":{"id":7,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"dev-backend-api","name":"wayland","url":"/wolf/dev-backend-api/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"8":{"id":8,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"dev-backend-api","name":"control-specs","url":"/wolf/dev-backend-api/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"9":{"id":9,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"dev-backend-api","name":"http-pairing","url":"/wolf/dev-backend-api/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"10":{"id":10,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"dev-backend-api","name":"index","url":"/wolf/dev-backend-api/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"11":{"id":11,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"dev-backend-api","name":"input-data","url":"/wolf/dev-backend-api/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"12":{"id":12,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"dev-backend-api","name":"rtp-opus","url":"/wolf/dev-backend-api/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"13":{"id":13,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"dev-backend-api","name":"rtp-video","url":"/wolf/dev-backend-api/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"14":{"id":14,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"dev-backend-api","name":"rtsp","url":"/wolf/dev-backend-api/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"15":{"id":15,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_ENCODER_NODE $WOLF_RENDER_NODE The default render node used for the Gstreamer pipelines; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools Since Wolf supports multiple streaming sessions at the same time and each session can run a different app, we need to make sure that each app has its own folder where it can store permanent data. To achieve this, for each running app, Wolf will create a folder structure like this: ${HOST_APPS_STATE_FOLDER}/${app_state_folder}/${app_title} and then mount that as the home (/home/retro) for the docker container that will run the selected app. These 3 variables are defined as follows: HOST_APPS_STATE_FOLDER: defaults to /etc/wolf, can be changed via ENV app_state_folder: defaults to a unique identifier for each client so that every Moonlight session will have its own folder. Can be changed in the config.toml file app_title: the title of the app as defined in the config.toml file This will break isolation, if you want to connect with multiple clients at the same time you should not share the home folder. You can follow development of that feature here By default, Wolf will create a new home folder for each client, but if you want to share the same home folder with multiple clients, you can set the app_state_folder to the same value for each paired client; example: [[paired_clients]] app_state_folder = \"common\" # ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\" The easy way to control this is to just edit the env variable WOLF_ENCODER_NODE (defaults to match WOLF_RENDER_NODE in order to use the same GPU for both), this will set the default render node used for the Gstreamer pipelines. The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used. If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either: Delete the nvcodec entries under gstreamer.video.hevc_encoders Cut the qsv entry and paste it above the nvcodec entry On top of that, each single apps entry support overriding the default streaming pipeline; for example: [[apps]] title = \"Test ball\" # More options here, removed for brevity... [apps.video] source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the video_params with the corresponding encoder plugin; see: gstreamer/issues/1167. This has been moved to the Steam page.","title":"Configuration","component":"wolf","version":"dev-backend-api","name":"configuration","url":"/wolf/dev-backend-api/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"Where apps will store permanent data?","hash":"data_setup","id":2},{"text":"Share home folder with multiple clients","hash":"_share_home_folder_with_multiple_clients","id":3},{"text":"Change the HOST_APPS_STATE_FOLDER","hash":"_change_the_host_apps_state_folder","id":4},{"text":"TOML file","hash":"_toml_file","id":5},{"text":"Defining apps","hash":"_defining_apps","id":6},{"text":"Override the default joypad mapping","hash":"_override_the_default_joypad_mapping","id":7},{"text":"App Runner","hash":"_app_runner","id":8},{"text":"Process","hash":"_process","id":9},{"text":"Docker","hash":"_docker","id":10},{"text":"Gstreamer","hash":"_gstreamer","id":11},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":12},{"text":"App render node","hash":"_app_render_node","id":13},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":14},{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":15}]},"16":{"id":16,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"dev-backend-api","name":"gstreamer","url":"/wolf/dev-backend-api/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"17":{"id":17,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia (Container Toolkit) Nvidia (Manual) WSL2 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid network_mode: host restart: unless-stopped Make sure that the version of the Nvidia container toolkit is >= 1.16.0 and that your driver version is >= 530.30.02 (you can check the driver version with nvidia-smi). sudo nvidia-container-cli -V cli-version: 1.16.0 lib-version: 1.16.0 build date: 2024-07-15T13:41+00:00 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ -e NVIDIA_DRIVER_CAPABILITIES=all \\ -e NVIDIA_VISIBLE_DEVICES=all \\ --gpus=all \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf - NVIDIA_DRIVER_CAPABILITIES=all - NVIDIA_VISIBLE_DEVICES=all volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid runtime: nvidia deploy: resources: reservations: devices: - capabilities: [gpu] network_mode: host restart: unless-stopped Unfortunately, on Nvidia, things are a little bit more complex.. Make sure that your driver version is >= 530.30.02 First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/uhid - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Running Wolf in WSL2 hasn’t been properly tested. You can run Wolf in a very unprivileged setting without uinput/uhid, unfortunately this means that you’ll be restricted to only using mouse and keyboard. For Nvidia users, follow the Nvidia instructions above. This should work for AMD/Intel users. docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ ghcr.io/games-on-whales/wolf:stable Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users, you can open more ports if needed) EXPOSE 48100-48110/udp # Audio (up to 10 users, you can open more ports if needed) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Allows Wolf to access /dev/uhid KERNEL==\"uhid\", TAG+=\"uaccess\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"dev-backend-api","name":"quickstart","url":"/wolf/dev-backend-api/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"18":{"id":18,"text":"One of the pre-installed applications in the default Wolf configuration is Steam. Getting Steam to work in a headless container took some work, so this page lists some limitations and tips to get the most out of Steam. In order to directly launch a Steam game from Moonlight you can just copy the existing entry for Steam, change the name and just add the Steam app ID as env variable; example: [[apps]] title = \"Elden Ring\" start_virtual_compositor = true [apps.runner] env = [ \"PROTON_LOG=1\", \"RUN_SWAY=true\", \"GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*\", \"STEAM_STARTUP_FLAGS=steam://rungameid/1245620\" ] # COPY EVERYTHING ELSE ... You can get the app ID from https://steamdb.info/ (Thanks to @nathanle1406 for the tip) The steam overlay currently does not work in our headless container. So if you want to see FPS and other stats you can use FlightlessMango’s excellent MangoHud. It’s already installed and enabled in the default steam image for all Vulkan games (including Proton games). See below for how to activate it in game. While mangohud is already installed, there’s no way to globally enable it for all OpenGL games. You can still enable it on a per-game basis by adding mangohud %command% to the game’s launch options in Steam. In a game, you can press Right Shift + F12 to make the overlay appear and disappear. You can also press Right Shift + F11 to change the position of the overlay on screen.","title":"Steam","component":"wolf","version":"dev-backend-api","name":"steam","url":"/wolf/dev-backend-api/user/steam.html","titles":[{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":1},{"text":"MangoHud","hash":"_mangohud","id":2},{"text":"Proton (Steam Play) and other Vulkan games","hash":"_proton_steam_play_and_other_vulkan_games","id":3},{"text":"OpenGL (Native Linux) games","hash":"_opengl_native_linux_games","id":4},{"text":"Activation and configuration","hash":"_activation_and_configuration","id":5}]},"19":{"id":19,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page Example log line: 0:01:31.983118812 1 0x7f1d50000b70 ERROR qsvencoder gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_session: MFXVideoENCODE::Query failed -3 (MFX_ERR_UNSUPPORTED) 0:01:31.983243805 1 0x7f1d50000b70 WARN videoencoder gstvideoencoder.c:771:gst_video_encoder_setcaps: rejected caps video/x-raw(memory:VAMemory), width=(int)1280, height=(int)720, framerate=(fraction)60/1, format=(string)NV12, chroma-site=(string)mpeg2, colorimetry=(string)bt601 Follow the steps outlined in here: sudo apt install --reinstall linux-firmware Add i915.enable_guc=2 in /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash i915.force_probe=* i915.enable_guc=2\" sudo update-initramfs –u sudo update-grub Reboot the system. After reboot, execute the command: dmesg | grep guc Verify the logs for guc information. Note: If output doesn’t contain guc details, then install the latest guc/huc firmware. Copy the firmware to /lib/firmware/i915/, and reboot the system.","title":"Troubleshooting","component":"wolf","version":"dev-backend-api","name":"troubleshooting","url":"/wolf/dev-backend-api/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4},{"text":"Intel: MFX_ERR_UNSUPPORTED","hash":"_intel_mfx_err_unsupported","id":5}]},"20":{"id":20,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"dev-fake-uinput","name":"index","url":"/wolf/dev-fake-uinput/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"21":{"id":21,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: a simple abstraction on top of libpulse to create and control virtual audio devices. A little standalone CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. In order to keep modules decoupled most of the logic revolves around reacting to events in a shared event bus (implemented using DeveloperPaul123/eventbus). Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"dev-fake-uinput","name":"code-structure","url":"/wolf/dev-fake-uinput/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"22":{"id":22,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"dev-fake-uinput","name":"fake-udev","url":"/wolf/dev-fake-uinput/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"23":{"id":23,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"dev-fake-uinput","name":"gstreamer","url":"/wolf/dev-fake-uinput/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"24":{"id":24,"text":"Wolf is composed of a few independent components that, when used together, allow us to run and stream multiple graphical applications on the same server without any overlap between them. In order to create virtual desktops on-demand, we’ve created a custom (micro) Wayland compositor: gst-wayland-display. It’s based on Smithay, coded in Rust and exposes both a standalone GStreamer plugin and an easy-to-use C API. The main benefit of this solution is that our compositor will then expose the raw framebuffer so that Wolf can feed that directly to the video encoding pipeline. You can read more about it in Headless Wayland. To keep things simple, our Wayland compositor doesn’t support XWayland, for containers that need it (like Steam) we use Gamescope which can be run as a Wayland client, and it’ll provide XWayland support to the downstream app. Audio doesn’t need any HW acceleration, it’s fairly trivial to run PulseAudio as a standalone container and use libpulse in order to create virtual audio sink on-demand. Creating and managing virtual devices is handled by inputtino: a small library that abstracts away the complexities of managing uinput (and uhid) to create virtual input devices. Virtual devices created by inputtino will be visible on the host system and can potentially break the host isolation that we’re trying to achieve. In order to avoid this, we encourage users to install a set of udev rules that will restrict access to these devices to a specific group (e.g. input) and move mouse and keyboard to a different seat (see user:quickstart.adoc#_virtual_devices_support). You can read a more detailed explanation into why we’ve added uhid and how gyro/acceleration is achieved here Some devices like mouse and keyboard are always present and will be automatically created and setup before starting the application. Other devices can be hotplugged whilst the streaming is running; for example, a gamepad can be plugged in after the game has started. Special care is needed in order to safely mount these new devices in the app container and to make them available to the running application, there’s an in-depth article about it here: Hotplug in Docker We run applications in a containerised environment, this way we can ensure that the application will not interfere with the host system (and with other running apps) and that it will have access only to the virtual devices that we’ve created. We have a set of pre-built containers that are optimised to work with our flow in games-on-whales/gow. Generally, though, most of the GUI applications should work inside a container that can then be streamed via Wolf. We use GStreamer to encode the video and audio streams and send them to the client. We have automatic support for HW acceleration using CUDA, QuickSync and VAAPI but thanks to GStreamer we can easily add more encoders into the mix, without having to write a single line of code! The full encoding pipeline is described in a string that can be overridden by users just by changing the config.toml file. We’ve implemented a couple of custom GStreamer plugins in order to properly split, RTP encode and add FEC to the resulting buffers into the format that Moonlight expects; they live in here: src/moonlight-server/gst-plugin.","title":"How does it work?","component":"wolf","version":"dev-fake-uinput","name":"how-it-works","url":"/wolf/dev-fake-uinput/dev/how-it-works.html","titles":[{"text":"Virtual desktop","hash":"_virtual_desktop","id":1},{"text":"Virtual audio","hash":"_virtual_audio","id":2},{"text":"Virtual input devices","hash":"_virtual_input_devices","id":3},{"text":"Support hotplug via fake-udev","hash":"_support_hotplug_via_fake_udev","id":4},{"text":"Running applications/games","hash":"_running_applicationsgames","id":5},{"text":"Streaming","hash":"_streaming","id":6}]},"25":{"id":25,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxing-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.22.7 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev libboost-container-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"dev-fake-uinput","name":"manual_build","url":"/wolf/dev-fake-uinput/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"26":{"id":26,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"dev-fake-uinput","name":"wayland","url":"/wolf/dev-fake-uinput/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"27":{"id":27,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"dev-fake-uinput","name":"control-specs","url":"/wolf/dev-fake-uinput/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"28":{"id":28,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"dev-fake-uinput","name":"http-pairing","url":"/wolf/dev-fake-uinput/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"29":{"id":29,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"dev-fake-uinput","name":"index","url":"/wolf/dev-fake-uinput/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"30":{"id":30,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"dev-fake-uinput","name":"input-data","url":"/wolf/dev-fake-uinput/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"31":{"id":31,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"dev-fake-uinput","name":"rtp-opus","url":"/wolf/dev-fake-uinput/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"32":{"id":32,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"dev-fake-uinput","name":"rtp-video","url":"/wolf/dev-fake-uinput/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"33":{"id":33,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"dev-fake-uinput","name":"rtsp","url":"/wolf/dev-fake-uinput/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"34":{"id":34,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools Since Wolf supports multiple streaming sessions at the same time and each session can run a different app, we need to make sure that each app has its own folder where it can store permanent data. To achieve this, for each running app, Wolf will create a folder structure like this: ${HOST_APPS_STATE_FOLDER}/${app_state_folder}/${app_title} and then mount that as the home (/home/retro) for the docker container that will run the selected app. These 3 variables are defined as follows: HOST_APPS_STATE_FOLDER: defaults to /etc/wolf, can be changed via ENV app_state_folder: defaults to a unique identifier for each client so that every Moonlight session will have its own folder. Can be changed in the config.toml file app_title: the title of the app as defined in the config.toml file By default, Wolf will create a new home folder for each client, but if you want to share the same home folder with multiple clients, you can set the app_state_folder to the same value for each paired client; example: [[paired_clients]] app_state_folder = \"common\" # ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\" In order to directly launch a Steam game from Moonlight you can just copy the existing entry for Steam, change the name and just add the Steam app ID as env variable; example: [[apps]] title = \"Elden Ring\" start_virtual_compositor = true [apps.runner] env = [ \"PROTON_LOG=1\", \"RUN_SWAY=true\", \"GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*\", \"STEAM_STARTUP_FLAGS=steam://rungameid/1245620\" ] # COPY EVERYTHING ELSE ... You can get the app ID from https://steamdb.info/ (Thanks to @nathanle1406 for the tip)","title":"Configuration","component":"wolf","version":"dev-fake-uinput","name":"configuration","url":"/wolf/dev-fake-uinput/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"Where apps will store permanent data?","hash":"data_setup","id":2},{"text":"Share home folder with multiple clients","hash":"_share_home_folder_with_multiple_clients","id":3},{"text":"Change the HOST_APPS_STATE_FOLDER","hash":"_change_the_host_apps_state_folder","id":4},{"text":"TOML file","hash":"_toml_file","id":5},{"text":"Defining apps","hash":"_defining_apps","id":6},{"text":"Override the default joypad mapping","hash":"_override_the_default_joypad_mapping","id":7},{"text":"App Runner","hash":"_app_runner","id":8},{"text":"Process","hash":"_process","id":9},{"text":"Docker","hash":"_docker","id":10},{"text":"Gstreamer","hash":"_gstreamer","id":11},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":12},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":13},{"text":"App render node","hash":"_app_render_node","id":14},{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":15}]},"35":{"id":35,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"dev-fake-uinput","name":"gstreamer","url":"/wolf/dev-fake-uinput/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"36":{"id":36,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia (Container Toolkit) Nvidia (Manual) WSL2 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid network_mode: host restart: unless-stopped Make sure that the version of the Nvidia container toolkit is >= 1.16.0 and that your driver version is >= 530.30.02 (you can check the driver version with nvidia-smi). sudo nvidia-container-cli -V cli-version: 1.16.0 lib-version: 1.16.0 build date: 2024-07-15T13:41+00:00 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --gpus=all \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid runtime: nvidia deploy: resources: reservations: devices: - capabilities: [gpu] network_mode: host restart: unless-stopped Unfortunately, on Nvidia, things are a little bit more complex.. Make sure that your driver version is >= 530.30.02 First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/uhid - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Running Wolf in WSL2 hasn’t been properly tested. You can run Wolf in a very unprivileged setting without uinput/uhid, unfortunately this means that you’ll be restricted to only using mouse and keyboard. For Nvidia users, follow the Nvidia instructions above. This should work for AMD/Intel users. docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ ghcr.io/games-on-whales/wolf:stable Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users, you can open more ports if needed) EXPOSE 48100-48110/udp # Audio (up to 10 users, you can open more ports if needed) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Allows Wolf to access /dev/uhid KERNEL==\"uhid\", TAG+=\"uaccess\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"dev-fake-uinput","name":"quickstart","url":"/wolf/dev-fake-uinput/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"37":{"id":37,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page Example log line: 0:01:31.983118812 1 0x7f1d50000b70 ERROR qsvencoder gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_session: MFXVideoENCODE::Query failed -3 (MFX_ERR_UNSUPPORTED) 0:01:31.983243805 1 0x7f1d50000b70 WARN videoencoder gstvideoencoder.c:771:gst_video_encoder_setcaps: rejected caps video/x-raw(memory:VAMemory), width=(int)1280, height=(int)720, framerate=(fraction)60/1, format=(string)NV12, chroma-site=(string)mpeg2, colorimetry=(string)bt601 Follow the steps outlined in here: sudo apt install --reinstall linux-firmware Add i915.enable_guc=2 in /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash i915.force_probe=* i915.enable_guc=2\" sudo update-initramfs –u sudo update-grub Reboot the system. After reboot, execute the command: dmesg | grep guc Verify the logs for guc information. Note: If output doesn’t contain guc details, then install the latest guc/huc firmware. Copy the firmware to /lib/firmware/i915/, and reboot the system.","title":"Troubleshooting","component":"wolf","version":"dev-fake-uinput","name":"troubleshooting","url":"/wolf/dev-fake-uinput/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4},{"text":"Intel: MFX_ERR_UNSUPPORTED","hash":"_intel_mfx_err_unsupported","id":5}]},"38":{"id":38,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"dev-nix","name":"index","url":"/wolf/dev-nix/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"39":{"id":39,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: virtual audio library A little CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"dev-nix","name":"code-structure","url":"/wolf/dev-nix/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"40":{"id":40,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"dev-nix","name":"fake-udev","url":"/wolf/dev-nix/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"41":{"id":41,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"dev-nix","name":"gstreamer","url":"/wolf/dev-nix/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"42":{"id":42,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxingcore-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.22.7 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"dev-nix","name":"manual_build","url":"/wolf/dev-nix/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"43":{"id":43,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"dev-nix","name":"wayland","url":"/wolf/dev-nix/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"44":{"id":44,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"dev-nix","name":"control-specs","url":"/wolf/dev-nix/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"45":{"id":45,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"dev-nix","name":"http-pairing","url":"/wolf/dev-nix/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"46":{"id":46,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"dev-nix","name":"index","url":"/wolf/dev-nix/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"47":{"id":47,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"dev-nix","name":"input-data","url":"/wolf/dev-nix/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"48":{"id":48,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"dev-nix","name":"rtp-opus","url":"/wolf/dev-nix/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"49":{"id":49,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"dev-nix","name":"rtp-video","url":"/wolf/dev-nix/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"50":{"id":50,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"dev-nix","name":"rtsp","url":"/wolf/dev-nix/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"51":{"id":51,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools The TOML configuration file is read only once at startup (or created if not present) and it’ll be modified by Wolf only when a new user is successfully paired. Default TOML configuration file hostname = \"wolf\" (1) support_hevc = true (2) config_version = 2 (3) uuid = \"0f75f4d1-e28e-410a-b318-c0579f18f8d1\" (4) paired_clients = [] (5) apps = [] (6) gstreamer = {} (7) 1 hostname: this is the name that will be displayed in the list of hosts in the Moonlight UI 2 support_hevc: when set to false will disable support for HEVC in Moonlight 3 config_version: The version of this config file 4 uuid: a randomly generated UUID, it’s used by Moonlight to know if the current host has already been paired 5 paired_clients: a list of all the Moonlight clients that have succesfully completed the pairing process; it’ll be populated by Wolf and saved to this file. 6 apps: a list of apps, see: Defining apps 7 gstreamer audio/video pipeline definitions, see Gstreamer Apps defined here will be shown in Moonlight after successfully pairing with Wolf. You can re-define parts of the Gstreamer pipeline easily, ex: [[apps]] title = \"Test ball\" (1) start_virtual_compositor = false (2) [apps.runner] (3) type = \"process\" run_cmd = \"sh -c \\\"while :; do echo 'running...'; sleep 10; done\\\"\" [apps.video] (4) source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" [apps.audio] (5) source = \"audiotestsrc wave=ticks is-live=true\" 1 title: this is the name that will be displayed in Moonlight 2 start_virtual_compositor: set to True if this app needs our custom virtual compositor (TODO: document this better) 3 runner: the type of process to run in order to start this app, see: App Runner 4 video: here it’s possible to override the default video pipeline variables defined in: Gstreamer 5 audio: here it’s possible to override the default audio pipeline variables defined in: Gstreamer See more examples in the Gstreamer page. There are currently two types of runner supported: docker and process Example: [apps.runner] type = \"process\" run_cmd = \"sh -c \\\"while :; do echo 'running...'; sleep 10; done\\\"\" Example: type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" mounts = [ \"/run/udev:/run/udev:ro\" ] env = [ \"PROTON_LOG=1\", \"RUN_GAMESCOPE=true\", \"ENABLE_VKBASALT=1\" ] devices = [] ports = [] base_create_json = \"\"\" (1) { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false } } \\ \"\"\" 1 base_create_json: here you can re-define any property that’s defined in the docker API JSON format, see: docs.docker.com/engine/api/v1.40 In here we define the default pipeline for both video and audio streaming to Moonlight. In order to automatically pick up the right encoder at runtime based on the user HW we run in order the list of encoders at gstreamer.video.hevc_encoders (and gstreamer.video.h264_encoders); the first set of plugins that can be correctly initialised by Gstreamer will be the selected encoder for all the pipelines. You can read more about gstreamer and custom pipelines in the Gstreamer page. When you have multiple GPUs installed in your host, you might want to have better control over which one is used by Wolf and how. There are two main separated parts that make use of HW acceleration in Wolf: Gstreamer video encoding: this will use HW acceleration in order to efficiently encode the video stream with H.264 or HEVC. App render node: this will use HW acceleration in order to create virtual Wayland desktops and run the chosen app (ex: Firefox, Steam, …​) They can be configured separately, and ideally you could even use two GPUs at the same time for different jobs; a common setup would be to use the integrated GPU just for the streaming part and use a powerful GPU to play apps/games. The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used. If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either: Delete the nvcodec entries under gstreamer.video.hevc_encoders Cut the qsv entry and paste it above the nvcodec entry On top of that, each single apps entry support overriding the default streaming pipeline; for example: [[apps]] title = \"Test ball\" # More options here, removed for brevity... [apps.video] source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the encoder_pipeline with the corresponding encoder plugin; see: gstreamer/issues/1167. Each application that Wolf will start will have access only to a specific render node even if the host has multiple GPUs connected. By default, Wolf will use the env variable WOLF_RENDER_NODE which defaults to /dev/dri/renderD128 If you don’t know which render node is associated with which GPU you can use the following command: ls -l /sys/class/drm/renderD*/device/driver /sys/class/drm/renderD128/device/driver -> ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\"","title":"Configuration","component":"wolf","version":"dev-nix","name":"configuration","url":"/wolf/dev-nix/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"TOML file","hash":"_toml_file","id":2},{"text":"Defining apps","hash":"_defining_apps","id":3},{"text":"App Runner","hash":"_app_runner","id":4},{"text":"Process","hash":"_process","id":5},{"text":"Docker","hash":"_docker","id":6},{"text":"Gstreamer","hash":"_gstreamer","id":7},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":8},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":9},{"text":"App render node","hash":"_app_render_node","id":10}]},"52":{"id":52,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"dev-nix","name":"gstreamer","url":"/wolf/dev-nix/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"53":{"id":53,"text":"Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to stream video and audio with low latency Wolf runs as a Docker container that will start and stop automatically new containers on-demand. This has a few major advantages: Each remote client will run in a separate and isolated container. Input devices (mouse, keyboard, joypads) are completely isolated between multiple users. Nothing is permanently installed on the host; wiping down the Docker images and the permanent storage folder is all you need to completely clean your server. If you are curious to look under the hood of Wolf we have some high-level docs under the Developer guide, and you can always take a look at the actual code since everything is open source.","title":"Overview","component":"wolf","version":"dev-nix","name":"overview","url":"/wolf/dev-nix/user/overview.html","titles":[{"text":"How it works","hash":"_how_it_works","id":1}]},"54":{"id":54,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ -v /dev/shm:/dev/shm:rw \\ -v /dev/input:/dev/input:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3.8\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/shm:/dev/shm:rw - /dev/input:/dev/input:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput network_mode: host restart: unless-stopped Unfortunately, on Nvidia, things are a little bit more complex: Your driver version must be >= 530.30.02 --gpus and the Nvidia Docker Toolkit seems to not work (to be investigated) First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ -v /dev/shm:/dev/shm:rw \\ -v /dev/input:/dev/input:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3.8\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/shm:/dev/shm:rw - /dev/input:/dev/input:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users) EXPOSE 48100-48110/udp # Audio (up to 10 users) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"dev-nix","name":"quickstart","url":"/wolf/dev-nix/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"55":{"id":55,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page","title":"Troubleshooting","component":"wolf","version":"dev-nix","name":"troubleshooting","url":"/wolf/dev-nix/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4}]},"56":{"id":56,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"dev-tracy","name":"index","url":"/wolf/dev-tracy/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"57":{"id":57,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: virtual audio library A little CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"dev-tracy","name":"code-structure","url":"/wolf/dev-tracy/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"58":{"id":58,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"dev-tracy","name":"fake-udev","url":"/wolf/dev-tracy/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"59":{"id":59,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"dev-tracy","name":"gstreamer","url":"/wolf/dev-tracy/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"60":{"id":60,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxingcore-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.22.7 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"dev-tracy","name":"manual_build","url":"/wolf/dev-tracy/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"61":{"id":61,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"dev-tracy","name":"wayland","url":"/wolf/dev-tracy/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"62":{"id":62,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"dev-tracy","name":"control-specs","url":"/wolf/dev-tracy/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"63":{"id":63,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"dev-tracy","name":"http-pairing","url":"/wolf/dev-tracy/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"64":{"id":64,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"dev-tracy","name":"index","url":"/wolf/dev-tracy/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"65":{"id":65,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"dev-tracy","name":"input-data","url":"/wolf/dev-tracy/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"66":{"id":66,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"dev-tracy","name":"rtp-opus","url":"/wolf/dev-tracy/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"67":{"id":67,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"dev-tracy","name":"rtp-video","url":"/wolf/dev-tracy/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"68":{"id":68,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"dev-tracy","name":"rtsp","url":"/wolf/dev-tracy/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"69":{"id":69,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools The TOML configuration file is read only once at startup (or created if not present) and it’ll be modified by Wolf only when a new user is successfully paired. Default TOML configuration file hostname = \"wolf\" (1) support_hevc = true (2) config_version = 2 (3) uuid = \"0f75f4d1-e28e-410a-b318-c0579f18f8d1\" (4) paired_clients = [] (5) apps = [] (6) gstreamer = {} (7) 1 hostname: this is the name that will be displayed in the list of hosts in the Moonlight UI 2 support_hevc: when set to false will disable support for HEVC in Moonlight 3 config_version: The version of this config file 4 uuid: a randomly generated UUID, it’s used by Moonlight to know if the current host has already been paired 5 paired_clients: a list of all the Moonlight clients that have succesfully completed the pairing process; it’ll be populated by Wolf and saved to this file. 6 apps: a list of apps, see: Defining apps 7 gstreamer audio/video pipeline definitions, see Gstreamer Apps defined here will be shown in Moonlight after successfully pairing with Wolf. You can re-define parts of the Gstreamer pipeline easily, ex: [[apps]] title = \"Test ball\" (1) start_virtual_compositor = false (2) [apps.runner] (3) type = \"process\" run_cmd = \"sh -c \\\"while :; do echo 'running...'; sleep 10; done\\\"\" [apps.video] (4) source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" [apps.audio] (5) source = \"audiotestsrc wave=ticks is-live=true\" 1 title: this is the name that will be displayed in Moonlight 2 start_virtual_compositor: set to True if this app needs our custom virtual compositor (TODO: document this better) 3 runner: the type of process to run in order to start this app, see: App Runner 4 video: here it’s possible to override the default video pipeline variables defined in: Gstreamer 5 audio: here it’s possible to override the default audio pipeline variables defined in: Gstreamer See more examples in the Gstreamer page. There are currently two types of runner supported: docker and process Example: [apps.runner] type = \"process\" run_cmd = \"sh -c \\\"while :; do echo 'running...'; sleep 10; done\\\"\" Example: type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" mounts = [ \"/run/udev:/run/udev:ro\" ] env = [ \"PROTON_LOG=1\", \"RUN_GAMESCOPE=true\", \"ENABLE_VKBASALT=1\" ] devices = [] ports = [] base_create_json = \"\"\" (1) { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false } } \\ \"\"\" 1 base_create_json: here you can re-define any property that’s defined in the docker API JSON format, see: docs.docker.com/engine/api/v1.40 In here we define the default pipeline for both video and audio streaming to Moonlight. In order to automatically pick up the right encoder at runtime based on the user HW we run in order the list of encoders at gstreamer.video.hevc_encoders (and gstreamer.video.h264_encoders); the first set of plugins that can be correctly initialised by Gstreamer will be the selected encoder for all the pipelines. You can read more about gstreamer and custom pipelines in the Gstreamer page. When you have multiple GPUs installed in your host, you might want to have better control over which one is used by Wolf and how. There are two main separated parts that make use of HW acceleration in Wolf: Gstreamer video encoding: this will use HW acceleration in order to efficiently encode the video stream with H.264 or HEVC. App render node: this will use HW acceleration in order to create virtual Wayland desktops and run the chosen app (ex: Firefox, Steam, …​) They can be configured separately, and ideally you could even use two GPUs at the same time for different jobs; a common setup would be to use the integrated GPU just for the streaming part and use a powerful GPU to play apps/games. The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used. If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either: Delete the nvcodec entries under gstreamer.video.hevc_encoders Cut the qsv entry and paste it above the nvcodec entry On top of that, each single apps entry support overriding the default streaming pipeline; for example: [[apps]] title = \"Test ball\" # More options here, removed for brevity... [apps.video] source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the encoder_pipeline with the corresponding encoder plugin; see: gstreamer/issues/1167. Each application that Wolf will start will have access only to a specific render node even if the host has multiple GPUs connected. By default, Wolf will use the env variable WOLF_RENDER_NODE which defaults to /dev/dri/renderD128 If you don’t know which render node is associated with which GPU you can use the following command: ls -l /sys/class/drm/renderD*/device/driver /sys/class/drm/renderD128/device/driver -> ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\"","title":"Configuration","component":"wolf","version":"dev-tracy","name":"configuration","url":"/wolf/dev-tracy/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"TOML file","hash":"_toml_file","id":2},{"text":"Defining apps","hash":"_defining_apps","id":3},{"text":"App Runner","hash":"_app_runner","id":4},{"text":"Process","hash":"_process","id":5},{"text":"Docker","hash":"_docker","id":6},{"text":"Gstreamer","hash":"_gstreamer","id":7},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":8},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":9},{"text":"App render node","hash":"_app_render_node","id":10}]},"70":{"id":70,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"dev-tracy","name":"gstreamer","url":"/wolf/dev-tracy/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"71":{"id":71,"text":"Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to stream video and audio with low latency Wolf runs as a Docker container that will start and stop automatically new containers on-demand. This has a few major advantages: Each remote client will run in a separate and isolated container. Input devices (mouse, keyboard, joypads) are completely isolated between multiple users. Nothing is permanently installed on the host; wiping down the Docker images and the permanent storage folder is all you need to completely clean your server. If you are curious to look under the hood of Wolf we have some high-level docs under the Developer guide, and you can always take a look at the actual code since everything is open source.","title":"Overview","component":"wolf","version":"dev-tracy","name":"overview","url":"/wolf/dev-tracy/user/overview.html","titles":[{"text":"How it works","hash":"_how_it_works","id":1}]},"72":{"id":72,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ -v /dev/shm:/dev/shm:rw \\ -v /dev/input:/dev/input:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3.8\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/shm:/dev/shm:rw - /dev/input:/dev/input:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput network_mode: host restart: unless-stopped Unfortunately, on Nvidia, things are a little bit more complex: Your driver version must be >= 530.30.02 --gpus and the Nvidia Docker Toolkit seems to not work (to be investigated) First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ -v /dev/shm:/dev/shm:rw \\ -v /dev/input:/dev/input:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3.8\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/shm:/dev/shm:rw - /dev/input:/dev/input:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users) EXPOSE 48100-48110/udp # Audio (up to 10 users) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"dev-tracy","name":"quickstart","url":"/wolf/dev-tracy/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"73":{"id":73,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page","title":"Troubleshooting","component":"wolf","version":"dev-tracy","name":"troubleshooting","url":"/wolf/dev-tracy/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4}]},"74":{"id":74,"text":"An intelligent wolf is better than a foolish lion. — Matshona Dhliwayo. Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames! It’s made from the ground up with the following primary goals: Allow multiple users to stream different content by sharing a single remote host hardware On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug. Allow multiple GPUs to be used simultaneously for different jobs Example: stream encoding on iGPU whilst gaming on GPU Provide low latency video and audio stream with full support for gamepads Linux and Docker first: run your games with low privileges in containers (based on Games On Whales) Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? Try out Sunshine! @Drakulix for the incredible help given in developing Wolf @zb140 for the constant help and support in GOW @loki-47-6F-64 for creating and sharing Sunshine @ReenigneArcher for beying the first stargazer of the project and taking care of keeping Sunshine alive All the guys at the Moonlight Discord channel, for the tireless help they provide to anyone","title":"Wolf","component":"wolf","version":"stable","name":"index","url":"/wolf/stable/index.html","titles":[{"text":"Acknowledgements","hash":"_acknowledgements","id":1}]},"75":{"id":75,"text":"Wolf will start different Docker containers that are preconfigured for different apps such as Steam, Pegasus or Firefox. Once the container is launched, Wolf streams the output to the connected Moonlight client. See each subpage for further details and additional configuration steps.","title":"Apps","component":"wolf","version":"stable","name":"index","url":"/wolf/stable/apps/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"76":{"id":76,"text":"Table of Contents Introduction Getting Started ROM Directory Structure Setting Up ROM Directories Configuration Setting Up Bind Mounts for ROMs Example Configuration Emulators Customization Theming Troubleshooting and Additional Resources Pegasus is a powerful and flexible frontend for launching games, similar to EmulationStation. It provides a unified interface for interacting with various emulators, eliminating the need to manage multiple emulator interfaces separately. By default, Pegasus is configured to look for ROMs in the /ROMs directory, with subdirectories for each platform. You can either create the ROM directories in the format below or edit Pegasus to use your preferred location. /ROMs/3do /ROMs/amiga /ROMs/amigacd32 /ROMs/arcade /ROMs/atari2600 /ROMs/atari5200 /ROMs/atari7800 /ROMs/atarijaguar /ROMs/atarijaguarcd /ROMs/atarilynx /ROMs/atarist /ROMs/gb /ROMs/gba /ROMs/gbc /ROMs/gc /ROMs/genesis /ROMs/megacd /ROMs/model2 /ROMs/model3 /ROMs/n64 /ROMs/naomi /ROMs/neogeo /ROMs/nes /ROMs/ngp /ROMs/ngpc /ROMs/ps2 /ROMs/ps3 /ROMs/psp /ROMs/psx /ROMs/saturn /ROMs/sega32x /ROMs/segacd /ROMs/snes /ROMs/snes_widescreen /ROMs/switch /ROMs/virtualboy /ROMs/wii /ROMs/wiiu /ROMs/wonderswan /ROMs/wonderswancolor /ROMs/xbox To make your roms accessible to Pegasus within the container, you need to create a bind mount that maps your host ROM folder to the /ROMs directory in the container. This is done by editing the config.toml file. To create a bind mount for your ROMs, add the following line to the \"HostConfig\" section of your config.toml: \"Binds\": [ \"/path/to/roms:/ROMs\" ] Replace /path/to/roms with the actual path to your ROM directory on the host system. Here’s an example of how the Pegasus configuration might look in your config.toml file: [[apps]] title = \"Pegasus\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfEmulators\" image = \"ghcr.io/games-on-whales/pegasus:edge\" mounts = [] env = [ \"RUN_SWAY=1\", \"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\", ] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"Binds\": [ \"/path/to/roms:/ROMs\" ], \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\"] } } \"\"\" Pegasus is preconfigured with several popular emulators. Each emulator is designed to run games for specific platforms. For detailed information on configuring and using these emulators, please refer to their respective documentation: RetroArch: https://docs.libretro.com/ PCSX2: https://pcsx2.net/docs/ Xemu: https://xemu.app/docs/ RPCS3: https://rpcs3.net/quickstart CEMU: https://cemu.cfw.guide/ Dolphin: https://dolphin-emu.org/docs/guides/ Pegasus supports extensive customization through themes. You can change the look and feel of your frontend to suit your preferences. For a demonstration of different themes, watch this YouTube video. Browse and download themes from the official Pegasus Themes Gallery. To install a theme, you need to launch the Pegasus app at least once, then download the theme and place in: /Pegasus/.config/pegasus-frontend/themes On the next Pegasus launch, you will be able to select the theme from within the settings. If you encounter any issues or need more information, consider the following resources: Official Pegasus Documentation: https://pegasus-frontend.org/docs/ Pegasus FAQ: https://pegasus-frontend.org/docs/faq/ Community Forums: https://pegasus-frontend.org/community/ For specific issues related to this container or its configuration, please refer to the project’s issue tracker or community support channels.","title":"Pegasus Frontend Configuration","component":"wolf","version":"stable","name":"pegasus","url":"/wolf/stable/apps/pegasus.html","titles":[{"text":"Introduction","hash":"_introduction","id":1},{"text":"Getting Started","hash":"_getting_started","id":2},{"text":"ROM Directory Structure","hash":"_rom_directory_structure","id":3},{"text":"Setting Up ROM Directories","hash":"_setting_up_rom_directories","id":4},{"text":"Configuration","hash":"_configuration","id":5},{"text":"Setting Up Bind Mounts for ROMs","hash":"_setting_up_bind_mounts_for_roms","id":6},{"text":"Example Configuration","hash":"_example_configuration","id":7},{"text":"Emulators","hash":"_emulators","id":8},{"text":"Customization","hash":"_customization","id":9},{"text":"Theming","hash":"_theming","id":10},{"text":"Troubleshooting and Additional Resources","hash":"_troubleshooting_and_additional_resources","id":11}]},"77":{"id":77,"text":"One of the pre-installed applications in the default Wolf configuration is Steam. Getting Steam to work in a headless container took some work, so this page lists some limitations and tips to get the most out of Steam. In order to directly launch a Steam game from Moonlight you can just copy the existing entry for Steam, change the name and just add the Steam app ID as env variable; example: [[apps]] title = \"Elden Ring\" start_virtual_compositor = true [apps.runner] env = [ \"PROTON_LOG=1\", \"RUN_SWAY=true\", \"GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*\", \"STEAM_STARTUP_FLAGS=steam://rungameid/1245620\" ] # COPY EVERYTHING ELSE ... You can get the app ID from https://steamdb.info/ (Thanks to @nathanle1406 for the tip) The steam overlay currently does not work in our headless container. So if you want to see FPS and other stats you can use FlightlessMango’s excellent MangoHud. It’s already installed and enabled in the default steam image for all Vulkan games (including Proton games). See below for how to activate it in game. While mangohud is already installed, there’s no way to globally enable it for all OpenGL games. You can still enable it on a per-game basis by adding mangohud %command% to the game’s launch options in Steam. In a game, you can press Right Shift + F12 to make the overlay appear and disappear. You can also press Right Shift + F11 to change the position of the overlay on screen.","title":"Steam","component":"wolf","version":"stable","name":"steam","url":"/wolf/stable/apps/steam.html","titles":[{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":1},{"text":"MangoHud","hash":"_mangohud","id":2},{"text":"Proton (Steam Play) and other Vulkan games","hash":"_proton_steam_play_and_other_vulkan_games","id":3},{"text":"OpenGL (Native Linux) games","hash":"_opengl_native_linux_games","id":4},{"text":"Activation and configuration","hash":"_activation_and_configuration","id":5}]},"78":{"id":78,"text":"The code is written in order to be as readable as possible with no side effects and no global objects/variables. We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits: Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions. This gives us the power to support multiple concurrent users effortlessly. Code can easily be re-used by other projects since every part is highly decoupled. Enables testing most of the implemented methods in isolation. We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules. High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf: docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods. input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more! virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops. audio.hpp: a simple abstraction on top of libpulse to create and control virtual audio devices. A little standalone CLI tool that enables us to generate udev events. You can read more about the rationale behind it in Hotplug in Docker. Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. It currently hosts the followings: HTTP/S protocol interface: protocol.hpp Control protocol packet format control.hpp Reed Solomon FEC header fec.hpp Based on top of sleepybishop/nanors RTSP message parser parser.hpp Built using yhirose/cpp-peglib by writing a formal PEG (Parsing Expression Grammars) definition for all messages This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server. In order to keep modules decoupled most of the logic revolves around reacting to events in a shared event bus (implemented using DeveloperPaul123/eventbus). Unit tests will live under tests/ and are written using the Catch2 framework. We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions. Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. Checkout the options in the tests/CMakeLists.txt","title":"Code Structure","component":"wolf","version":"stable","name":"code-structure","url":"/wolf/stable/dev/code-structure.html","titles":[{"text":"Modules","hash":"_modules","id":1},{"text":"src/core","hash":"_srccore","id":2},{"text":"src/fake-udev","hash":"_srcfake_udev","id":3},{"text":"src/moonlight-protocol","hash":"_srcmoonlight_protocol","id":4},{"text":"src/moonlight-server","hash":"_srcmoonlight_server","id":5},{"text":"tests","hash":"_tests","id":6}]},"79":{"id":79,"text":"We would like to achieve two goals here: Be able to plug (and unplug) devices into our applications running inside Docker containers Achieve full isolation: we don’t want to overlap devices between different containers Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server. Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream. When a new virtual device is created, we have to \"mount\" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag. Normally, Docker assigns devices available to a container at creation time. Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside. Example Docker command issued by Wolf docker exec -it sh -c \"mknod /dev/input/ c :\" We’ve mounted the right device into the right container, still, no application is picking it up [2]. We have to trigger some kind of \"event\" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev. An example udev event when you plug a joypad UDEV [3588.199301] add /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input) ACTION=add SUBSYSTEM=input DEVNAME=/dev/input/js0 ID_BUS=usb ID_MODEL=Wireless_Controller ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller ID_VENDOR=Sony_Interactive_Entertainment ID_VENDOR_ENC=Sony\\x20Interactive\\x20Entertainment ID_VENDOR_ID=054c ID_REVISION=0100 ID_TYPE=hid ID_USB_VENDOR_ID=054c ID_USB_REVISION=0100 ID_USB_TYPE=hid ID_USB_DRIVER=usbhid MAJOR=13 MINOR=0 The first approach is to just pass the udev socket (and db files, more on this later) from the host. Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right? Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be \"broadcast\" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created. We want to be able to be in control of exactly when these events will be sent so that the flow is as follows: Figure 2. The order here matters, the udev events must be sent after the mount Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications. First, let’s take a step back; how are application communicating with udev? Though udev runs in userspace, it is highly entangled with the Linux kernel. The first entry that recognizes device insertion/deletion events is surely the Linux kernel. While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. — https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ Normally udevd does the following steps: Listens for kernel events via the netlink socket (GROUP_KERNEL) When it receives a new device event, it’ll run all the rules that are defined Send back the \"augmented\" message via another netlink socket (GROUP_UDEV) The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be \"impersonated\" by any user space application [3]. Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation. There are 3 main components that needs to be \"faked\" in order for tricking programs that are using libudev into using our fake events: create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU. send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV generate the appropriate DB entries in /run/udev/data/ these are just plain text files where the filename is just c: and the content is roughly the same as the event message payload The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod. echo -ne \\\"ACTION=add\\\\0DEVNAME=input/bomb\\\\0DEVPATH=/devices/bomb\\\\0SEQNUM=1234\\\\0SUBSYSTEM=input\\\\0\\\" | base64 | sudo fake-udev # `udevadm monitor` should print something like: UDEV [3931.403835] add /devices/bomb (input) These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem. Luckily, reversing the steps is enough to also correctly unplug devices. First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad. 1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) 2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games 3. Given enough permissions, that’s why our fake udev runs as root","title":"Hotplug in Docker","component":"wolf","version":"stable","name":"fake-udev","url":"/wolf/stable/dev/fake-udev.html","titles":[{"text":"Mount virtual devices","hash":"_mount_virtual_devices","id":1},{"text":"If a tree falls in the forest, does it make a sound?","hash":"_if_a_tree_falls_in_the_forest_does_it_make_a_sound","id":2},{"text":"Use udev from the host","hash":"_use_udev_from_the_host","id":3},{"text":"Generating udev events","hash":"_generating_udev_events","id":4},{"text":"Udev internals","hash":"_udev_internals","id":5},{"text":"Faking udev","hash":"_faking_udev","id":6},{"text":"Putting it all together","hash":"_putting_it_all_together","id":7},{"text":"References","hash":"_references","id":8}]},"80":{"id":80,"text":"GStreamer is a library for constructing graphs of media-handling components. The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. — gstreamer.freedesktop.org We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets. This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight. Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight The basic flow is the following: The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client. We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes: split the original buffer into a set of correctly sized chunks Encrypt the chunks when enabled add RTP headers to each chunk create additional RTP packets with the FEC information Push the resulting list downstream Figure 2. An example pipeline for video encoding and streaming Figure 3. An example pipeline for audio encoding and streaming This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed. We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins. Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation. Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio. GStreamer uses GObjects: a mechanism to retrofit Objects into C. I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial. Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely: gstrtpmoonlightpay_video.hpp and gstrtpmoonlightpay_video.cpp contain all the boilerplate code needed to setup a plugin, property definitions, etc. gstrtpmoonlightpay_audio.hpp and gstrtpmoonlightpay_audio.cpp for audio. video.hpp contains all the functions that turns a linear buffer of data into a list of correctly formed RTP packets. audio.hpp same for audio","title":"GStreamer","component":"wolf","version":"stable","name":"gstreamer","url":"/wolf/stable/dev/gstreamer.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"The plugin","hash":"_the_plugin","id":2},{"text":"Code","hash":"_code","id":3}]},"81":{"id":81,"text":"Wolf is composed of a few independent components that, when used together, allow us to run and stream multiple graphical applications on the same server without any overlap between them. In order to create virtual desktops on-demand, we’ve created a custom (micro) Wayland compositor: gst-wayland-display. It’s based on Smithay, coded in Rust and exposes both a standalone GStreamer plugin and an easy-to-use C API. The main benefit of this solution is that our compositor will then expose the raw framebuffer so that Wolf can feed that directly to the video encoding pipeline. You can read more about it in Headless Wayland. To keep things simple, our Wayland compositor doesn’t support XWayland, for containers that need it (like Steam) we use Gamescope which can be run as a Wayland client, and it’ll provide XWayland support to the downstream app. Audio doesn’t need any HW acceleration, it’s fairly trivial to run PulseAudio as a standalone container and use libpulse in order to create virtual audio sink on-demand. Creating and managing virtual devices is handled by inputtino: a small library that abstracts away the complexities of managing uinput (and uhid) to create virtual input devices. Virtual devices created by inputtino will be visible on the host system and can potentially break the host isolation that we’re trying to achieve. In order to avoid this, we encourage users to install a set of udev rules that will restrict access to these devices to a specific group (e.g. input) and move mouse and keyboard to a different seat (see user:quickstart.adoc#_virtual_devices_support). You can read a more detailed explanation into why we’ve added uhid and how gyro/acceleration is achieved here Some devices like mouse and keyboard are always present and will be automatically created and setup before starting the application. Other devices can be hotplugged whilst the streaming is running; for example, a gamepad can be plugged in after the game has started. Special care is needed in order to safely mount these new devices in the app container and to make them available to the running application, there’s an in-depth article about it here: Hotplug in Docker We run applications in a containerised environment, this way we can ensure that the application will not interfere with the host system (and with other running apps) and that it will have access only to the virtual devices that we’ve created. We have a set of pre-built containers that are optimised to work with our flow in games-on-whales/gow. Generally, though, most of the GUI applications should work inside a container that can then be streamed via Wolf. We use GStreamer to encode the video and audio streams and send them to the client. We have automatic support for HW acceleration using CUDA, QuickSync and VAAPI but thanks to GStreamer we can easily add more encoders into the mix, without having to write a single line of code! The full encoding pipeline is described in a string that can be overridden by users just by changing the config.toml file. We’ve implemented a couple of custom GStreamer plugins in order to properly split, RTP encode and add FEC to the resulting buffers into the format that Moonlight expects; they live in here: src/moonlight-server/gst-plugin.","title":"How does it work?","component":"wolf","version":"stable","name":"how-it-works","url":"/wolf/stable/dev/how-it-works.html","titles":[{"text":"Virtual desktop","hash":"_virtual_desktop","id":1},{"text":"Virtual audio","hash":"_virtual_audio","id":2},{"text":"Virtual input devices","hash":"_virtual_input_devices","id":3},{"text":"Support hotplug via fake-udev","hash":"_support_hotplug_via_fake_udev","id":4},{"text":"Running applications/games","hash":"_running_applicationsgames","id":5},{"text":"Streaming","hash":"_streaming","id":6}]},"82":{"id":82,"text":"This has been tested on Debian 12, you should adjust the setup based on your distro of choice. (Only needed on Nvidia hosts) Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system. You also have to install Cuda, you can follow the official instructions. We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). This will make sure that you end up with all the required plugins. Build dependencies apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \\ ca-certificates git libllvm15 \\ flex libx265-dev libopus-dev nasm libzxing-dev libzbar-dev libdrm-dev libva-dev \\ libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \\ libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \\ libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \\ libharfbuzz-dev libpango1.0-dev Build gstreamer git clone -b 1.24.6 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git cd gstreamer # Setup a place where we'll put the libraries mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include meson setup --prefix=$HOME/gstreamer \\ --buildtype=release \\ --strip \\ -Dgst-full-libraries=app,video \\ -Dorc=disabled \\ -Dgpl=enabled \\ -Dbase=enabled \\ -Dgood=enabled \\ -Dugly=enabled \\ -Drs=disabled \\ -Dtls=disabled \\ -Dgst-examples=disabled \\ -Dlibav=disabled \\ -Dtests=disabled \\ -Dexamples=disabled \\ -Ddoc=disabled \\ -Dpython=disabled \\ -Drtsp_server=disabled \\ -Dqt5=disabled \\ -Dbad=enabled \\ -Dgst-plugins-good:soup=disabled \\ -Dgst-plugins-good:ximagesrc=enabled \\ -Dgst-plugins-good:pulse=enabled \\ -Dgst-plugins-bad:x265=enabled \\ -Dgst-plugins-bad:qsv=enabled \\ -Dgst-plugins-bad:aom=enabled \\ -Dgst-plugin-bad:nvcodec=enabled \\ -Dvaapi=enabled \\ -Dgstreamer-vaapi:x11=disabled \\ build meson compile -C build meson install -C build This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example) Custom env export PATH=\"$HOME/gstreamer/usr/local/bin:$PATH\" export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/\" export CFLAGS=\"$CFLAGS -I$HOME/gstreamer/usr/local/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/\" You can now check that the nvcodec plugin correctly works (only on Nvidia hosts) GST_DEBUG=4 gst-inspect-1.0 nvcodec Adding GST_DEBUG helps debugging possible issues with this. Install Rust following the official docs. git clone https://github.com/games-on-whales/gst-wayland-display cd gst-wayland-display cargo install cargo-c mkdir $HOME/gst-wayland-display cargo cinstall --prefix=$HOME/gst-wayland-display Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean. Custom env export LIBRARY_PATH=\"$LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/\" export LDFLAGS=\"$LDFLAGS -L$HOME/gst-wayland-display/lib\" export CFLAGS=\"$CFLAGS -I$HOME/gst-wayland-display/include\" export PKG_CONFIG_PATH=\"$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/\" Build dependencies apt-get install -y --no-install-recommends \\ curl \\ ca-certificates \\ ninja-build \\ cmake \\ pkg-config \\ ccache \\ git \\ clang \\ libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev libboost-container-dev \\ libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \\ libcurl4-openssl-dev \\ libssl-dev \\ libevdev-dev \\ libpulse-dev \\ libunwind-dev \\ libudev-dev \\ libdrm-dev \\ libpci-dev \\ Compile cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja ninja -C build If compilation completes correctly, you can finally start Wolf Run! build/src/wolf/wolf INFO | Reading config file from: config.toml WARN | Unable to open config file: config.toml, creating one using defaults INFO | x509 certificates not present, generating... INFO | HTTP server listening on port: 47989 INFO | HTTPS server listening on port: 47984","title":"Dev environment setup","component":"wolf","version":"stable","name":"manual_build","url":"/wolf/stable/dev/manual_build.html","titles":[{"text":"Install Nvidia driver + cuda","hash":"_install_nvidia_driver_cuda","id":1},{"text":"Wolf dependencies","hash":"_wolf_dependencies","id":2},{"text":"Build Gstreamer","hash":"_build_gstreamer","id":3},{"text":"Build gst-wayland-display","hash":"_build_gst_wayland_display","id":4},{"text":"Install Wolf deps","hash":"_install_wolf_deps","id":5},{"text":"Compile Wolf","hash":"_compile_wolf","id":6}]},"83":{"id":83,"text":"Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source. You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that: Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges. You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice). It doesn’t scale well with multiple remote clients when sharing a single host Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ?? In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline. Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route. We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation). Figure 1. A high level overview of the main components Let’s dive into each of these parts in isolation. The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. — https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering. With direct rendering, the client and the server share a video memory buffer. The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. The compositor in turn can take the buffer and use it as a texture when it composites the desktop. One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered. The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU. Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play. Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. Until this time, the compositor will continue to render the last consistent state. In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks. The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL. Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? Sad news is, we don’t (at least currently). Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next. What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image. Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called \"explicit\" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. Buffers without an accompanying modifier are as such described as having an \"implicit\" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer. Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small. Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency. Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise. Here’s a bunch of useful links, docs and videos: The official Wayland docs and the Wayland book Why YOU should write a wayland compositor! by @drakulix An introduction to wayland EGL overview and quick reference card","title":"Headless Wayland","component":"wolf","version":"stable","name":"wayland","url":"/wolf/stable/dev/wayland.html","titles":[{"text":"Wayland compositor","hash":"_wayland_compositor","id":1},{"text":"Wayland clients","hash":"_wayland_clients","id":2},{"text":"Wayland Compositor","hash":"_wayland_compositor_2","id":3},{"text":"Gstreamer","hash":"_gstreamer","id":4},{"text":"References","hash":"_references","id":5}]},"84":{"id":84,"text":"The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6. All the exchanged messages are encrypted using AES GCM 128 bit. In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase. AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload. Figure 1. The format of encrypted packets (bytes) Element Size in bytes C++ type Description Type 2 unsigned short int The type of message, fixed at 0x0001 for this type of packet Len 2 unsigned short int The size of the rest of the message in bytes (Seq + TAG + Payload) Seq 4 unsigned int Monotonically increasing sequence number (used as IV for AES-GCM) GCM TAG 16 char * The AES GCM TAG Payload until Len char * The AES encrypted payload All data is little-endian encoded The first two bytes of the decrypted payload represent the type of the message; the following types are encoded: START_A (0x0305) START_B (0x0307) INVALIDATE_REF_FRAMES (0x0301) LOSS_STATS (0x0201) FRAME_STATS (0x0204) INPUT_DATA (0x0206) TERMINATION (0x0100) PERIODIC_PING (0x0200) IDR_FRAME (0x0302) HDR_MODE (0x010e) RUMBLE_DATA (0x010b) RUMBLE_TRIGGERS (0x5500) MOTION_EVENT (0x5501) RGB_LED (0x5502) The next two bytes indicate the size of the decrypted payload. The format of the remaining data depends on the message type. The following events are originating from the server and will be sent to Moonlight clients. A simple schema for a controller number and low/high frequencies Figure 2. The payload for a Rumble packet (bytes) new in Moonlight 5.0.0 A simple schema for a controller number and left/right values Figure 3. The payload for a Trigger packet (bytes) new in Moonlight 5.0.0 This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server. By default Moonlight disables these events in order to save bandwith. Figure 4. The payload for a Motion packet (bytes) Type could be: ACCELERATION (0x01) GYROSCOPE (0x02) new in Moonlight 5.0.0 This is used to control the color of the LED of supported controllers. An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client. Figure 5. The payload for a LED packet (bytes)","title":"Control specifications","component":"wolf","version":"stable","name":"control-specs","url":"/wolf/stable/protocols/control-specs.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Encrypted packet format","hash":"_encrypted_packet_format","id":2},{"text":"Decrypted payload","hash":"_decrypted_payload","id":3},{"text":"Server events","hash":"_server_events","id":4},{"text":"Rumble data","hash":"_rumble_data","id":5},{"text":"Rumble Triggers","hash":"_rumble_triggers","id":6},{"text":"Motion Event","hash":"_motion_event","id":7},{"text":"RGB LED","hash":"_rgb_led","id":8}]},"85":{"id":85,"text":"Here we start with a question: How can we securely authenticate an untrusted client over an insecure network? This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf). Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. On the backend, we’ll need the PIN to be inserted by the user. PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases. At this stage we only have to send back our public certificate (plaincert). Using the AES key that we generated in the phase 1 we have to decrypt the client challenge, We generate a SHA256 hash with the following: Decrypted challenge Server certificate signature Server secret: a randomly generated secret The hash + server_challenge will then be AES encrypted and sent as the challengeresponse Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: using our private key we have to sign the certificate_signature + server_secret (generated in phase 2) We now have to use everything we exchanged before in order to verify and finally pair the clients. We’ll check the client_hash obtained at phase 3, it should contain the following: The original server_challenge The signature of the X509 client_cert The unencrypted client_pairing_secret We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight The response will contain: paired = 1, if all checks are fine paired = 0, otherwise This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection. On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs","title":"HTTP/S Pairing","component":"wolf","version":"stable","name":"http-pairing","url":"/wolf/stable/protocols/http-pairing.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"Phase 1","hash":"_phase_1","id":2},{"text":"Phase 2","hash":"_phase_2","id":3},{"text":"Phase 3","hash":"_phase_3","id":4},{"text":"Phase 4","hash":"_phase_4","id":5},{"text":"Phase 5 (HTTPS)","hash":"_phase_5_https","id":6}]},"86":{"id":86,"text":"Figure 1. High level overview of the protocols flow Design a better flowchart There are 6 main protocols involved in the current Moonlight protocol: HTTP (TCP 47989) unencrypted 🔓 used to exchanged public information needed to start pairing clients HTTPS (TCP 47984) encrypted 🔐 (SSL) only available to paired clients used to exchange available apps, encryption keys and trigger the start of a stream RTSP (TCP 48010) unencrypted 🔓 Used to exchange ports and settings for the next 3 streams Control over ENet (UDP 47999) encrypted 🔐 (using AES GCM 128 bit) Used to exchange user input data and extra stream information Video over RTP (UDP 47998) unencrypted 🔓 Uses H.264 or HEVC to encode video Audio over RTP (UDP 48000) encrypted 🔐 (using AES CBC 128 bit) Uses Opus to encode audio The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.","title":"Moonlight Protocols","component":"wolf","version":"stable","name":"index","url":"/wolf/stable/protocols/index.html","titles":[{"text":"Overview","hash":"_overview","id":1}]},"87":{"id":87,"text":"Moonlight will send all user inputs via the control stream. Figure 1. General format of an INPUT_DATA message The first 4 bytes (big endian) following the header of a packet of type INPUT_DATA indicate the size of the message, which varies depending on the input type. The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table. Input type name Value MOUSE_MOVE_REL 0x00000007 MOUSE_MOVE_ABS 0x00000005 MOUSE_BUTTON_DOWN 0x00000008 MOUSE_BUTTON_UP 0x00000009 KEY_DOWN 0x00000003 KEY_UP 0x00000004 MOUSE_SCROLL 0x0000000A MOUSE_HSCROLL 0x55000001 TOUCH 0x55000002 PEN 0x55000003 CONTROLLER_MULTI 0x0000000C CONTROLLER_ARRIVAL 0x55000004 CONTROLLER_TOUCH 0x55000005 CONTROLLER_MOTION 0x55000006 CONTROLLER_BATTERY 0x55000007 HAPTICS 0x0000000D UTF8_TEXT 0x00000017 Moonlight will send mouse relative coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned OFF. Figure 2. The full format of a MOUSE_MOVE_REL packet Delta X and Delta Y defines the relative movement that the mouse must perform. Delta X and Delta Y are encoded as big endian. Moonlight will send mouse absolute coordinates when the option \"Optimize mouse for remote desktop instead of games\" is turned ON. Figure 3. The full format of a MOUSE_MOVE_ABS packet In order to define an absolute position Moonlight will send both: width, height which represent the size of the viewport on the client side X,Y are the absolute coordinates of the mouse on the client side X, Y, width and height are encoded as big endian. Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet Action can have the following values: Action data Meaning 0x09 Button released 0x08 Button pressed Button can have the following values: Button data Meaning 1 Button left 2 Button middle 3 Button right 4 Button side 5 Button extra Figure 5. The full format of a KEY_DOWN or KEY_UP packet Action can have the following values: Action data Meaning 0x04 Button released 0x03 Button pressed What’s modifiers? Key code represent the corresponding keyboard code of the pressed input, see the following table: Moonlight code Keyboard button 0x08 BACKSPACE 0x09 TAB 0x0C CLEAR 0x0D ENTER 0x10 LEFTSHIFT 0x11 LEFTCTRL 0x12 LEFTALT 0x13 PAUSE 0x14 CAPSLOCK 0x15 KATAKANAHIRAGANA 0x16 HANGEUL 0x17 HANJA 0x19 KATAKANA 0x1B ESC 0x20 SPACE 0x21 PAGEUP 0x22 PAGEDOWN 0x23 END 0x24 HOME 0x25 LEFT 0x26 UP 0x27 RIGHT 0x28 DOWN 0x29 SELECT 0x2A PRINT 0x2C SYSRQ 0x2D INSERT 0x2E DELETE 0x2F HELP 0x30 0 0x31 1 0x32 2 0x33 3 0x34 4 0x35 5 0x36 6 0x37 7 0x38 8 0x39 9 0x41 A 0x42 B 0x43 C 0x44 D 0x45 E 0x46 F 0x47 G 0x48 H 0x49 I 0x4A J 0x4B K 0x4C L 0x4D M 0x4E N 0x4F O 0x50 P 0x51 Q 0x52 R 0x53 S 0x54 T 0x55 U 0x56 V 0x57 W 0x58 X 0x59 Y 0x5A Z 0x5B LEFTMETA 0x5C RIGHTMETA 0x5F SLEEP 0x60 NUMPAD 0 0x61 NUMPAD 1 0x62 NUMPAD 2 0x63 NUMPAD 3 0x64 NUMPAD 4 0x65 NUMPAD 5 0x66 NUMPAD 6 0x67 NUMPAD 7 0x68 NUMPAD 8 0x69 NUMPAD 9 0x6A NUMPAD ASTERISK x6B NUMPAD PLUS 0x6C NUMPAD COMMA 0x6D NUMPAD MINUS 0x6E NUMPAD DOT 0x6F NUMPAD SLASH 0x70 F1 0x71 F2 0x72 F3 0x73 F4 0x74 F5 0x75 F6 0x76 F7 0x77 F8 0x78 F9 0x79 F10 0x7A F11 0x7B F12 0x90 NUMLOCK 0x91 SCROLLLOCK 0xA0 LEFTSHIFT 0xA1 RIGHTSHIFT 0xA2 LEFTCTRL 0xA3 RIGHTCTRL 0xA4 LEFTALT 0xA5 RIGHTALT 0xBA SEMICOLON 0xBB EQUAL 0xBC COMMA 0xBD MINUS 0xBE DOT 0xBF SLASH 0xC0 GRAVE 0xDB LEFTBRACE 0xDC BACKSLASH 0xDD RIGHTBRACE 0xDE APOSTROPHE 0xE2 102ND Figure 6. The full format of a MOUSE_SCROLL packet We only use amount 1 to determine the amount of scroll to be applied. What’s amount 2? Figure 7. The full format of a MOUSE_HSCROLL packet new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0 Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated. Figure 8. The full format of a CONTROLLER_ARRIVAL packet Where controller type can be: Moonlight code Description Unknown 0x00 XBOX 0x01 PS 0x02 Nintendo 0x03 And the capabilities is a bitfield with the followings options: Moonlight code Description Analog triggers 0x01 Rumble 0x02 Trigger Rumble 0x04 Touchpad 0x08 Accelerometer 0x10 Gyro 0x20 Battery 0x40 RGB LED 0x80 Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) Figure 9. The legacy format of a CONTROLLER_MULTI packet Legacy format Figure 10. The legacy format of a CONTROLLER_MULTI packet LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks. The active mask represent a bitfield with bits set for each controller present. If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged. An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged. The buttons element encodes the currently pressed buttons in the joypad. In order to get the new added buttons you have to combine btn flags and btn flags 2 so that (button_flags | (button_flags2 << 16)) Button type Flag (HEX) DPAD_UP 0x0001 DPAD_DOWN 0x0002 DPAD_LEFT 0x0004 DPAD_RIGHT 0x0008 START 0x0010 BACK 0x0020 HOME 0x0400 LEFT_STICK 0x0040 RIGHT_STICK 0x0080 LEFT_BUTTON 0x0100 RIGHT_BUTTON 0x0200 A 0x1000 B 0x2000 X 0x4000 Y 0x8000 SPECIAL_FLAG 0x0400 PADDLE 1 0x010000 PADDLE 2 0x020000 PADDLE 3 0x040000 PADDLE 4 0x080000 Touchpad 0x100000 MISC 0x200000 If more than one button is being pressed at the same time button_flag will contain the sum of both values. Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows: Figure 12. The full format of the button_flag binary encoding new in Moonlight 5.0.0 new in Moonlight 5.0.0 new in Moonlight 5.0.0","title":"Input Data","component":"wolf","version":"stable","name":"input-data","url":"/wolf/stable/protocols/input-data.html","titles":[{"text":"Mouse: relative move","hash":"_mouse_relative_move","id":1},{"text":"Mouse: absolute move","hash":"_mouse_absolute_move","id":2},{"text":"Mouse: button","hash":"_mouse_button","id":3},{"text":"Keyboard","hash":"_keyboard","id":4},{"text":"Mouse scroll","hash":"_mouse_scroll","id":5},{"text":"Mouse horizontal scroll","hash":"_mouse_horizontal_scroll","id":6},{"text":"Touch","hash":"_touch","id":7},{"text":"Pen","hash":"_pen","id":8},{"text":"Controller","hash":"_controller","id":9},{"text":"Controller arrival","hash":"_controller_arrival","id":10},{"text":"Controller multi","hash":"_controller_multi","id":11},{"text":"Active mask","hash":"_active_mask","id":12},{"text":"Button flags","hash":"_button_flags","id":13},{"text":"Controller Touch","hash":"_controller_touch","id":14},{"text":"Controller Motion","hash":"_controller_motion","id":15},{"text":"Controller Battery","hash":"_controller_battery","id":16}]},"88":{"id":88,"text":"Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP. Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information. The port exchanged during the RTSP phase it’s not where the actual audio stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The first 12 bytes of each packet are defined as follows: Figure 1. RTP header format in bits FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information: Figure 2. FEC additional header format in bits All parameters for properly encoding using Opus are exchanged via the RTSP phase. In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs: A well-formed Opus packet MUST contain at least one byte [R1]. This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. It is composed of a configuration number, \"config\", a stereo flag, \"s\", and a frame count code, \"c\" Figure 3. The first byte of any Opus packet Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. These are the same key and IV used to also encrypt the Control stream. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets.","title":"Audio stream via RTP","component":"wolf","version":"stable","name":"rtp-opus","url":"/wolf/stable/protocols/rtp-opus.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"Opus encoder","hash":"_opus_encoder","id":4},{"text":"AES encryption","hash":"_aes_encryption","id":5},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":6}]},"89":{"id":89,"text":"Here are a few random notes about the low level details of the video streaming protocol in Moonlight. The port exchanged during the RTSP phase it’s not where the actual video stream will take place! Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to. This is necessary because usually clients will be behind NAT. The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte). The first 32 bytes of each packet are defined as follows: Figure 1. RTP header format in bits Figure 2. NV Video header format in bits The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload What does this content mean? Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373) Content value (decimal) value (binary) Contains Picture data 1 00000001 EOF (End of File) 2 00000010 SOF (Start of File) 4 00000100 They’ll be summed together, for example: 5 means Picture data AND Start of File. Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them). This operation will create extra parity blocks that will be sent in separate RTP packets. The size of this can be set by changing the fecpercentage param. With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%: 4 RTP packets will contain the video data 2 extra RTP packets will be sent with the FEC parity information The total overhead of sending 4KB of video will be: headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes This extra packets can be easily identified since the NV Video flag will always be 0. Read more at stackoverflow.com and yumichan.net. The video stream is separated in NAL (Network Abstraction Layer) units. Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001 A complete H.264 example stream composed of 3 NALU 0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00 0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00 0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05 0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A 0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9 0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91 0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87 0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1 0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62 0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06 0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B 0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85 0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5 0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B 0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9 0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C 0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6 0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC 0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98 0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43 0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2 0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2 0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18 0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B 0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23 0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9 0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76 0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB 0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A 0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83 0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB 0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8 0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA 0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67 0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C 0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8 0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6 0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D 0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3 This is a complete H.264 stream. If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image: The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information. In the example above the first header byte is 0x67, le’ts see what that means: Figure 4. 0x67 in hex is 01100111 in binary Element Size in bits Description Forbidden zero 1 Used to check whether there is any error occurred during the transmission. The H.264 specification declares a value of 1 as a syntax violation. nal_ref_idc 2 Current frame priority nal_unit_type 5 This component specifies the NAL unit payload type Just by looking at this two bits you can already understand what type of information will be encoded: Start Code Type nal_ref_idc (in binary) I-frame or header data 11 P-frame 10 B-frame 01 other data 00 Read the full table here. The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common: Unit type nal_unit_type (binary) nal_unit_type (decimal) Coded slice of a non-IDR picture 00001 1 Coded slice of an IDR picture 00101 5 Supplemental enhancement information (SEI) 00110 6 Sequence parameter set (SPS) 00111 7 Picture parameter set (PPS) 01000 8 Access unit delimiter 01001 9 Full table here. Looking back at the example above we can now identify the following 3 NALU: Figure 5. A SPS NALU Figure 6. A PPS NALU Figure 7. A IDR frame NALU During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).","title":"Video stream via RTP","component":"wolf","version":"stable","name":"rtp-video","url":"/wolf/stable/protocols/rtp-video.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"PING","hash":"_ping","id":2},{"text":"RTP packets","hash":"_rtp_packets","id":3},{"text":"NV Video flags","hash":"_nv_video_flags","id":4},{"text":"Forward Error Correction (FEC)","hash":"_forward_error_correction_fec","id":5},{"text":"H.264 binary format","hash":"_h_264_binary_format","id":6},{"text":"NAL Unit Header","hash":"_nal_unit_header","id":7},{"text":"nal_ref_idc","hash":"_nal_ref_idc","id":8},{"text":"nal_unit_type","hash":"_nal_unit_type","id":9},{"text":"Examples","hash":"_examples","id":10},{"text":"IDR Requests","hash":"_idr_requests","id":11}]},"90":{"id":90,"text":"The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control). RTSP messages are plaintext packets of variable size over TCP. Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp. There are two types of message: request and response All messages have the following structure: message: required options: optional, zero or more key value options separated by newline payload: optional, extra unstructured data that needs to be passed. An example request message OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1) CSeq: 1 (2) X-GS-ClientVersion: 14 (3) (4) a=fmtp:97 surround-params=21101 (5) 1 message: 2 option 1 3 option 2 4 empty new line (end of options) 5 payload The message part is the first line, it’s delimited by the newline character (\\r\\n) , and it’s composed by: command: the first string, delimited by , the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY] target: the second string, delimited by , specifies the ip address and port that is the target of the session. protocol: last string, delimited by , the RTSP protocol in use. Optional additional key values to be passed, delimited by the newline character (\\r\\n). The end of the options section is marked by an extra newline character (\\r\\n). Honorable mention goes to CSeq which is always present and represent the sequence number. Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload. Like requests, responses have a message, zero or more options and an optional payload. The main difference is in the format of the message. You can easily identify a response package by looking at the command part which is always RTSP. An example response message RTSP/1.0 200 OK (1) CSeq: 1 (2) a=fmtp:97 surround-params=21101 (3) 1 message 2 option 3 payload Unlike requests a message in a response is composed by different parts: protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages. status code: follows the HTTP status codes specification status string: follows the HTTP status codes specification","title":"RTSP","component":"wolf","version":"stable","name":"rtsp","url":"/wolf/stable/protocols/rtsp.html","titles":[{"text":"Overview","hash":"_overview","id":1},{"text":"RTSP specifications","hash":"_rtsp_specifications","id":2},{"text":"Request message","hash":"_request_message","id":3},{"text":"Message","hash":"_message","id":4},{"text":"Options","hash":"_options","id":5},{"text":"Payload","hash":"_payload","id":6},{"text":"Response message","hash":"_response_message","id":7},{"text":"Message","hash":"_message_2","id":8}]},"91":{"id":91,"text":"Wolf is configured via a TOML config file and some additional optional ENV variables Variable Default Description WOLF_LOG_LEVEL INFO The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE WOLF_CFG_FILE /etc/wolf/cfg/config.toml Full path to the config file WOLF_PRIVATE_KEY_FILE /etc/wolf/cfg/key.pem Full path to the key.pem file WOLF_PRIVATE_CERT_FILE /etc/wolf/cfg/cert.pem Full path to the cert.pem file XDG_RUNTIME_DIR /tmp/sockets The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container WOLF_PULSE_IMAGE ghcr.io/games-on-whales/pulseaudio:master The name of the PulseAudio image to be started (when no connection is available) WOLF_STOP_CONTAINER_ON_EXIT TRUE Set to False in order to avoid force stop and removal of containers when the connection is closed WOLF_DOCKER_SOCKET /var/run/docker.sock The full path to the docker socket, doesn’t support tcp (yet) NVIDIA_DRIVER_VOLUME_NAME nvidia-driver-vol The name of the externally created Docker Volume that holds the Nvidia drivers HOST_APPS_STATE_FOLDER /etc/wolf The base folder in the host where the running apps will store permanent state WOLF_RENDER_NODE /dev/dri/renderD128 The default render node used for virtual desktops; see: Multiple GPUs WOLF_ENCODER_NODE $WOLF_RENDER_NODE The default render node used for the Gstreamer pipelines; see: Multiple GPUs WOLF_DOCKER_FAKE_UDEV_PATH $HOST_APPS_STATE_FOLDER/fake-udev The path on the host for the fake-udev CLI tool Additional env variables useful when debugging: Variable Default Description RUST_BACKTRACE full In case an exception is thrown in the Rust code, this sets the backtrace level GST_DEBUG 2 Gstreamer debug print, see debugging-tools Since Wolf supports multiple streaming sessions at the same time and each session can run a different app, we need to make sure that each app has its own folder where it can store permanent data. To achieve this, for each running app, Wolf will create a folder structure like this: ${HOST_APPS_STATE_FOLDER}/${app_state_folder}/${app_title} and then mount that as the home (/home/retro) for the docker container that will run the selected app. These 3 variables are defined as follows: HOST_APPS_STATE_FOLDER: defaults to /etc/wolf, can be changed via ENV app_state_folder: defaults to a unique identifier for each client so that every Moonlight session will have its own folder. Can be changed in the config.toml file app_title: the title of the app as defined in the config.toml file This will break isolation, if you want to connect with multiple clients at the same time you should not share the home folder. You can follow development of that feature here By default, Wolf will create a new home folder for each client, but if you want to share the same home folder with multiple clients, you can set the app_state_folder to the same value for each paired client; example: [[paired_clients]] app_state_folder = \"common\" # ../../../../bus/virtio/drivers/virtio_gpu (1) /sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2) 1 This line will tell you that renderD128 is a virtual GPU 2 This line will tell you that renderD129 is a Nvidia GPU Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example: [apps.runner] type = \"docker\" name = \"WolfSteam\" image = \"ghcr.io/games-on-whales/steam:edge\" # More options here, removed for brevity... render_node = \"/dev/dri/renderD129\" The easy way to control this is to just edit the env variable WOLF_ENCODER_NODE (defaults to match WOLF_RENDER_NODE in order to use the same GPU for both), this will set the default render node used for the Gstreamer pipelines. The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used. If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either: Delete the nvcodec entries under gstreamer.video.hevc_encoders Cut the qsv entry and paste it above the nvcodec entry On top of that, each single apps entry support overriding the default streaming pipeline; for example: [[apps]] title = \"Test ball\" # More options here, removed for brevity... [apps.video] source = \"\"\" videotestsrc pattern=ball flip=true is-live=true ! video/x-raw, framerate={fps}/1 \\ \"\"\" In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the video_params with the corresponding encoder plugin; see: gstreamer/issues/1167. This has been moved to the steam.adoc page.","title":"Configuration","component":"wolf","version":"stable","name":"configuration","url":"/wolf/stable/user/configuration.html","titles":[{"text":"ENV variables","hash":"_env_variables","id":1},{"text":"Where apps will store permanent data?","hash":"data_setup","id":2},{"text":"Share home folder with multiple clients","hash":"_share_home_folder_with_multiple_clients","id":3},{"text":"Change the HOST_APPS_STATE_FOLDER","hash":"_change_the_host_apps_state_folder","id":4},{"text":"TOML file","hash":"_toml_file","id":5},{"text":"Defining apps","hash":"_defining_apps","id":6},{"text":"Override the default joypad mapping","hash":"_override_the_default_joypad_mapping","id":7},{"text":"App Runner","hash":"_app_runner","id":8},{"text":"Process","hash":"_process","id":9},{"text":"Docker","hash":"_docker","id":10},{"text":"Gstreamer","hash":"_gstreamer","id":11},{"text":"Multiple GPUs","hash":"_multiple_gpu","id":12},{"text":"App render node","hash":"_app_render_node","id":13},{"text":"Gstreamer video encoding","hash":"_gstreamer_video_encoding","id":14},{"text":"Directly launch a Steam game","hash":"_directly_launch_a_steam_game","id":15}]},"92":{"id":92,"text":"To list the installed plugins use: gst-inspect-1.0 To analyse some media use: gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 To test out pipelines in your system use: gst-launch-1.0 videotestsrc ! autovideosink See more examples at: matthew1000/gstreamer-cheat-sheet [[apps]] title = \"Desktop\" [apps.video] source = \"avfvideosrc capture-screen-cursor=true capture-screen=true\" This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Music\" # Audio sample downloaded from https://www.bensound.com/free-music-for-videos # try also: spacescope style=color-lines [apps.video] source = \"\"\" filesrc location=/Users/ale/Downloads/elevate.mp3 ! tee name=t ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 t. ! decodebin ! audioconvert ! wavescope style=color-lines \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v elevate.mp3 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"BigBuckBunny (MP4 - remote)\" [apps.video] # taken from https://gist.github.com/jsturgis/3b19447b304616f18657 source = \"\"\" curlhttpsrc location=\"https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4\" ! qtdemux name=demux demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0 ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 ! decodebin \"\"\" Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline: [[apps]] title = \"Twitch.tv\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin \\ \"\"\" # Get the audio info using: # gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8 [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\" The element compositor allows video to be mixed (overlayed, put side-by-side, etc). [[apps]] title = \"PIP: Desktop + Twitch\" [apps.video] # location is the result of # youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950 source = \"\"\" curlhttpsrc location=\"https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8\" ! hlsdemux ! tsdemux name=demux demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000 demux.video_0_0101 ! queue ! decodebin ! videoscale ! videorate ! video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 ! compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 ! avfvideosrc capture-screen-cursor=true capture-screen=true \\ \"\"\" video_params = \"\"\" videoscale ! videoconvert ! videorate ! video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} ! comp. comp. \\ \"\"\" [apps.audio] source = \"\"\" shmsrc socket-path=/tmp/pipe.sock do-timestamp=true ! audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts ! decodebin \"\"\"","title":"Gstreamer","component":"wolf","version":"stable","name":"gstreamer","url":"/wolf/stable/user/gstreamer.html","titles":[{"text":"CLI interface","hash":"_cli_interface","id":1},{"text":"Example pipelines","hash":"_example_pipelines","id":2},{"text":"Stream your desktop","hash":"_stream_your_desktop","id":3},{"text":"Play some audio","hash":"_play_some_audio","id":4},{"text":"Stream a remote video","hash":"_stream_a_remote_video","id":5},{"text":"Stream from Twitch","hash":"_stream_from_twitch","id":6},{"text":"Picture in picture","hash":"_picture_in_picture","id":7}]},"93":{"id":93,"text":"Wolf runs as a single container, it’ll spin up and down additional containers on-demand. Intel/AMD Nvidia (Container Toolkit) Nvidia (Manual) WSL2 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid network_mode: host restart: unless-stopped Make sure that the version of the Nvidia container toolkit is >= 1.16.0 and that your driver version is >= 530.30.02 (you can check the driver version with nvidia-smi). sudo nvidia-container-cli -V cli-version: 1.16.0 lib-version: 1.16.0 build date: 2024-07-15T13:41+00:00 Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ -e NVIDIA_DRIVER_CAPABILITIES=all \\ -e NVIDIA_VISIBLE_DEVICES=all \\ --gpus=all \\ --device /dev/dri/ \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - HOST_APPS_STATE_FOLDER=/etc/wolf - NVIDIA_DRIVER_CAPABILITIES=all - NVIDIA_VISIBLE_DEVICES=all volumes: - /etc/wolf/:/etc/wolf - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw device_cgroup_rules: - 'c 13:* rmw' devices: - /dev/dri - /dev/uinput - /dev/uhid runtime: nvidia deploy: resources: reservations: devices: - capabilities: [gpu] network_mode: host restart: unless-stopped One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. Unfortunately, on Nvidia, things are a little bit more complex.. Make sure that your driver version is >= 530.30.02 First, let’s build an additional docker image that will contain the Nvidia driver files: curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) . This will create gow/nvidia-driver:latest locally. Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running: docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container. Check volume exists with: docker volume ls | grep nvidia-driver local nvidia-driver-vol One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y I get N or the file is not present, how do I set the flag? If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet nvidia-drm.modeset=1\" Then sudo update-grub and reboot. For more options or details, you can see ArchWiki: Kernel parameters You can now finally start the container; Docker CLI: docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \\ -v nvidia-driver-vol:/usr/nvidia:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/nvidia-uvm \\ --device /dev/nvidia-uvm-tools \\ --device /dev/dri/ \\ --device /dev/nvidia-caps/nvidia-cap1 \\ --device /dev/nvidia-caps/nvidia-cap2 \\ --device /dev/nvidiactl \\ --device /dev/nvidia0 \\ --device /dev/nvidia-modeset \\ --device /dev/uinput \\ --device /dev/uhid \\ -v /dev/:/dev/:rw \\ -v /run/udev:/run/udev:rw \\ --device-cgroup-rule \"c 13:* rmw\" \\ ghcr.io/games-on-whales/wolf:stable Docker compose: version: \"3\" services: wolf: image: ghcr.io/games-on-whales/wolf:stable environment: - XDG_RUNTIME_DIR=/tmp/sockets - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol - HOST_APPS_STATE_FOLDER=/etc/wolf volumes: - /etc/wolf/:/etc/wolf:rw - /tmp/sockets:/tmp/sockets:rw - /var/run/docker.sock:/var/run/docker.sock:rw - /dev/:/dev/:rw - /run/udev:/run/udev:rw - nvidia-driver-vol:/usr/nvidia:rw devices: - /dev/dri - /dev/uinput - /dev/uhid - /dev/nvidia-uvm - /dev/nvidia-uvm-tools - /dev/nvidia-caps/nvidia-cap1 - /dev/nvidia-caps/nvidia-cap2 - /dev/nvidiactl - /dev/nvidia0 - /dev/nvidia-modeset device_cgroup_rules: - 'c 13:* rmw' network_mode: host restart: unless-stopped volumes: nvidia-driver-vol: external: true If you are missing any of the /dev/nvidia* devices you might also need to initialise them using: sudo nvidia-container-cli --load-kmods info Or if that fails: #!/bin/bash ## Script to initialize nvidia device nodes. ## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications /sbin/modprobe nvidia if [ \"$?\" -eq 0 ]; then # Count the number of NVIDIA controllers found. NVDEVS=`lspci | grep -i NVIDIA` N3D=`echo \"$NVDEVS\" | grep \"3D controller\" | wc -l` NVGA=`echo \"$NVDEVS\" | grep \"VGA compatible controller\" | wc -l` N=`expr $N3D + $NVGA - 1` for i in `seq 0 $N`; do mknod -m 666 /dev/nvidia$i c 195 $i done mknod -m 666 /dev/nvidiactl c 195 255 else exit 1 fi /sbin/modprobe nvidia-uvm if [ \"$?\" -eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm /proc/devices | awk '{print $1}'` mknod -m 666 /dev/nvidia-uvm c $D 0 mknod -m 666 /dev/nvidia-uvm-tools c $D 0 else exit 1 fi Running Wolf in WSL2 hasn’t been properly tested. You can run Wolf in a very unprivileged setting without uinput/uhid, unfortunately this means that you’ll be restricted to only using mouse and keyboard. For Nvidia users, follow the Nvidia instructions above. This should work for AMD/Intel users. docker run \\ --name wolf \\ --network=host \\ -e XDG_RUNTIME_DIR=/tmp/sockets \\ -v /tmp/sockets:/tmp/sockets:rw \\ -e HOST_APPS_STATE_FOLDER=/etc/wolf \\ -v /etc/wolf:/etc/wolf:rw \\ -v /var/run/docker.sock:/var/run/docker.sock:rw \\ --device /dev/dri/ \\ ghcr.io/games-on-whales/wolf:stable Which ports are used by Wolf? To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are: # HTTPS EXPOSE 47984/tcp # HTTP EXPOSE 47989/tcp # Control EXPOSE 47999/udp # RTSP EXPOSE 48010/tcp # Video (up to 10 users, you can open more ports if needed) EXPOSE 48100-48110/udp # Audio (up to 10 users, you can open more ports if needed) EXPOSE 48200-48210/udp You should now be able to point Moonlight to the IP address of the server and start the pairing process: In Moonlight, you’ll get a prompt for a PIN Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) In Moonlight, you should now be able to see a list of the applications that are supported by Wolf If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates. Keep an eye on the logs from Wolf to get more details. We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput Add your user to group input sudo usermod -a -G input $USER Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules # Allows Wolf to acces /dev/uinput KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" # Allows Wolf to access /dev/uhid KERNEL==\"uhid\", TAG+=\"uaccess\" # Move virtual keyboard and mouse into a different seat SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" # Joypads SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" What does that mean? KERNEL==\"uinput\", SUBSYSTEM==\"misc\", MODE=\"0660\", GROUP=\"input\", OPTIONS+=\"static_node=uinput\" Allows Wolf to access /dev/uinput on your system. It needs that node to create the virtual devices. This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line. SUBSYSTEMS==\"input\", ATTRS{id/vendor}==\"ab00\", MODE=\"0660\", GROUP=\"input\", ENV{ID_SEAT}=\"seat9\" This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices. SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf X-Box One (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf PS5 (virtual) pad\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf gamepad (virtual) motion sensors\", MODE=\"0660\", GROUP=\"input\" SUBSYSTEMS==\"input\", ATTRS{name}==\"Wolf Nintendo (virtual) pad\", MODE=\"0660\", GROUP=\"input\" Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. The assigned name instead is specific to Wolf. You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up. Reload the udev rules either by rebooting or run: udevadm control --reload-rules && udevadm trigger","title":"Quickstart","component":"wolf","version":"stable","name":"quickstart","url":"/wolf/stable/user/quickstart.html","titles":[{"text":"Docker","hash":"_docker","id":1},{"text":"Moonlight pairing","hash":"_moonlight_pairing","id":2},{"text":"Virtual devices support","hash":"_virtual_devices_support","id":3}]},"94":{"id":94,"text":"When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue. If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary). If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations. Example log line: vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0 vulkan: physical device supports DRM format modifiers vulkan: vkCreateDevice failed (VkResult: -7) Failed to initialize Vulkan Vulkan errors are generally related to the video drivers. Nvidia GPU checklist Make sure to follow all the instructions on the Quickstart page. Here’s a brief summary of things to check: Check that the nvidia volume driver has been created…​ docker volume ls | grep nvidia-driver local nvidia-driver-vol …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME Make sure that the nvidia-drm module has been loaded…​ sudo dmesg | grep nvidia-drm # Should print something like the following: [ 12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver [ 14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0 …​and check that the module is loaded with the flag modeset=1. sudo cat /sys/module/nvidia_drm/parameters/modeset Y You’ll see something like the following log lines: terminate called after throwing an instance of 'boost::wrapexcept' what(): bind: Address already in use INFO | Received interrupt signal 6, clean exit This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight. Have you left Sunshine running in the background? The following ports need to be available in order for Wolf to work: 47984/tcp - HTTPS 47989/tcp - HTTP 47999/udp - Control 48100/udp - Video 48200/udp - Audio 48010/tcp - RTSP Example log line: WARN | Unable to recognise GPU vendor: red hat, inc. Do you have multiple GPUs installed (or even just a virtual display in a VM)? Checkout the Multiple GPU configuration page Example log line: 0:01:31.983118812 1 0x7f1d50000b70 ERROR qsvencoder gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_session: MFXVideoENCODE::Query failed -3 (MFX_ERR_UNSUPPORTED) 0:01:31.983243805 1 0x7f1d50000b70 WARN videoencoder gstvideoencoder.c:771:gst_video_encoder_setcaps: rejected caps video/x-raw(memory:VAMemory), width=(int)1280, height=(int)720, framerate=(fraction)60/1, format=(string)NV12, chroma-site=(string)mpeg2, colorimetry=(string)bt601 Follow the steps outlined in here: sudo apt install --reinstall linux-firmware Add i915.enable_guc=2 in /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash i915.force_probe=* i915.enable_guc=2\" sudo update-initramfs –u sudo update-grub Reboot the system. After reboot, execute the command: dmesg | grep guc Verify the logs for guc information. Note: If output doesn’t contain guc details, then install the latest guc/huc firmware. Copy the firmware to /lib/firmware/i915/, and reboot the system.","title":"Troubleshooting","component":"wolf","version":"stable","name":"troubleshooting","url":"/wolf/stable/user/troubleshooting.html","titles":[{"text":"Black screen in Moonlight","hash":"_black_screen_in_moonlight","id":1},{"text":"Vulkan errors in App","hash":"_vulkan_errors_in_app","id":2},{"text":"Address already in use","hash":"_address_already_in_use","id":3},{"text":"Unable to recognise GPU vendor","hash":"_unable_to_recognise_gpu_vendor","id":4},{"text":"Intel: MFX_ERR_UNSUPPORTED","hash":"_intel_mfx_err_unsupported","id":5}]},"95":{"id":95,"text":"Adding a new app to the GoW system is a very straightforward process. The easiest way is to follow the examples that already exist; one particularly good option is the RetroArch app that is bundled with GoW. Once you have your app working as you like it, consider submitting a pull request to add it to the official repo! First you’ll need a Docker container for your app. It’s possible that one may already exist, but if not, creating one is pretty easy. Copy the images/retroarch directory and all of its contents to a new directory for your app; let’s call it images/myapp. Inside the configs directory, you can put default versions of any configuration files that may be needed by your app. If there aren’t any, you can simply delete the configs directory. In the scripts directory, edit the startup.sh script. Here’s an example of a minimal startup.sh script; you can modify it for your app as much as necessary. #!/bin/bash set -e source /opt/gow/bash-lib/utils.sh gow_log \"Starting myapp\" exec /usr/bin/myapp Our Docker images are based on the latest Ubuntu LTS release, and you should be able to easily repurpose the RetroArch Dockerfile for your application as long as it can be installed on Ubuntu. Here are a few specifics that you’ll definitely want to update: Be sure to update the REQUIRED_PACKAGES variable to include all of the packages your app will need to have installed when it’s running. You can use the add-apt-repository tool in your RUN command to add any extra package repositories you might need to install from. Be sure to change the line that installs the configuration file to install the files required by your app. In the compose/apps directory, copy retroarch.yml to myapp.yml. Make sure the build context is pointing to images/myapp, and also be sure to set the image: appropriately.","title":"Adding an App","component":"gow","version":"","name":"adding-an-app","url":"/gow/adding-an-app.html","titles":[{"text":"The Container","hash":"_the_container","id":1},{"text":"Configuration","hash":"_configuration","id":2},{"text":"Scripts","hash":"_scripts","id":3},{"text":"Dockerfile","hash":"_dockerfile","id":4},{"text":"REQUIRED_PACKAGES","hash":"_required_packages","id":5},{"text":"add-apt-repository","hash":"_add_apt_repository","id":6},{"text":"COPY","hash":"_copy","id":7},{"text":"The Compose file","hash":"_the_compose_file","id":8}]},"96":{"id":96,"text":"Make sure to read the overview section before continuing, to get a grasp on core concept behind GOW. GOW is a composition of Docker containers that enable users to stream graphical applications to Moonlight clients. We wrapped each individual piece of software with the necessary dependencies into its own Docker image and use docker-compose in order to manage the composition of all the necessary pieces. The streaming host is the heart of this system; it’s in charge of: Encoding the graphical environment (Xorg) and audio (PulseAudio) into a video that will be streamed to Moonlight clients This process can be hardware accelerated using VAAPI or CUDA depending on your GPU hardware Translating remote input devices into local input devices (eg: keyboards, mice, gamepads) This is achieved by using the uinput kernel module. Games on Whales currently has support for two streaming hosts: Sunshine (more mature, and the default), and Wolf (still in alpha, but very usable). These two components are in charge of Display and Audio, respectively. If your OS comes with a desktop environment already, you will most likely want to use that instead of trying to run it in a container. If you’re running a headless system you’ll need to run them in order to run graphical applications. You can use our Docker images for that. While PulseAudio runs just fine without a real sound device, for best results Xorg should be hardware accelerated using a GPU. That’s the main reason why we choose the full Xorg server over Xvfb. While it’s more complicated to run the full Xorg server, the benefits of having hardware acceleration are too great to be dismissed. Graphical applications can run easily on top of Xorg and PulseAudio — that’s how most desktop environments work! Sharing sockets between containers is the mechanism that enables us to have proper isolation. Instead of having a big single Docker image which installs and runs all the individual pieces of software together, we can decouple them and share only a communication channel. This means that it’s very simple to make a Docker container of any given GUI application and that same container will work both on GOW or on a normal Desktop Environment, enabling users to have a high degree of freedom on how to use them. A GPU is not required to run any of this, but it’s highly recommended for best results. Sharing a GPU across Docker containers is generally done by sharing the DRM devices (/dev/dri/cardX). This should work as long as your GPU supports VA-API. Notably, NVIDIA cards don’t; instead we provide specific instructions for them.","title":"Components Overview","component":"gow","version":"","name":"components-overview","url":"/gow/components-overview.html","titles":[{"text":"Streaming host","hash":"_streaming_host","id":1},{"text":"Xorg & PulseAudio","hash":"_xorg_pulseaudio","id":2},{"text":"GUIs","hash":"_guis","id":3},{"text":"GPU","hash":"_gpu","id":4}]},"97":{"id":97,"text":"Before launching GoW for the first time, you’ll want to set up your environment to your tastes. GoW is set up to use a directory of your choice from your host system as a place to store anything that needs to persist when you stop and restart containers. Because this same directory is (typically) mapped into each container, it can also be a way to share data between multiple containers. Before you launch GoW for the first time, create a new directory and update the LOCAL_STATE variable in your User environment to match. On unRAID, the local_state folder you just created will likely be owned by root, and it may not be writable from the containers launched by GoW, which mostly do not run as root. Until GoW has support for changing the UID inside the containers, you may need to chmod 777 local_state to make sure anyone can write to it. In order to make the time zone inside your container match your actual local time zone, you’ll need to update the TIME_ZONE variable in your User environment. If you’re not sure what to set it to, check out this list of tz database time zones. Your user environment is typically stored in the user.env file in the directory you cloned GoW into. It contains a simple list of environment variables, one per line. Comments and blank lines are allowed, but variable substitutions are not. If it’s more convenient to store your user environment outside the git directory, you can also put it in $HOME/.config/gow/user.env instead. If both files exist, the one in $HOME/.config will be preferred. Host Desktop Headless Configuration values that are specific to running with the host desktop can be found in the env/host-desktop.env file. You might need to tweak the socket locations or XORG_DISPLAY based on your system. Configuration values that are specific to running in headless mode can be found in the env/headless.env file. Most of those values will already be set correctly, but you may want to tweak the resolution, frame rate, and display port to suit your preferences. Now it’s time to launch GoW!","title":"Configuration","component":"gow","version":"","name":"configuration","url":"/gow/configuration.html","titles":[{"text":"Local state","hash":"_local_state","id":1},{"text":"Time zone","hash":"_time_zone","id":2},{"text":"User environment","hash":"_user_environment","id":3},{"text":"Platform environment","hash":"_platform_environment","id":4}]},"98":{"id":98,"text":"Once the containers are up and running, connect to your server using Moonlight. You may need to manually specify the IP address of your host system if it isn’t automatically discovered. If this is your first time connecting, you’ll need to pair your client and server. Moonlight will prompt you with a PIN to enter on the server side. To validate the PIN you can use the Sunshine web interface (at https://:47990/ default username: admin, password: admin) or you can directly call: curl :47989/pin/. After you’ve completed the pairing step, you can click your host in Moonlight, then open the Desktop app. At this point you should be able to see your X11 apps running! Check out the troubleshooting guide if anything isn’t working quite right Play some games!","title":"Connecting","component":"gow","version":"","name":"connecting","url":"/gow/connecting.html","titles":[{"text":"Next steps","hash":"_next_steps","id":1}]},"99":{"id":99,"text":"🎉 First off, thanks for taking the time to contribute! 🎉 There are many ways to contribute to this project! Just by running it and reporting issues (or even letting us know that everything works out of the box) you are helping us! You don’t have to code or understand all the little details of how everything work. Helping us maintain and expand the documentation is another great way to help. Asking questions in the public discussion board is another great way to share knowledge with others. Feel free to join our discord server if you have any question, if you need any help, or you would like to join us on our journey!","title":"How can I help?","component":"gow","version":"","name":"contributing","url":"/gow/contributing.html","titles":[]},"100":{"id":100,"text":"So you don’t trust downloading Docker images from the web, eh? You are right! No one should trust the internet! Our images are built and pushed using Github Actions. You can manually check if the images are being tampered with by doing the following: Head over to the Actions section on Github and open up the build that you want to check For each generated Docker image there’s a step called Image digest – this is the sha256 checksum of the image generated on Github Head over to the Docker hub and check that the sha256 checksum for the image and the sha256 checksum for the commit are the same as it’s displayed in Github Here’s an example from the commit 98e5080 The associated Github Action for the xorg image reports: xorg > sha256:6b8555260ed07c7ed466e0b821922a3cedf4ee27b9d6b8fea9d6aa2995b75f61 The image layer details on the Docker Hub reports: gameonwhales/xorg:sha-98e5080 Digest:sha256:6b8555260ed07c7ed466e0b821922a3cedf4ee27b9d6b8fea9d6aa2995b75f61 You sure can! Here’s what you’ll need to know. We have two images that are only used as the base for our other images; they aren’t ever launched by themselves and therefore they don’t appear in the compose files. Since they don’t appear in the compose files, docker compose can’t automatically build them. Instead, you must specify which images to use as environment variables, found in env/build.env. If you want to build the base images yourself too, that’s no problem. First build the base image: sudo DOCKER_BUILDKIT=1 docker build -t my-gow-base images/base Then the base-app image, passing the base image you just built as a build arg: sudo DOCKER_BUILDKIT=1 docker build --build-arg BASE_IMAGE=my-gow-base -t my-gow-base-app images/base-app Lastly, edit env/build.env to specify your newly built images to be used for future compose builds: BUILD_BASE_IMAGE=my-gow-base BUILD_BASE_APP_IMAGE=my-gow-base-app You can, of course, choose any tags you like instead of my-gow-base and my-gow-base-app. Any of the app or system images described in the compose files can be easily built using the run-gow script. First, edit the appropriate compose YAML files and uncomment the build: section, to let docker compose know you want to build those images rather than pulling it from a registry. You may also want to comment out the image: lines to make sure there’s no confusion. Then, build the images you’ve chosen by running run-gow: sudo run-gow [options] build You should call run-gow with the same options you plan to run apps with; specifically, be sure to use the right combination of --gpu, --platform, --streamer, and --app.","title":"Docker builds","component":"gow","version":"","name":"docker-build","url":"/gow/docker-build.html","titles":[{"text":"Example","hash":"_example","id":1},{"text":"I don’t trust you, can’t I just build the images myself?","hash":"_i_dont_trust_you_cant_i_just_build_the_images_myself","id":2},{"text":"Base Images","hash":"_base_images","id":3},{"text":"App and System Images","hash":"_app_and_system_images","id":4}]},"101":{"id":101,"text":"One of the earliest use cases for Games on Whales was to be able to host retro video games on a central server running RetroArch and stream them to clients wherever they happened to be. Absolutely! Streaming games works very well, but GoW can do so much more! Out of the box, GoW provides a platform for running just about any graphical applications you like. In fact, despite the name, you can think of GoW as a low-latency remote desktop solution. Often the focus is on a single full-screen application, but this does not necessarily have to be the case. You should be able to run any Graphical Application on top of the basic combination of Xorg + PulseAudio + Sunshine. We supply the necessary configuration files for steam, retroarch, and firefox by default, but you can use them as templates to create your own. See Adding an App for more details. GoW is even often capable of running containers provided by third parties; as long as the container can accept a DISPLAY environment variable to specify the Xorg display, it can be made to work. For example, this Firefox container (andrewmackrodt/firefox-x11) is an open-source Dockerfile and image. It’s a great example of running a container which wasn’t built with GOW in mind. This container doesn’t need to be run any special privileges or network mode , because mouse and keyboard events are handled by Xorg and passing the X11 socket is enough to have display and inputs. This increases security for non trusted containers by restricting what’s accessible inside the container. Unfortunately, the same cannot be said for gamepads; if your container requires gamepad support you’ll need to use privileged: true and network_mode: ${UDEVD_NETWORK} just like in the RetroArch example. This is required because the device files for the gamepad do not exist at the time the container is launched (they’re only created once a client connects) and so far the only way we’ve found for a running container to see a newly created device file is using the privileged setting. Heres a blog post with a few GUI docker containers like: Chrome Spotify Gparted Skype 🚀 The sky is the limit! 🚀","title":"How can I use GOW?","component":"gow","version":"","name":"how-to-use","url":"/gow/how-to-use.html","titles":[{"text":"Can I use it for something else?","hash":"_can_i_use_it_for_something_else","id":1}]},"102":{"id":102,"text":"A collection of Docker images ready to be used by Wolf in order to run games and apps on a remote host! Historically, this was the first attempt that we’ve made at running games in Docker. Wolf has now completely replaced the simple bash script present in this repo.","title":"GOW - Games on Whales","component":"gow","version":"","name":"index","url":"/gow/index.html","titles":[]},"103":{"id":103,"text":"Make sure to check out the Overview and Requirements first. You can easily run Steam and many other apps in Docker without having to install a single package on your computer! We all know how catastrophic that can be. Installing Games on Whales is as simple as git clone: git clone https://github.com/games-on-whales/gow.git cd gow Next, read about configuring GoW.","title":"Installation","component":"gow","version":"","name":"installation","url":"/gow/installation.html","titles":[]},"104":{"id":104,"text":"Make sure to checkout the Overview first. At least version 1.18 is required. If you are considering a cluster for multiple home applications then this template might be a good start. This is a required kernel module in order for Sunshine to manage and create virtual devices (mouse, joypad, etc.). Make sure that /dev/uinput is present in the Kubernetes nodes where you intend to run. ls -la /dev/uinput crw------- 1 root root 10, 223 Jul 15 11:46 /dev/uinput You need to have a graphic card supporting HW acceleration in Xorg. If you run your Kubernetes workers into a Virtual Machine ensure you pass it a graphic card. You can use PCI passthrough for this. helm repo add angelnu https://angelnu.github.io/helm-charts helm repo update helm install games-on-whales angelnu/games-on-whales Connect over Moonlight by manually adding the IP address of the worker node running the Helm chart pod. To validate the PIN you can use the Sunshine web interface (at https://:47990/ username: admin, password is admin (at least you changed them in your Helm instance values) or directly calling: curl :47989/pin/. From Moonlight open the Desktop app, from there you should be able to see your X11 apps running! Adjust your Helm chart settings - see the instructions Checkout the troubleshooting page if anything is not working on your side Check out how to configure and use your GPU in order to get HW acceleration (if you have one)","title":"","component":"gow","version":"","name":"kubernetes","url":"/gow/kubernetes.html","titles":[{"text":"Kubernetes instructions","hash":"_kubernetes_instructions","id":1},{"text":"Requirement","hash":"_requirement","id":2},{"text":"Kubernetes","hash":"_kubernetes","id":3},{"text":"uinput","hash":"_uinput","id":4},{"text":"Graphic card","hash":"_graphic_card","id":5},{"text":"Quickstart","hash":"_quickstart","id":6},{"text":"Next steps","hash":"_next_steps","id":7}]},"105":{"id":105,"text":"The gameonwhales/lutris (or ghcr.io/games-on-whales/lutris) image can be used to run a variety of applications. Lutris refers to its self as a \"preservation platform\", and provides scripts for installing many pieces of software on Linux, from games to productivity software. The software you want to run may already have an entry on the Lutris website, in which case, you can either install the software from the Lutris UI directly or extend the image to create a bespoke image. On first run, the startup scripts for this image will configure Lutris to store game installation files and installation meta-data in the /var/lutris directory. By mounting a volume at this directory, multiple instances of the image will share videogame installations. Most applications will save user-specific data in the home directory, which remains exclusively visible to the individual user. Lutris is a desktop application that launches other windows, and as such, it requires a window manager to run; we recommend enabling Sway (set the env variable USE_SWAY=1). The following documents the file-format for images in GOW in general, as well as a couple of peculiar specific to the Lutris Image. The Lutris image consists of the following files; images +- lutris +- Dockerfile +- scripts | +- startup.sh | +- startup-10-create-dirs.sh +- configs +- lutris-system.yml +- lutris-lutris.yml At a basic level, all images based on the base image will feature a Dockerfile and startup.sh script. The Dockerfile will stage the startup.sh script at /opt/gow/startup.sh, overwriting the version provided by the base-app script. The Dockerfile will also copy all the assets for the container (usually to /opt/gow/), and install any additional dependencies. The startup.sh script will launch at the start of every container. It must first prepare the home directory, which will be empty on first-run, and then launch the application. The Lutris image also features a /opt/gow/startup.d directory. Scripts placed in this directory will be sourced by the startup.sh script prior to launching Lutris. startup-10-create-dirs.sh is copied by the Dockerfile to /opt/gow/startup.d. It configures Lutris to install games in /var/lutris/Games by default, and allow multiple instances of the Lutris container to share installation files. These instructions are applicable to any image based on the GoW base image, and are useful if you want to make changes to the image. When making changes to images upon which other images are based, it is naturally required to build all dependent images to propergate the changes. docker build -t gow/base images/base docker build -t gow/base-app --build-arg BASE_IMAGE=gow/base images/base-app docker build -t gow/lutris --build-arg BASE_APP_IMAGE=gow/base-app images/lutris Place the following in /etc/wolf/cfg/config.toml [[apps]] title = \"Lutris\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfLutris\" image = \"gow/lutris\" mounts = [\"lutris-games:/var/lutris/:rw\"] env = [\"RUN_SWAY=1\",\"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\"] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\", \"c 244:* rmw\"] } } \\ \"\"\" This configuration creates a docker named-volume called lutris-games and mounts it at /var/lutris. Since this is where the games will be installed, this may need a lot of storage space. By default, docker will store volumes in /var/lib/docker/volumes. In the above example, you can change lutris-games to any arbitrary path on the host you like, and the game data will be saved there instead. Lutris supports launching games directly, skipping its UI, by passing the correct command line arguments to the lutris binary. Lutris uses this feature to add launchers to menus and desktop shortcuts. We can use it to create a custom container image which uses Lutris' installation scripts, but features a single program. Consider the following structure: images +- lutris-app +- Dockerfile +- scripts +- startup-20-configure-lutris.sh The Dockerfile would copy startup-20-configure-lutris.sh to /opt/gow/startup.d/20-configure-lutris.sh, which in turn would be picked up by the Lutris image’s startup.sh script, and would adjust Lutris commandline args to run the application. Super Tux is a Linux native game which is distributed via AppImage. It also happens to have a Lutris install script. To create a Super Tux image based on the Lutris image, replicate the above structure with the following file contents; ARG BASE_APP_IMAGE FROM ${BASE_APP_IMAGE} COPY --chmod=777 scripts/startup-20-launch-supertux.sh /opt/gow/startup.d/20-launch-supertux.sh ARG IMAGE_SOURCE LABEL org.opencontainers.image.source $IMAGE_SOURCE #!/bin/bash -e source /opt/gow/bash-lib/utils.sh gow_log \"[start-launch-supertux] Begin\" if $LUTRIS -lo 2>/dev/null | grep \"supertux\" then gow_log \"[start-launch-supertux] Super Tux is already installed! Launching.\" LUTRIS_ARGS=(\"lutris:rungame/supertux\") else gow_log \"[start-launch-supertux] Super Tux is not installed! Installing.\" LUTRIS_ARGS=(\"lutris:supertux\") fi gow_log \"[start-launch-supertux] End\" Build the image based on the Lutris image with the following command; docker build -t lutris-supertux --build-arg BASE_APP_IMAGE=gow/lutris images/lutris-supertux Finally, add the appropreate entry to /etc/wolf/cfg/config.toml to add it to wolf. [[apps]] title = \"Super Tux\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfSupertux\" image = \"lutris-supertux\" mounts = [\"lutris-games:/var/lutris/:rw\"] env = [\"APPIMAGE_EXTRACT_AND_RUN=1\",\"RUN_SWAY=1\",\"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\"] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\", \"c 244:* rmw\"] } } \\ \"\"\" This will work. But when you run the image in wolf, you will find the game open by default in windowed mode. Also, because Super Tux runs from an Appimage in docker, it requires the APPIMAGE_EXTRACT_AND_RUN environment variable to be set. These things can be configured in Lutris, and we can achieve the changes we desire by providing a customised version of a Lutris installation script. All we need to do is add the customised script to the scripts directory, have the Dockerfile copy it into the image, and change the startup script to install from the provided script. images +- lutris-app +- Dockerfile +- scripts +- startup-20-configure-lutris.sh +- supertux-appimage.yaml This customised installation script sets APPIMAGE_EXTRACT_AND_RUN as an environment variable, and passes --fullscreen as a commandline argument. description: '' game_slug: supertux gogslug: '' humblestoreid: '' installer_slug: supertux-appimage name: SuperTux notes: 'Arch-based systems might need to install the following dependencies: \"physfs glew1.10 libcurl-gnutls\"' runner: linux script: files: - appimg: https://github.com/SuperTux/supertux/releases/download/v0.6.3/SuperTux-v0.6.3.glibc2.29-x86_64.AppImage game: exe: SuperTux-v0.6.3.glibc2.29-x86_64.AppImage args: --fullscreen installer: - chmodx: appimg - move: dst: $GAMEDIR src: appimg system: env: APPIMAGELAUNCHER_DISABLE: true APPIMAGE_EXTRACT_AND_RUN: true slug: supertux-appimage steamid: null version: AppImage year: 2003 The startup script is mostly the same as the previous version, except the installation command now points to the custom install script. #!/bin/bash -e source /opt/gow/bash-lib/utils.sh gow_log \"[start-launch-supertux] Begin\" if $LUTRIS -lo 2>/dev/null | grep \"supertux\" then gow_log \"[start-launch-supertux] Super Tux is already installed! Launching.\" LUTRIS_ARGS=(\"lutris:rungame/supertux\") else gow_log \"[start-launch-supertux] Super Tux is not installed! Installing.\" LUTRIS_ARGS=(\"-i\" \"/opt/gow/supertux-appimage.yaml\") fi gow_log \"[start-launch-supertux] End\" The Dockerfile needs to be modified to copy the installation script to the right place. ARG BASE_APP_IMAGE # hadolint ignore=DL3006 FROM ${BASE_APP_IMAGE} COPY --chmod=777 scripts/startup-20-launch-supertux.sh /opt/gow/startup.d/20-launch-supertux.sh COPY scripts/supertux-appimage.yaml /opt/gow/supertux-appimage.yaml ARG IMAGE_SOURCE LABEL org.opencontainers.image.source $IMAGE_SOURCE The build command is exactly the same as it was in the previous example. docker build -t lutris-supertux --build-arg BASE_APP_IMAGE=gow/lutris images/lutris-supertux Finally, the appropriate entry in /etc/wolf/cfg/config.toml can be changed to remove the now superfluous environment variable. [[apps]] title = \"Super Tux\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfSupertux\" image = \"lutris-supertux\" mounts = [\"lutris-games:/var/lutris/:rw\"] env = [\"RUN_SWAY=1\",\"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\"] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\"] } } \\ \"\"\" Because the installation script is now correctly setting the environment, we no longer have to set APPIMAGE_EXTRACT_AND_RUN in config.toml. [[apps]] title = \"Super Tux\" start_virtual_compositor = true [apps.runner] type = \"docker\" name = \"WolfSupertux\" image = \"lutris-supertux\" mounts = [\"lutris-games:/var/lutris/:rw\"] env = [\"RUN_SWAY=1\",\"GOW_REQUIRED_DEVICES=/dev/input/event* /dev/dri/* /dev/nvidia*\"] devices = [] ports = [] base_create_json = \"\"\" { \"HostConfig\": { \"IpcMode\": \"host\", \"CapAdd\": [\"NET_RAW\", \"MKNOD\", \"NET_ADMIN\", \"SYS_ADMIN\", \"SYS_NICE\"], \"Privileged\": false, \"DeviceCgroupRules\": [\"c 13:* rmw\", \"c 244:* rmw\"] } } \\ \"\"\" Now, when you select the \"Super Tux\" entry in Moonlight, Super Tux will install from the yaml script we’ve defined, and the game will run in fullscreen mode by default.","title":"Lutris","component":"gow","version":"","name":"lutris","url":"/gow/lutris.html","titles":[{"text":"Internal Layout","hash":"_internal_layout","id":1},{"text":"Folder Format","hash":"_folder_format","id":2},{"text":"Building the Lutris Image","hash":"_building_the_lutris_image","id":3},{"text":"Step 1. Build the base image","hash":"_step_1_build_the_base_image","id":4},{"text":"Step 2. Build the base-app image","hash":"_step_2_build_the_base_app_image","id":5},{"text":"Step 3. Build the lutris image","hash":"_step_3_build_the_lutris_image","id":6},{"text":"Step 4. Configure Wolf to use the container","hash":"_step_4_configure_wolf_to_use_the_container","id":7},{"text":"Extending the Lutris Image","hash":"_extending_the_lutris_image","id":8},{"text":"A Practical Example","hash":"_a_practical_example","id":9},{"text":"Dockerfile","hash":"_dockerfile","id":10},{"text":"scripts/startup-20-launch-supertux.sh","hash":"_scriptsstartup_20_launch_supertux_sh","id":11},{"text":"Build the image","hash":"_build_the_image","id":12},{"text":"config.toml","hash":"_config_toml","id":13},{"text":"Use a custom install script.","hash":"_use_a_custom_install_script","id":14},{"text":"Structure","hash":"_structure","id":15},{"text":"supertux-appimage.yaml","hash":"_supertux_appimage_yaml","id":16},{"text":"startup-20-configure-lutris.sh","hash":"_startup_20_configure_lutris_sh","id":17},{"text":"Dockerfile","hash":"_dockerfile_2","id":18},{"text":"Build the image","hash":"_build_the_image_2","id":19},{"text":"config.toml","hash":"_config_toml_2","id":20},{"text":"config.toml","hash":"_config_toml_3","id":21}]},"106":{"id":106,"text":"Xorg will fail to launch if it doesn’t believe you have a monitor attached. There are a couple of ways to handle this situaion. Nothing more to say, really. If you have an actual monitor, and you can get it physically close to your server, you can just use that. The Xorg desktop will show on the monitor, though, which may be undesirable. You can get dummy plugs for HDMI and DisplayPort that pretend to be a monitor by returning built-in EDID data when plugged in. They’re relatively inexpensive, and they don’t take up much space, so this is a popular option. You can also unplug the dummy and plug in a monitor as needed, which may or may not be a benefit depending on your situation. By setting up some custom configuration, you can force Xorg to behave as though a monitor is plugged in even when nothing is. This sounds like a slam-dunk for \"best overall option\" but the configuration is significantly more complex than simply plugging in a dummy, so it’s not necessarily the best option for everyone. Below is a summary of the changes you’ll need to make. EDID data is how Xorg determines what resolutions and timings your monitor supports without having to be explicitly configured for it. In the headless case we’re setting up, that means that the EDID file you supply needs to declare support for whatever resolution you want to run at. The exact steps for creating an EDID file will vary wildly depending on your setup and goals, so it’s a bit beyond the scope of this guide. Having said that, here are some pointers. The EDID file can either be a .bin binary file containing the exact 256 bytes of EDID data, or it can be a .txt file where each byte is represented as 2 hexadecimal characters, with the bytes separated by spaces. For example, this file, which has support for several resolutions up to 1920x1080. If that file doesn’t meet your needs, you still have options. One possibility is to read in the EDID from a connected monitor and use that. Alternatively, you can try to generate your own file using a tool like edid-generator, but that’s not something we’ve tested before. Create a new file somewhere called xorg-screen.conf. In it, put this configuration: Section \"Screen\" Identifier \"Screen0\" Device \"Device0\" Monitor \"Monitor0\" DefaultDepth 24 Option \"AllowEmptyInitialConfiguration\" \"True\" Option \"UseDisplayDevice\" \"DP-0\" Option \"CustomEDID\" \"DP-0:/home/retro/edid.txt\" Option \"ConnectedMonitor\" \"DP-0\" SubSection \"Display\" Depth 24 EndSubSection EndSection Next, make sure Docker knows how to find your new configuration and EDID files. Add lines like these to the volumes section under xorg in your compose/headless.yml to mount them into the Xorg image. services: xorg: # ... volumes: # START ADDING HERE - /path/to/edid.txt:/home/retro/edid.txt:ro - /path/to/xorg-screen.conf:/usr/share/X11/xorg.conf.d/01-xorg-screen.conf:ro # END ADDING HERE Last but not least, make sure the XORG_DISPLAY_PORT variable in env/headless.env is set to the same value as the UseDisplayDevice option in your xorg-screen.conf file. If you copied the snippet above, the correct value should be DP-0. Now you should be able to launch GOW as normal, without any monitor-related issues.","title":"Monitor requirements","component":"gow","version":"","name":"monitor","url":"/gow/monitor.html","titles":[{"text":"1. Attach an actual monitor","hash":"_attach_an_actual_monitor","id":1},{"text":"2. Use a dummy plug","hash":"_use_a_dummy_plug","id":2},{"text":"3. Force Xorg to use a custom EDID","hash":"_force_xorg_to_use_a_custom_edid","id":3},{"text":"3.1. Obtaining an EDID file","hash":"_obtaining_an_edid_file","id":4},{"text":"3.2. Xorg screen configuration","hash":"_xorg_screen_configuration","id":5},{"text":"3.3. Docker configuration","hash":"_docker_configuration","id":6},{"text":"3.4. Environment","hash":"_environment","id":7}]},"107":{"id":107,"text":"You can see if your host is using the proprietary driver using lshw: $ lshw -class video | grep -i driver configuration: driver=nvidia latency=0 In order to make use of your GPU inside a docker container, you’ll need to set up the NVIDIA Container Toolkit. If you have more than one NVIDIA GPU, you may want to set the GPU_UUID variable in env/nvidia.env to indicate which card to use. To get the correct UUID for your GPU, use the nvidia-container-cli command: $ sudo nvidia-container-cli --load-kmods info NVRM version: [version] CUDA version: 11.3 Device Index: 0 Device Minor: 0 Model: NVIDIA GeForce [model] Brand: GeForce GPU UUID: GPU-[uuid] Bus Location: 00000000:0a:00.0 Architecture: 7.5 Older NVIDIA GPUs data might not appear in nvidia-smi, but there is a patch that will fix the issue. For more information, see https://github.com/CFSworks/nvml_fix Although the NVIDIA Container Toolkit automatically provides most of the drivers needed to use the GPU inside a container, Xorg is not officially supported. This means that the runtime will not automatically map in the specific drivers needed by Xorg. The run-gow script attempts to automatically handle this situation for you, if you tell it you’re using an NVIDIA GPU, but under rare circumstances it may not be able to. If you run into trouble, come chat with us on Discord. You will need to pass the --gpu nvidia flag any time you run a run-gow command. It should be possible to use the nouveau driver, but be aware that this path is significantly less well-tested than using the proprietary driver. Make sure that the host doesn’t use proprietary drivers but that it’s using the open source nouveau drivers. sudo lshw -class video | grep driver= configuration: driver=nouveau latency=0 Double check that the GPU card is correctly listed under /dev/dri/: ls -la /dev/dri/ total 0 drwxr-xr-x 3 root root 100 Jun 20 09:47 . drwxr-xr-x 17 root root 3100 Jun 20 10:33 .. drwxr-xr-x 2 root root 80 Jun 20 09:47 by-path crw-rw---- 1 root video 226, 0 Jun 20 09:47 card0 crw-rw---- 1 root render 226, 128 Jun 20 09:47 renderD128 Because the nouveau driver implements standard APIs, you will need to make sure you do not pass --gpu nvidia when using run-gow.","title":"NVIDIA GPUs","component":"gow","version":"","name":"nvidia","url":"/gow/nvidia.html","titles":[{"text":"Using proprietary drivers","hash":"_using_proprietary_drivers","id":1},{"text":"Older NVIDIA GPUs","hash":"_older_nvidia_gpus","id":2},{"text":"Xorg drivers","hash":"_xorg_drivers","id":3},{"text":"NVIDIA GPUs with nouveau drivers","hash":"_nvidia_gpus_with_nouveau_drivers","id":4}]},"108":{"id":108,"text":"Historically, this was the first attempt that we’ve made at running games in Docker. Wolf has now completely replaced the simple bash script present in this repo. Games on Whales (GOW) lets you stream games (and other graphical applications) running in Docker containers with hardware acceleration and low latency. The goal is to allow a server to stream games to clients the same way you play a video on YouTube. A server is not necessarily a gigantic beast of a machine; in fact, GoW will probably run on hardware you already have, such as a laptop or desktop computer, or even something smaller and compact like a Raspberry Pi (in theory). Generally, you should be able to pick any OS that supports Docker and start using GoW, but testing and development are focused on Linux-based systems. We bring together a few different components: Platform Most of the software in the Games on Whales system runs in Docker containers. Containers are software packages that are designed to make installation and configuration easy by providing a consistent platform everywhere the package is run. You can choose to run GoW in either Host Desktop mode, or Headless mode. In Headless mode, we run a few platform containers for you: Xorg: The famous windowing system for managing and displaying graphical applications (GUI) PulseAudio: A sound server that can manage audio coming from multiple sources (apps). In Host Desktop mode, we expect the host server to provide those pieces. Streaming Server GoW streams running apps to clients using NVIDIA’s GameStream protocol. We provide a choice of two open-source server implementations. Although NVIDIA has announced that they are ending support for GameStream in early 2023, these open-source implementations (and thus GoW itself) do not rely on any NVIDIA support or infrastructure and will continue to work even after that date. Sunshine: The original open-source GameStream host, and still the most well-tested. Use this if you’re unsure which one to pick. Wolf: A new GameStream host, still in alpha. Client Moonlight is an open-source GameStream protocol client. Moonlight runs on many platforms, including: mobile phones, laptops, desktops, Steam Deck, and even the Nintendo Switch! Moonlight is not distributed with GoW. You’ll need to install it on each device you plan to use as a client for playing games. Applications The GoW system aims to be compatible with as many GUI app containers as possible. Here’s a selection of the ones we provide, though adding more is a very straightforward process. RetroArch: An open source, cross-platform frontend for emulators, game engines, and more! Steam: The popular game store and launcher, now sandboxed in a container Firefox: A modern web browser Head over to the components overview if you are interested in how these pieces of software are tied together by GOW","title":"Overview","component":"gow","version":"","name":"overview","url":"/gow/overview.html","titles":[{"text":"How does it work?","hash":"_how_does_it_work","id":1}]},"109":{"id":109,"text":"If you have more than one GPU in your system, which can frequently happen if you have both a dedicated GPU and an iGPU, you may find yourself in a situation where Xorg won’t start because it’s trying to use the wrong GPU. Unfortunately, the run-gow script is currently not smart enough to set up this configuration for you, but it is possible to manually tell Xorg which GPU to use. The PrimaryGPU option in the OutputClass section of xorg.conf can be used to specify which GPU to use based on which driver it uses. First, create a file somewhere on your host called xorg-primary-gpu.conf. Set the contents based on what type of GPU you want to use as primary: NVIDIA AMD Intel Section \"OutputClass\" Identifier \"nvidia\" MatchDriver \"nvidia-drm\" Driver \"nvidia\" Option \"AllowEmptyInitialConfiguration\" ModulePath \"/nvidia/xorg\" Option \"PrimaryGPU\" \"yes\" EndSection Section \"OutputClass\" Identifier \"amd\" MatchDriver \"amdgpu\" Driver \"amdgpu\" Option \"AllowEmptyInitialConfiguration\" Option \"PrimaryGPU\" \"yes\" EndSection Section \"OutputClass\" Identifier \"intel\" MatchDriver \"i915\" # change this to the correct driver for your iGPU Driver \"i915\" # change this to the correct driver for your iGPU Option \"AllowEmptyInitialConfiguration\" Option \"PrimaryGPU\" \"yes\" EndSection Then, open config/platforms/headless.yml and add a line to the volumes for the xorg container to use this new configuration: - /path/to/xorg-primary-gpu.conf:/usr/share/X11/xorg.conf.d/01-primary-gpu.conf:ro","title":"Primary GPU","component":"gow","version":"","name":"primary-gpu","url":"/gow/primary-gpu.html","titles":[{"text":"The PrimaryGPU option","hash":"_the_primarygpu_option","id":1}]},"110":{"id":110,"text":"uinput is a required kernel module allows software running on Linux systems to create virtual input devices. It’s required by the streaming host and it’s the only hard requirement that we need in the host machine’s kernel. Most Linux distributions, such as Ubuntu and Debian, already ship with it. You can easily verify that it’s installed by checking for the /dev/uinput device on your host: ls -la /dev/uinput crw------- 1 root root 10, 223 Jul 15 11:46 /dev/uinput If it’s not there by default, consult your distro’s documentation for adding kernel modules. If you’re using unRAID, see our unRAID instructions. If you’re using some other platform and you’re having difficulty with this step, come chat with us about it on Discord; we’d be happy to try to help you get on the right track. If you have issues with inputs (mouse, gamepad, etc) while streaming with GOW, it’s very likely that something is wrong with uinput. Host Desktop Headless unRAID You must have a monitor connected, or alternatively a dummy plug. You must have a user logged in. To make this easier for unattended systems, you might want to enable autologin. You must meet the monitor requirements detailed here: Monitor requirements. You must meet the monitor requirements detailed here: Monitor requirements. unRAID before version 6.11.0-rc3 is missing the required uinput kernel module out of the box. If you are using an older version, we recommend installing the uinput plugin unRAID doesn’t come with docker-compose, but you can easily install it by installing the docker-compose-manager plugin. If you have an NVIDIA GPU you’ll also have to install the nvidia-driver plugin After you’ve set up your host, you can install GoW.","title":"Requirements","component":"gow","version":"","name":"requirements","url":"/gow/requirements.html","titles":[{"text":"uinput","hash":"_uinput","id":1},{"text":"Platform-specific requirements","hash":"_platform_specific_requirements","id":2},{"text":"Monitor","hash":"_monitor","id":3},{"text":"User","hash":"_user","id":4},{"text":"Monitor","hash":"_monitor_2","id":5},{"text":"Monitor","hash":"_monitor_3","id":6},{"text":"uinput","hash":"_uinput_2","id":7},{"text":"docker-compose","hash":"_docker_compose","id":8},{"text":"NVIDIA GPU","hash":"_nvidia_gpu","id":9}]},"111":{"id":111,"text":"GoW is used by many people to play games and run other graphical applications every day, including hardware accelerated graphics. But we’ve got many more features and improvements in the pipeline! Here’s a peek at some things we’re working on: Expand our list of curated docker containers for popular GUI applications like: Firefox, Steam, RetroArch, etc. Support as many platforms as we can Create great documentation so that anybody can understand and learn from this project Make a ``launcher app'' that will let users start/stop other GUI containers easily Much more! Do you want to contribute to this project?","title":"Roadmap","component":"gow","version":"","name":"roadmap","url":"/gow/roadmap.html","titles":[]},"112":{"id":112,"text":"Historically, this was the first attempt that we’ve made at running games in Docker. Wolf has now completely replaced the simple bash script present in this repo. Games on Whales ties together several different components, with support for many host OSes and hardware configurations. In order to make it easier to manage all that, and even make most of it automatic, we’ve provided a Bash script to handle the details for you. You can think of run-gow as a frontend for docker-compose; it takes some of its own arguments at the beginning, but passes everything else on untouched. The complete usage description is below, but first let’s talk about a few of the options you’re definitely going to want to set. The --platform option is used to specify whether the underlying Xorg and Pulse platform is provided by the host computer, or if GoW should launch containers for those components. Use --platform host to use the host’s platform, or --platform headless to launch the platform in containers. The default is --platform host. Some GPUs require extra configuration, so the --gpu option is available to tell run-gow which GPU you plan on using. Possible values are nvidia and intel. Notably, AMD GPUs are reported to be working well without any additional configuration, so you won’t need this option if you’re using AMD. If you’re running headless and you have more than one GPU, including if you have a dedicated GPU and an iGPU, you may need to manually tell Xorg which GPU to use. See here for details on how to do that. You should set the --gpu option appropriately for the GPU you plan to use. By default, if you launch GoW and connect with Moonlight, you’ll only see a basic desktop. However, it’s likely that you have at least one application in mind that you’d like to launch, and you can use the --app argument to specify that. Supported apps can be found in the compose/apps directory; just leave off the .yml: $ ./run-gow --app steam You can specify --app [app name] as many times as you like, if you want to launch multiple applications. run-gow Usage Launch the Games on Whales system Usage: run-gow [options] [compose commands] Arguments after the last option will be passed directly to 'docker compose'. For example, to launch the containers in the background, try: $ run-gow --app retroarch up -d Options: -h, --help Print this help text. -a, --app Specify an application to launch. Can be used multiple times. -d, --debug Print some extra debugging information before running Docker commands. -e, --env-file Specify an additional file of environment varibles to load before launching 'docker compose'. -g, --gpu Use this option to specify what type of GPU to use with Games on Whales. Not all GPU types require this option (notably, AMD does not). Possible types: nvidia, intel -p, --platform Use this option to specify whether system services like Xorg should be containerized or not. Possible values: headless - run xorg, udev, and pulse in containers host - use system services already running on the host server [default] -q, --quiet If set, this script will not produce any output of its own. This will not affect output from 'docker compose'. -s, --streamer Use this option to specify which streaming server should be used to connect with Moonlight. Possible values: sunshine - the original, more stable option [default] wolf - the bleeding edge option. still in beta. -x, --headless DEPRECATED. If set, has the same effect as '--platform headless' -- Signifies the end of options. Once you’ve got your system set up how you like it, you’ll find that many of the options you provide to run-gow won’t actually change very frequently, if at all. In order to cut down on the repetitiveness of always having to type those arguments every time you use run-gow, we’ve provided a mechanism to supply a set of \"default arguments\". You can do that by creating a file called $HOME/.config/gow/run-gow-rc that contains the defaults you’d like to use. The script will use the first non-empty, non-commented line as defaults each time you run, and any extra arugments you provide on the command line will override what’s in the run-gow-rc file. For example, if you set your run-gow-rc to this: --platform headless --gpu nvidia and run: $ ./run-gow --app steam up run-gow will launch Steam in headless mode with NVIDIA GPU.","title":"run-gow","component":"gow","version":"","name":"run-gow","url":"/gow/run-gow.html","titles":[{"text":"--platform","hash":"_platform","id":1},{"text":"--gpu","hash":"_gpu","id":2},{"text":"--app","hash":"_app","id":3},{"text":"run-gow-rc","hash":"_run_gow_rc","id":4}]},"113":{"id":113,"text":"Now that you’ve got your system set up, and GoW installed and configured, you’re ready to launch the system. Launching GoW is done with the aptly named run-gow script in the install directory. If you’re unsure about what any of the examples on this page mean, this deep dive guide should help to explain things. Also, if you’re using a GPU for hardware acceleration (and you should!) you may need to provide a --gpu option. See the deep dive for details. Now it’s time to download the pre-built container images: Host Desktop Headless (incl. unRAID) run-gow --app [appname] pull run-gow --platform headless --app [appname] pull Currently supported appnames can be found in our GitHub repo, or you can always add your own. This may take a minute or two to complete, since it has to download the container images. Next, you can launch the system: Host Desktop Headless (incl. unRAID) run-gow --app [appname] up run-gow --platform headless --app [appname] up Next up, connecting!","title":"Running","component":"gow","version":"","name":"running","url":"/gow/running.html","titles":[{"text":"Pulling containers","hash":"_pulling_containers","id":1},{"text":"Launching","hash":"_launching","id":2}]},"114":{"id":114,"text":"You can use the gameonwhales/steam image to play Steam games on GOW. It’s highly recommended to use a GPU in order to run Steam games. The Steam client and many Steam games are 32-bit applications and therefore require 32-bit drivers for your GPU. If the multilib drivers are not automatically installed on your host, please make sure you have installed both the 64-bit and the 32-bit drivers installed. Here are a few frequently asked questions related to Steam support; if you run into any other issues, feel free to file an issue on GitHub or reach out in Discord. You can look at Steam’s 'System Information' to verify that your GPU is detected. Many parts of the Steam client’s UI are rendered using an integrated webview, which can be sensitive to the size of /dev/shm. You can check the size in your container like this: $ docker exec -it gow-steam-1 df -h | grep shm If it is at least 500MB, you may be experiencing a different issue. Check the logs at local_state/.steam/debian-installation/error.log for more info on the specific issue. Surprisingly, you can! And it’s fairly easy to do it using proton which is integrated in Steam via Steam Play. In order to enable it: Steam > Settings - Steam Play [✓] Enable Steam Play for supported titles (optional) [✓] Enable Steam Play for all other titles There are a lot of different places for logs; for example, each game logs in a different folder. Here are a few hints on where to look local_state/.steam/debian-installation/error.log This is where most of the issues with the Steam client are logged local_state/.config/ This is where games usually put log and config files. For example, local_state/.config/unity3d/NoBrakesGames/Human/Player.log is the log file for Human Fall Flat local_state/Steam/logs/bootstrap_log.txt This is the log file related to starting/updating the steam client","title":"Steam","component":"gow","version":"","name":"steam","url":"/gow/steam.html","titles":[{"text":"Can Steam see my GPU?","hash":"_can_steam_see_my_gpu","id":1},{"text":"UI: Why are all the Steam windows black?","hash":"_ui_why_are_all_the_steam_windows_black","id":2},{"text":"Can I run Windows games?","hash":"_can_i_run_windows_games","id":3},{"text":"Something is wrong! Where are the logs?","hash":"_something_is_wrong_where_are_the_logs","id":4}]},"115":{"id":115,"text":"Here’s a list of common problems and their solutions. If you’re having trouble with something and you don’t see it mentioned, or if you need more help solving your problem, feel free to open an issue or reach out on Discord! In order to be able to stream your desktop, you must meet the Monitor requirements. You can see more stats in Moonlight during the streaming if you press Ctrl+Alt+Shift+S (see: all keyboard options). This means that your local_state folder as defined in the user.env file is not owned by user 1000. You can fix this by: sudo chown -R 1000:1000 local_state If keyboard and mouse are working it means that uinput, Xorg and Sunshine are correctly working. Gamepad devices are created by Sunshine on connection, only if the client has one attached. Gamepads are not handled by Xorg as input devices; instead they are directly accessed by the app that wants to use them. That’s why on containers that use gamepads have to run in privileged mode. network_mode: ${UDEVD_NETWORK} privileged: true Using the keyboard you can move using the arrows and get back to the previous menu by pressing backspace From the Main Menu > Online Updater select: Update Core Info Files Update assets Press F to toggle fullscreen if you need to. Xorg is logging more than what you can see from the command line; you can get the full log file at /var/log/Xorg.0.log from inside the Docker container. Running the following should copy it to your current directory, even if the container is no longer running: docker cp gow-xorg-1:/var/log/Xorg.0.log . If you’re running in headless mode, it’s likely that the file will be called Xorg.99.log instead of Xorg.0.log. I’m still not sure about this one, it happened to me when trying to start GOW on a Desktop system when the screen was locked. Unlocking the screen first and then running GOW solved the issue for me. Disabling modesetting might be another way to get around it.","title":"Troubleshooting","component":"gow","version":"","name":"troubleshooting","url":"/gow/troubleshooting.html","titles":[{"text":"Lag, slow, missing frames","hash":"_lag_slow_missing_frames","id":1},{"text":"mkdir: cannot create directory `/home/retro/sunshine/': Permission denied","hash":"_mkdir_cannot_create_directory_homeretrosunshine_permission_denied","id":2},{"text":"I can use my mouse and keyboard but my gamepad doesn’t work","hash":"_i_can_use_my_mouse_and_keyboard_but_my_gamepad_doesnt_work","id":3},{"text":"RetroArch is missing icons!","hash":"_retroarch_is_missing_icons","id":4},{"text":"How can I get the full logs of Xorg?","hash":"_how_can_i_get_the_full_logs_of_xorg","id":5},{"text":"Xorg: Failed to acquire modesetting permission","hash":"_xorg_failed_to_acquire_modesetting_permission","id":6}]},"116":{"id":116,"text":"In the Games on Whales system, the \"platform\" is the component that provides system-level services like Xorg, PulseAudio, and udev. We provide two options; \"Host Desktop\", which uses the services already provided on the host system, and \"Headless\", which launches those services in Docker containers. The goal of this page is to help you choose which one is best for your situation. Before we get to analyzing the pros and cons of each approach, we should first address the \"elephant in the room\" (as it were): it can be tricky, or even impossible, to run two separate instances of Xorg on the same computer. So, if you’re looking to host GoW on a system that already has a desktop, and therefore a running Xorg server, it may be that your only option is to run in \"Host Desktop\" mode. In this mode, only the streaming server and the applications are containerized. That may seem like a big loss, but there are still many benefits of containerizing applications as much as possible: It’s easy to control how much CPU and memory to allocate to each app that runs via Docker You don’t have to manage installation scripts, dependency conflicts, or updates — we’ll handle all of that for you You can easily delete all files created by the application simply by removing the container It’s easier to backup configuration files and state You may also want to check out x11docker: a project focused on running GUI apps on top of your existing desktop environment. This is where GoW really shines! We’ll take care of running and configuring: A desktop environment With audio Inside Docker That can support HW acceleration And with a streaming solution that: Is low latency Supports keyboard, mouse and gamepads Can be hardware accelerated !!! On top of that foundation layer you can run most of the GUI applications out there and even games!","title":"Platforms","component":"gow","version":"","name":"which-platform","url":"/gow/which-platform.html","titles":[{"text":"The Decision May be Made For You","hash":"_the_decision_may_be_made_for_you","id":1},{"text":"Host Desktop mode","hash":"_host_desktop_mode","id":2},{"text":"Headless mode","hash":"_headless_mode","id":3}]},"117":{"id":117,"text":"Given the popularity of Windows as a desktop OS, it’s natural to wonder if the Games on Whales system can be run on Windows. Unfortunately, as of right now, the answer is \"no, not really\". There are a couple of reasons why: Windows as a Server OS Although Windows is popular as a desktop OS, and there are certainly many server solutions built on top of Windows, it really isn’t a very common server OS in home/hobbyist setups. Docker on Windows Docker on Windows requires an extra layer of virtualization that can slow things down, and even cause extra headaches, particularly when networking is involved. WSL2 WSL2 is missing the uinput kernel module, and although we have been able to build the module ourselves, Xorg still fails to launch after doing so. That should be a solvable problem, but it will require some investigation to get going. For those reasons, we believe that on Windows, your best bet is to just install Sunshine and other applications like you normally would, even though it means foregoing the benefits of containerization. Having said that, we’re open to the idea that that may not always be the case, and we’re open to new ideas and efforts to make progress on running GoW on Windows. You can follow the current status here","title":"Windows","component":"gow","version":"","name":"windows","url":"/gow/windows.html","titles":[]}},"components":{},"componentVersions":{"wolf/stable":{"displayVersion":"stable","title":"wolf","version":"stable","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/stable/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Quickstart","url":"/wolf/stable/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/stable/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/stable/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/stable/user/troubleshooting.html","urlType":"internal"},{"content":"Apps","url":"/wolf/stable/apps/index.html","urlType":"internal","items":[{"content":"Steam","url":"/wolf/stable/apps/steam.html","urlType":"internal"},{"content":"Pegasus Frontend Configuration","url":"/wolf/stable/apps/pegasus.html","urlType":"internal"}]}]},{"content":"Developer guide","items":[{"content":"How does it work?","url":"/wolf/stable/dev/how-it-works.html","urlType":"internal"},{"content":"Dev environment setup","url":"/wolf/stable/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/stable/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/stable/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/stable/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/stable/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/stable/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/stable/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/stable/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/stable/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/stable/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/stable/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/stable/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"wolf/dev-tracy":{"displayVersion":"dev-tracy","title":"wolf","version":"dev-tracy","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/dev-tracy/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Overview","url":"/wolf/dev-tracy/user/overview.html","urlType":"internal"},{"content":"Quickstart","url":"/wolf/dev-tracy/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/dev-tracy/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/dev-tracy/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/dev-tracy/user/troubleshooting.html","urlType":"internal"}]},{"content":"Developer guide","items":[{"content":"Dev environment setup","url":"/wolf/dev-tracy/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/dev-tracy/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/dev-tracy/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/dev-tracy/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/dev-tracy/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/dev-tracy/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/dev-tracy/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/dev-tracy/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/dev-tracy/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/dev-tracy/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/dev-tracy/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/dev-tracy/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"wolf/dev-nix":{"displayVersion":"dev-nix","title":"wolf","version":"dev-nix","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/dev-nix/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Overview","url":"/wolf/dev-nix/user/overview.html","urlType":"internal"},{"content":"Quickstart","url":"/wolf/dev-nix/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/dev-nix/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/dev-nix/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/dev-nix/user/troubleshooting.html","urlType":"internal"}]},{"content":"Developer guide","items":[{"content":"Dev environment setup","url":"/wolf/dev-nix/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/dev-nix/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/dev-nix/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/dev-nix/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/dev-nix/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/dev-nix/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/dev-nix/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/dev-nix/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/dev-nix/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/dev-nix/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/dev-nix/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/dev-nix/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"wolf/dev-fake-uinput":{"displayVersion":"dev-fake-uinput","title":"wolf","version":"dev-fake-uinput","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/dev-fake-uinput/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Quickstart","url":"/wolf/dev-fake-uinput/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/dev-fake-uinput/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/dev-fake-uinput/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/dev-fake-uinput/user/troubleshooting.html","urlType":"internal"}]},{"content":"Developer guide","items":[{"content":"How does it work?","url":"/wolf/dev-fake-uinput/dev/how-it-works.html","urlType":"internal"},{"content":"Dev environment setup","url":"/wolf/dev-fake-uinput/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/dev-fake-uinput/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/dev-fake-uinput/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/dev-fake-uinput/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/dev-fake-uinput/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/dev-fake-uinput/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/dev-fake-uinput/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/dev-fake-uinput/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/dev-fake-uinput/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/dev-fake-uinput/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/dev-fake-uinput/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/dev-fake-uinput/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"wolf/dev-backend-api":{"displayVersion":"dev-backend-api","title":"wolf","version":"dev-backend-api","name":"wolf","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/wolf/dev-backend-api/index.html","navigation":[{"items":[{"content":"User guide","items":[{"content":"Quickstart","url":"/wolf/dev-backend-api/user/quickstart.html","urlType":"internal"},{"content":"Configuration","url":"/wolf/dev-backend-api/user/configuration.html","urlType":"internal"},{"content":"Gstreamer","url":"/wolf/dev-backend-api/user/gstreamer.html","urlType":"internal"},{"content":"Troubleshooting","url":"/wolf/dev-backend-api/user/troubleshooting.html","urlType":"internal"},{"content":"Steam","url":"/wolf/dev-backend-api/user/steam.html","urlType":"internal"}]},{"content":"Developer guide","items":[{"content":"How does it work?","url":"/wolf/dev-backend-api/dev/how-it-works.html","urlType":"internal"},{"content":"Dev environment setup","url":"/wolf/dev-backend-api/dev/manual_build.html","urlType":"internal"},{"content":"Code Structure","url":"/wolf/dev-backend-api/dev/code-structure.html","urlType":"internal"},{"content":"GStreamer","url":"/wolf/dev-backend-api/dev/gstreamer.html","urlType":"internal"},{"content":"Headless Wayland","url":"/wolf/dev-backend-api/dev/wayland.html","urlType":"internal"},{"content":"Hotplug in Docker","url":"/wolf/dev-backend-api/dev/fake-udev.html","urlType":"internal"},{"content":"Moonlight Protocols","url":"/wolf/dev-backend-api/protocols/index.html","urlType":"internal","items":[{"content":"HTTP/S Pairing","url":"/wolf/dev-backend-api/protocols/http-pairing.html","urlType":"internal"},{"content":"RTSP","url":"/wolf/dev-backend-api/protocols/rtsp.html","urlType":"internal"},{"content":"RTP","items":[{"content":"Video (H.264/HEVC)","url":"/wolf/dev-backend-api/protocols/rtp-video.html","urlType":"internal"},{"content":"Audio (Opus)","url":"/wolf/dev-backend-api/protocols/rtp-opus.html","urlType":"internal"}]},{"content":"Control (via ENET)","url":"/wolf/dev-backend-api/protocols/control-specs.html","urlType":"internal","items":[{"content":"Input Data","url":"/wolf/dev-backend-api/protocols/input-data.html","urlType":"internal"}]}]}]}],"root":true,"order":0}]},"gow/":{"displayVersion":"default","title":"gow","version":"","name":"gow","asciidoc":{"attributes":{"env":"site","env-site":"","site-gen":"antora","site-gen-antora":"","attribute-missing":"warn","data-uri":null,"icons":"font","sectanchors":"","source-highlighter":"highlight.js","site-title":"Games On Whales","site-url":"https://games-on-whales.github.io"},"sourcemap":false,"extensions":[{},{}]},"url":"/gow/index.html","navigation":[{"items":[{"content":"Home","url":"/gow/index.html","urlType":"internal","items":[{"content":"What is GOW?","items":[{"content":"Overview","url":"/gow/overview.html","urlType":"internal"},{"content":"Components","url":"/gow/components-overview.html","urlType":"internal"},{"content":"How can I use GOW?","url":"/gow/how-to-use.html","urlType":"internal"},{"content":"Roadmap","url":"/gow/roadmap.html","urlType":"internal"}]},{"content":"Images","items":[{"content":"Lutris","url":"/gow/lutris.html","urlType":"internal"}]},{"content":"Getting Started","items":[{"content":"Prerequisites","url":"/gow/requirements.html","urlType":"internal","items":[{"content":"Monitor requirements","url":"/gow/monitor.html","urlType":"internal"}]},{"content":"Installation","url":"/gow/installation.html","urlType":"internal"},{"content":"Configuration","url":"/gow/configuration.html","urlType":"internal"},{"content":"Running","url":"/gow/running.html","urlType":"internal"},{"content":"Connecting","url":"/gow/connecting.html","urlType":"internal"}]},{"content":"Advanced","items":[{"content":"Which platform?","url":"/gow/which-platform.html","urlType":"internal"},{"content":"Adding a new app","url":"/gow/adding-an-app.html","urlType":"internal"},{"content":"Kubernetes","url":"/gow/kubernetes.html","urlType":"internal"},{"content":"Is Windows supported?","url":"/gow/windows.html","urlType":"internal"},{"content":"Nvidia GPU","url":"/gow/nvidia.html","urlType":"internal"},{"content":"Multiple GPUs","url":"/gow/primary-gpu.html","urlType":"internal"},{"content":"Steam","url":"/gow/steam.html","urlType":"internal"},{"content":"run-gow","url":"/gow/run-gow.html","urlType":"internal"},{"content":"Troubleshooting","url":"/gow/troubleshooting.html","urlType":"internal"}]},{"content":"Contributing/Developing","items":[{"content":"Contributing","url":"/gow/contributing.html","urlType":"internal"},{"content":"Docker build","url":"/gow/docker-build.html","urlType":"internal"}]}]}],"root":true,"order":0}]}}}}) \ No newline at end of file diff --git a/sitemap-gow.xml b/sitemap-gow.xml index 260522a..a7328a2 100644 --- a/sitemap-gow.xml +++ b/sitemap-gow.xml @@ -2,94 +2,94 @@ https://games-on-whales.github.io/gow/adding-an-app.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/components-overview.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/configuration.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/connecting.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/contributing.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/docker-build.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/how-to-use.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/installation.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/kubernetes.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/lutris.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/monitor.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/nvidia.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/overview.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/primary-gpu.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/requirements.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/roadmap.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/run-gow.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/running.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/steam.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/troubleshooting.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/which-platform.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/gow/windows.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z diff --git a/sitemap-wolf.xml b/sitemap-wolf.xml index c0d5492..0f70531 100644 --- a/sitemap-wolf.xml +++ b/sitemap-wolf.xml @@ -2,454 +2,378 @@ https://games-on-whales.github.io/wolf/stable/apps/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/apps/pegasus.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/apps/steam.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/dev/code-structure.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/dev/fake-udev.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/dev/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/dev/how-it-works.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/dev/manual_build.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/dev/wayland.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/protocols/control-specs.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/protocols/http-pairing.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/protocols/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/protocols/input-data.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/protocols/rtp-opus.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/protocols/rtp-video.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/protocols/rtsp.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/user/configuration.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/user/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/user/quickstart.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/stable/user/troubleshooting.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/dev/code-structure.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/dev/fake-udev.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/dev/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/dev/manual_build.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/dev/wayland.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/protocols/control-specs.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/protocols/http-pairing.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/protocols/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/protocols/input-data.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/protocols/rtp-opus.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/protocols/rtp-video.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/protocols/rtsp.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/user/configuration.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/user/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/user/overview.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/user/quickstart.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-tracy/user/troubleshooting.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/dev/code-structure.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/dev/fake-udev.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/dev/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/dev/manual_build.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/dev/wayland.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/protocols/control-specs.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/protocols/http-pairing.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/protocols/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/protocols/input-data.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/protocols/rtp-opus.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/protocols/rtp-video.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/protocols/rtsp.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/user/configuration.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/user/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/user/overview.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/user/quickstart.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-nix/user/troubleshooting.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/dev/code-structure.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/dev/fake-udev.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/dev/gstreamer.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/dev/how-it-works.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/dev/manual_build.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/dev/wayland.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/index.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/protocols/control-specs.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/protocols/http-pairing.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/protocols/index.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/protocols/input-data.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/protocols/rtp-opus.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/protocols/rtp-video.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/protocols/rtsp.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/user/configuration.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/user/gstreamer.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/user/quickstart.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/user/steam.html -2024-09-02T19:55:50.217Z - - -https://games-on-whales.github.io/wolf/dev-fix-109/user/troubleshooting.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/dev/code-structure.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/dev/fake-udev.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/dev/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/dev/how-it-works.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/dev/manual_build.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/dev/wayland.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/protocols/control-specs.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/protocols/http-pairing.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/protocols/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/protocols/input-data.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/protocols/rtp-opus.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/protocols/rtp-video.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/protocols/rtsp.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/user/configuration.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/user/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/user/quickstart.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-fake-uinput/user/troubleshooting.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/dev/code-structure.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/dev/fake-udev.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/dev/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/dev/how-it-works.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/dev/manual_build.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/dev/wayland.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/protocols/control-specs.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/protocols/http-pairing.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/protocols/index.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/protocols/input-data.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/protocols/rtp-opus.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/protocols/rtp-video.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/protocols/rtsp.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/user/configuration.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/user/gstreamer.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/user/quickstart.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/user/steam.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z https://games-on-whales.github.io/wolf/dev-backend-api/user/troubleshooting.html -2024-09-02T19:55:50.217Z +2024-09-03T08:06:15.700Z diff --git a/wolf/dev-backend-api/dev/code-structure.html b/wolf/dev-backend-api/dev/code-structure.html index 2d7de92..211d4ec 100644 --- a/wolf/dev-backend-api/dev/code-structure.html +++ b/wolf/dev-backend-api/dev/code-structure.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/dev/fake-udev.html b/wolf/dev-backend-api/dev/fake-udev.html index ef4d20f..d3e88f7 100644 --- a/wolf/dev-backend-api/dev/fake-udev.html +++ b/wolf/dev-backend-api/dev/fake-udev.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/dev/gstreamer.html b/wolf/dev-backend-api/dev/gstreamer.html index aab0380..ae4eec1 100644 --- a/wolf/dev-backend-api/dev/gstreamer.html +++ b/wolf/dev-backend-api/dev/gstreamer.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/dev/how-it-works.html b/wolf/dev-backend-api/dev/how-it-works.html index 2ae8ac5..e129eda 100644 --- a/wolf/dev-backend-api/dev/how-it-works.html +++ b/wolf/dev-backend-api/dev/how-it-works.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/dev/manual_build.html b/wolf/dev-backend-api/dev/manual_build.html index 7355b42..07d0657 100644 --- a/wolf/dev-backend-api/dev/manual_build.html +++ b/wolf/dev-backend-api/dev/manual_build.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/dev/wayland.html b/wolf/dev-backend-api/dev/wayland.html index 970283d..5ed7692 100644 --- a/wolf/dev-backend-api/dev/wayland.html +++ b/wolf/dev-backend-api/dev/wayland.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/index.html b/wolf/dev-backend-api/index.html index a502a55..224a384 100644 --- a/wolf/dev-backend-api/index.html +++ b/wolf/dev-backend-api/index.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/protocols/control-specs.html b/wolf/dev-backend-api/protocols/control-specs.html index de99d1c..85e8fd3 100644 --- a/wolf/dev-backend-api/protocols/control-specs.html +++ b/wolf/dev-backend-api/protocols/control-specs.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -199,7 +196,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/protocols/http-pairing.html b/wolf/dev-backend-api/protocols/http-pairing.html index d2def2c..90dc100 100644 --- a/wolf/dev-backend-api/protocols/http-pairing.html +++ b/wolf/dev-backend-api/protocols/http-pairing.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -199,7 +196,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/protocols/index.html b/wolf/dev-backend-api/protocols/index.html index 2b3772a..0917478 100644 --- a/wolf/dev-backend-api/protocols/index.html +++ b/wolf/dev-backend-api/protocols/index.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/protocols/input-data.html b/wolf/dev-backend-api/protocols/input-data.html index 1d03aed..5eaa04f 100644 --- a/wolf/dev-backend-api/protocols/input-data.html +++ b/wolf/dev-backend-api/protocols/input-data.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -200,7 +197,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/protocols/rtp-opus.html b/wolf/dev-backend-api/protocols/rtp-opus.html index fb14cd8..b15a534 100644 --- a/wolf/dev-backend-api/protocols/rtp-opus.html +++ b/wolf/dev-backend-api/protocols/rtp-opus.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -200,7 +197,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/protocols/rtp-video.html b/wolf/dev-backend-api/protocols/rtp-video.html index 3094b67..b342ec4 100644 --- a/wolf/dev-backend-api/protocols/rtp-video.html +++ b/wolf/dev-backend-api/protocols/rtp-video.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -200,7 +197,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/protocols/rtsp.html b/wolf/dev-backend-api/protocols/rtsp.html index b4e9e55..331f48c 100644 --- a/wolf/dev-backend-api/protocols/rtsp.html +++ b/wolf/dev-backend-api/protocols/rtsp.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -199,7 +196,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/user/configuration.html b/wolf/dev-backend-api/user/configuration.html index 0313d8d..6c8fabb 100644 --- a/wolf/dev-backend-api/user/configuration.html +++ b/wolf/dev-backend-api/user/configuration.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/user/gstreamer.html b/wolf/dev-backend-api/user/gstreamer.html index b1f799a..80fbdca 100644 --- a/wolf/dev-backend-api/user/gstreamer.html +++ b/wolf/dev-backend-api/user/gstreamer.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/user/quickstart.html b/wolf/dev-backend-api/user/quickstart.html index 63e70a0..6f0a354 100644 --- a/wolf/dev-backend-api/user/quickstart.html +++ b/wolf/dev-backend-api/user/quickstart.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/user/steam.html b/wolf/dev-backend-api/user/steam.html index 7a7404c..222ff0d 100644 --- a/wolf/dev-backend-api/user/steam.html +++ b/wolf/dev-backend-api/user/steam.html @@ -4,7 +4,7 @@ Steam :: Games On Whales - + @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-backend-api/user/troubleshooting.html b/wolf/dev-backend-api/user/troubleshooting.html index 8a9e04f..6ed2ca1 100644 --- a/wolf/dev-backend-api/user/troubleshooting.html +++ b/wolf/dev-backend-api/user/troubleshooting.html @@ -165,9 +165,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -198,7 +195,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/dev/code-structure.html b/wolf/dev-fake-uinput/dev/code-structure.html index 6dfb7f7..cccf6ba 100644 --- a/wolf/dev-fake-uinput/dev/code-structure.html +++ b/wolf/dev-fake-uinput/dev/code-structure.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/dev/fake-udev.html b/wolf/dev-fake-uinput/dev/fake-udev.html index 28aa314..f8982e8 100644 --- a/wolf/dev-fake-uinput/dev/fake-udev.html +++ b/wolf/dev-fake-uinput/dev/fake-udev.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/dev/gstreamer.html b/wolf/dev-fake-uinput/dev/gstreamer.html index 86fd726..0c68b0b 100644 --- a/wolf/dev-fake-uinput/dev/gstreamer.html +++ b/wolf/dev-fake-uinput/dev/gstreamer.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/dev/how-it-works.html b/wolf/dev-fake-uinput/dev/how-it-works.html index 38be698..8863db7 100644 --- a/wolf/dev-fake-uinput/dev/how-it-works.html +++ b/wolf/dev-fake-uinput/dev/how-it-works.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/dev/manual_build.html b/wolf/dev-fake-uinput/dev/manual_build.html index aebc527..7f38adb 100644 --- a/wolf/dev-fake-uinput/dev/manual_build.html +++ b/wolf/dev-fake-uinput/dev/manual_build.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/dev/wayland.html b/wolf/dev-fake-uinput/dev/wayland.html index 8d5d2c8..f12090e 100644 --- a/wolf/dev-fake-uinput/dev/wayland.html +++ b/wolf/dev-fake-uinput/dev/wayland.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/index.html b/wolf/dev-fake-uinput/index.html index ca4582b..ed731ca 100644 --- a/wolf/dev-fake-uinput/index.html +++ b/wolf/dev-fake-uinput/index.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -194,7 +191,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/protocols/control-specs.html b/wolf/dev-fake-uinput/protocols/control-specs.html index cad042d..6253231 100644 --- a/wolf/dev-fake-uinput/protocols/control-specs.html +++ b/wolf/dev-fake-uinput/protocols/control-specs.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -196,7 +193,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/protocols/http-pairing.html b/wolf/dev-fake-uinput/protocols/http-pairing.html index 1a455e7..8b6ab0f 100644 --- a/wolf/dev-fake-uinput/protocols/http-pairing.html +++ b/wolf/dev-fake-uinput/protocols/http-pairing.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -196,7 +193,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/protocols/index.html b/wolf/dev-fake-uinput/protocols/index.html index 55c93d8..b62bf25 100644 --- a/wolf/dev-fake-uinput/protocols/index.html +++ b/wolf/dev-fake-uinput/protocols/index.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/protocols/input-data.html b/wolf/dev-fake-uinput/protocols/input-data.html index 95de6d3..039aec0 100644 --- a/wolf/dev-fake-uinput/protocols/input-data.html +++ b/wolf/dev-fake-uinput/protocols/input-data.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/protocols/rtp-opus.html b/wolf/dev-fake-uinput/protocols/rtp-opus.html index d4ce687..5a106e4 100644 --- a/wolf/dev-fake-uinput/protocols/rtp-opus.html +++ b/wolf/dev-fake-uinput/protocols/rtp-opus.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/protocols/rtp-video.html b/wolf/dev-fake-uinput/protocols/rtp-video.html index 7b1755b..dcd7464 100644 --- a/wolf/dev-fake-uinput/protocols/rtp-video.html +++ b/wolf/dev-fake-uinput/protocols/rtp-video.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/protocols/rtsp.html b/wolf/dev-fake-uinput/protocols/rtsp.html index 31d9348..eebd34e 100644 --- a/wolf/dev-fake-uinput/protocols/rtsp.html +++ b/wolf/dev-fake-uinput/protocols/rtsp.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -196,7 +193,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/user/configuration.html b/wolf/dev-fake-uinput/user/configuration.html index 78eece4..f9fdb7b 100644 --- a/wolf/dev-fake-uinput/user/configuration.html +++ b/wolf/dev-fake-uinput/user/configuration.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/user/gstreamer.html b/wolf/dev-fake-uinput/user/gstreamer.html index cf755bc..54bb70c 100644 --- a/wolf/dev-fake-uinput/user/gstreamer.html +++ b/wolf/dev-fake-uinput/user/gstreamer.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/user/quickstart.html b/wolf/dev-fake-uinput/user/quickstart.html index 0f07ba4..eb27174 100644 --- a/wolf/dev-fake-uinput/user/quickstart.html +++ b/wolf/dev-fake-uinput/user/quickstart.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fake-uinput/user/troubleshooting.html b/wolf/dev-fake-uinput/user/troubleshooting.html index f872676..f9a1d13 100644 --- a/wolf/dev-fake-uinput/user/troubleshooting.html +++ b/wolf/dev-fake-uinput/user/troubleshooting.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-fix-109/_images/hotplug_demo.gif b/wolf/dev-fix-109/_images/hotplug_demo.gif deleted file mode 100644 index f31a7e2..0000000 Binary files a/wolf/dev-fix-109/_images/hotplug_demo.gif and /dev/null differ diff --git a/wolf/dev-fix-109/_images/introduction-video.png b/wolf/dev-fix-109/_images/introduction-video.png deleted file mode 100644 index 4681578..0000000 Binary files a/wolf/dev-fix-109/_images/introduction-video.png and /dev/null differ diff --git a/wolf/dev-fix-109/_images/mangohud_example.gif b/wolf/dev-fix-109/_images/mangohud_example.gif deleted file mode 100644 index 4160bf8..0000000 Binary files a/wolf/dev-fix-109/_images/mangohud_example.gif and /dev/null differ diff --git a/wolf/dev-fix-109/_images/moonlight-pairing-code.png b/wolf/dev-fix-109/_images/moonlight-pairing-code.png deleted file mode 100644 index 5353341..0000000 Binary files a/wolf/dev-fix-109/_images/moonlight-pairing-code.png and /dev/null differ diff --git a/wolf/dev-fix-109/_images/moonlight-pairing-done.png b/wolf/dev-fix-109/_images/moonlight-pairing-done.png deleted file mode 100644 index c2a73a1..0000000 Binary files a/wolf/dev-fix-109/_images/moonlight-pairing-done.png and /dev/null differ diff --git a/wolf/dev-fix-109/_images/steam_mangohud_config.png b/wolf/dev-fix-109/_images/steam_mangohud_config.png deleted file mode 100644 index 65f5e08..0000000 Binary files a/wolf/dev-fix-109/_images/steam_mangohud_config.png and /dev/null differ diff --git a/wolf/dev-fix-109/_images/wolf-dev-components.svg b/wolf/dev-fix-109/_images/wolf-dev-components.svg deleted file mode 100644 index ecc9e10..0000000 --- a/wolf/dev-fix-109/_images/wolf-dev-components.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -
    uinput
    uhid
    EGL
    Virtual audio
    PulseAudio
    Moonlight clients
    App runner
    Virtual desktop
    gst-wayland-display
    Moonlight server
    Gstreamer pipeline
    fake-udev
    Gamescope
    Virtual input devices
    inputtino
    WOLF
    \ No newline at end of file diff --git a/wolf/dev-fix-109/_images/wolf-introduction.svg b/wolf/dev-fix-109/_images/wolf-introduction.svg deleted file mode 100644 index 3547323..0000000 --- a/wolf/dev-fix-109/_images/wolf-introduction.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - WOLF \ No newline at end of file diff --git a/wolf/dev-fix-109/_images/wolf-pairing-code.png b/wolf/dev-fix-109/_images/wolf-pairing-code.png deleted file mode 100644 index e20bd92..0000000 Binary files a/wolf/dev-fix-109/_images/wolf-pairing-code.png and /dev/null differ diff --git a/wolf/dev-fix-109/dev/code-structure.html b/wolf/dev-fix-109/dev/code-structure.html deleted file mode 100644 index 38907ed..0000000 --- a/wolf/dev-fix-109/dev/code-structure.html +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - Code Structure :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Code Structure

    -
    -
    -
    -

    The code is written in order to be as readable as possible with no side effects and no global objects/variables.

    -
    -
    -

    We (try to) follow a functional programming paradigm where all the methods take immutable inputs and returns new outputs; this has great benefits:

    -
    -
    -
      -
    • -

      Given the highly parallel nature of Wolf, we can easily share immutable data structures to multiple threads without having to deal with race conditions.

      -
      -
        -
      • -

        This gives us the power to support multiple concurrent users effortlessly.

        -
      • -
      -
      -
    • -
    • -

      Code can easily be re-used by other projects since every part is highly decoupled.

      -
    • -
    • -

      Enables testing most of the implemented methods in isolation.

      -
    • -
    -
    -
    -

    We are also trying to isolate the Moonlight protocol from the actual implementation so that we can create a portable C++ library of stateless methods, where possible, the code has been separated in logical modules.

    -
    -
    -
    -
    -

    Modules

    -
    -
    -

    src/core

    -
    -

    High-level utilities and re-usable libraries, not strictly tied to Moonlight or Wolf:

    -
    -
    -
      -
    • -

      docker.hpp: using libcurl and boost json to interrogate the Docker socket and provide an easy to use interface to most methods.

      -
    • -
    • -

      input.hpp: an easy to use virtual input device library; supports mouse, keyboard, joypads and more!

      -
    • -
    • -

      virtual-display.hpp: a simple abstraction on top of games-on-whales/gst-wayland-display in order to create and control virtual desktops.

      -
    • -
    • -

      audio.hpp: a simple abstraction on top of libpulse to create and control virtual audio devices.

      -
    • -
    -
    -
    -
    -

    src/fake-udev

    -
    -

    A little standalone CLI tool that enables us to generate udev events. -You can read more about the rationale behind it in Hotplug in Docker.

    -
    -
    -
    -

    src/moonlight-protocol

    -
    -

    Here we define core Moonlight functions in order to create the foundation for a platform-agnostic portable library. -It currently hosts the followings:

    -
    -
    - -
    -
    -
    -

    src/moonlight-server

    -
    -

    This is where the final Wolf executable will be built, contains all the additional code and logic required to run the full Moonlight server.
    -In order to keep modules decoupled most of the logic revolves around reacting to events in a shared event bus (implemented using DeveloperPaul123/eventbus).

    -
    -
    -
    -

    tests

    -
    -

    Unit tests will live under tests/ and are written using the Catch2 framework.
    -We are implementing unit tests for most of the methods and (where possible) also mocking packets/requests seen during real Moonlight sessions.

    -
    -
    -

    Some of them are platform/HW specific; they are all enabled by default, you should disable them based on your platform. -Checkout the options in the tests/CMakeLists.txt

    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/dev/fake-udev.html b/wolf/dev-fix-109/dev/fake-udev.html deleted file mode 100644 index d9b1b53..0000000 --- a/wolf/dev-fix-109/dev/fake-udev.html +++ /dev/null @@ -1,447 +0,0 @@ - - - - - - Hotplug in Docker :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Hotplug in Docker

    -
    -
    -
    -

    We would like to achieve two goals here:

    -
    -
    -
      -
    • -

      Be able to plug (and unplug) devices into our applications running inside Docker containers

      -
    • -
    • -

      Achieve full isolation: we don’t want to overlap devices between different containers

      -
    • -
    -
    -
    -
    -Hotplug demo gif -
    -
    Figure 1. A working example: connecting a joypad to the client triggers the right detection in RetroArch running in the server.
    -
    -
    -
    -
    -

    Mount virtual devices

    -
    -
    -

    Wolf creates virtual devices on-demand based on the packets that are received from Moonlight clients over the control stream.
    -When a new virtual device is created, we have to "mount" it inside the right running Docker container since, in order to achieve isolation, we can’t run them with the privileged flag.

    -
    -
    -

    Normally, Docker assigns devices available to a container at creation time. -Fortunately, it supports a more permissive rule that allows to access a wider range of devices based on the device major:minor. -By adding the --device-cgroup-rule we can then call mknod [1] from inside the container in order to mount the virtual devices on-demand from the outside.

    -
    -
    -
    Example Docker command issued by Wolf
    -
    -
    docker exec -it <App_Container> sh -c "mknod /dev/input/<device name> c <major>:<minor>"
    -
    -
    -
    -
    -
    -

    If a tree falls in the forest, does it make a sound?

    -
    -
    -

    We’ve mounted the right device into the right container, still, no application is picking it up [2]. -We have to trigger some kind of "event" in order to advertise that a new device has arrived, turns out those kind of events are generated by udev.

    -
    -
    -
    An example udev event when you plug a joypad
    -
    -
    UDEV  [3588.199301] add      /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-1/1-1:1.3/0003:054C:0CE6.0007/input/input20/js0 (input)
    -ACTION=add
    -SUBSYSTEM=input
    -DEVNAME=/dev/input/js0
    -ID_BUS=usb
    -ID_MODEL=Wireless_Controller
    -ID_SERIAL=Sony_Interactive_Entertainment_Wireless_Controller
    -ID_VENDOR=Sony_Interactive_Entertainment
    -ID_VENDOR_ENC=Sony\x20Interactive\x20Entertainment
    -ID_VENDOR_ID=054c
    -ID_REVISION=0100
    -ID_TYPE=hid
    -ID_USB_VENDOR_ID=054c
    -ID_USB_REVISION=0100
    -ID_USB_TYPE=hid
    -ID_USB_DRIVER=usbhid
    -MAJOR=13
    -MINOR=0
    -
    -
    -
    -
    -
    -

    Use udev from the host

    -
    -
    -

    The first approach is to just pass the udev socket (and db files, more on this later) from the host. -Sure, every application will get the event that a new device has been plugged, so this kind of defeats isolation; but since we are mounting only in one container, this should still work, right?

    -
    -
    -

    Unfortunately, there’s another issue: when Wolf creates a new virtual device, it will in turn automatically trigger the udev event to be "broadcast" to every listening application and if this happens before we are able to mknod the device it’ll result in an application that can’t access the device that we’ve created.

    -
    -
    -

    We want to be able to be in control of exactly when these events will be sent so that the flow is as follows:

    -
    -
    -
    -The order here matters, the udev events *must* be sent after the mount -
    -
    Figure 2. The order here matters, the udev events must be sent after the mount
    -
    -
    -
    -
    -

    Generating udev events

    -
    -
    -

    Since we have no control over udev and we can’t mount a device before it’s created we have to replicate the events that are generated by it and broadcast them in the same way to all listening applications.
    -First, let’s take a step back; how are application communicating with udev?

    -
    -
    -

    Udev internals

    -
    -
    -Though udev runs in userspace, it is highly entangled with the Linux kernel. -The first entry that recognizes device insertion/deletion events is surely the Linux kernel. -While there were no mechanisms for the Linux kernel to push notifications to userspace processes (with ioctl() the kernel can only provide responses for the corresponding requests from userspace processes), netlink IPC mechanism emerged and currently it is available for the kernel to send a notification first. -
    -
    -— https://insujang.github.io/2018-11-27/udev-device-manager-for-the-linux-kernel-in-userspace/ -
    -
    -
    -

    Normally udevd does the following steps:

    -
    -
    -
      -
    • -

      Listens for kernel events via the netlink socket (GROUP_KERNEL)

      -
    • -
    • -

      When it receives a new device event, it’ll run all the rules that are defined

      -
    • -
    • -

      Send back the "augmented" message via another netlink socket (GROUP_UDEV)

      -
    • -
    -
    -
    -

    The two different groups are crucial, whilst every user application can listen the GROUP_KERNEL events only the kernel can be the origin for those messages. GROUP_UDEV being an user space group instead can be "impersonated" by any user space application [3].

    -
    -
    -

    Since this will run in Docker there’s an additional mechanism that we have to keep in mind: network namespaces. Since udevd communicates via netlink a container that doesn’t run with --network=host will not receive those events; we’ll have to run our custom udev sender inside the container network namespace in order to achieve full isolation.

    -
    -
    -
    -

    Faking udev

    -
    -

    There are 3 main components that needs to be "faked" in order for tricking programs that are using libudev into using our fake events:

    -
    -
    -
      -
    • -

      create a file under /run/udev/control this is not used for anything else apart from detection that udev is present AFAIU.

      -
    • -
    • -

      send a valid NETLINK_KOBJECT_UEVENT event via netlink using GROUP_UDEV

      -
    • -
    • -

      generate the appropriate DB entries in /run/udev/data/

      -
      -
        -
      • -

        these are just plain text files where the filename is just c<major>:<minor> and the content is roughly the same as the event message payload

        -
      • -
      -
      -
    • -
    -
    -
    -

    The result of all this is our little CLI utility called fake-udev which we’ll install into our containers and call with our custom-generated events after mknod.

    -
    -
    -
    -
    echo -ne \"ACTION=add\\0DEVNAME=input/bomb\\0DEVPATH=/devices/bomb\\0SEQNUM=1234\\0SUBSYSTEM=input\\0\" | base64 | sudo fake-udev
    -
    -# `udevadm monitor` should print something like:
    -UDEV  [3931.403835] add      /devices/bomb  (input)
    -
    -
    -
    -
    -
    -
    -

    Putting it all together

    -
    -
    -
    -Diagram -
    -
    -
    -

    These steps will finally achieve proper hotplug detection by the applications that are running inside a Docker container without exposing any udev event/file from the host filesystem.

    -
    -
    -

    Luckily, reversing the steps is enough to also correctly unplug devices.

    -
    -
    -
    -
    -

    References

    -
    -
    -

    First off, a huge thanks goes to John McDonough for all the help in figuring most of this stuff out and for leading the way with his prototype JohnCMcDonough/virtual-gamepad.

    -
    -
    -
    -
    -
    -
    -1. This obviously requires also the MKNOD capability to be enabled (--cap-add MKNOD) -
    -
    -2. Some application might react to the new device if it’s using inotify, unfortunately, this is not the default behaviour in most apps/games -
    -
    -3. Given enough permissions, that’s why our fake udev runs as root -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/dev/gstreamer.html b/wolf/dev-fix-109/dev/gstreamer.html deleted file mode 100644 index bcfd1df..0000000 --- a/wolf/dev-fix-109/dev/gstreamer.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - GStreamer :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    GStreamer

    -
    -
    -
    -
    -GStreamer is a library for constructing graphs of media-handling components. -The applications it supports range from simple Ogg/Vorbis playback, audio/video streaming to complex audio (mixing) and video (non-linear editing) processing. -
    - -
    -
    -
    -
    -

    Overview

    -
    -
    -

    We implemented two custom plugins (one for video and one for audio) in order to turn a stream of bytes into a stream of valid Moonlight RTP packets.
    -This allows users to be able to compose Gstreamer pipelines in any form or shape and, near the end, plug our plugin so that it can be streamed to Moonlight.

    -
    -
    -
    -
    -

    The plugin

    -
    -
    -
    -Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight -
    -
    Figure 1. Our plugin sits between the encoded bitestream and a downstream UDP sink that will send the RTP packets to Moonlight
    -
    -
    -

    The basic flow is the following:

    -
    -
    -
      -
    • -

      The plugin receives a GstBuffer of binary data: the encoded video or audio stream into a format that can be decoded back by the Moonlight client.

      -
    • -
    • -

      We’ll split this into a GstBufferList of valid RTP packets following the Moonlight specifications; this includes:

      -
      -
        -
      • -

        split the original buffer into a set of correctly sized chunks

        -
      • -
      • -

        Encrypt the chunks when enabled

        -
      • -
      • -

        add RTP headers to each chunk

        -
      • -
      • -

        create additional RTP packets with the FEC information

        -
      • -
      -
      -
    • -
    • -

      Push the resulting list downstream

      -
    • -
    -
    -
    -
    -An example pipeline for *video* encoding and streaming -
    -
    Figure 2. An example pipeline for video encoding and streaming
    -
    -
    -
    -An example pipeline for *audio* encoding and streaming -
    -
    Figure 3. An example pipeline for audio encoding and streaming
    -
    -
    -

    This flow is general enough to enable us to use the same plugin for H.264, HEVC and AV1 (and any other encoder that will be supported in future). -Downstream, it’s also trivial to switch between UDP/TCP or even a complete different delivery method if needed.

    -
    -
    -

    We decided to split between audio and video because they have different RTP packet structure, non overlapping properties, different FEC encoding and different encryption requirements but the basic flow is the same for both plugins.

    -
    -
    -

    Given that this is a direct transformation from one input buffer to another output buffer we decided to use GstBaseTransform as the base class. -This will implement some boilerplate code for us so that we can focus on the main _transform virtual method implementation.

    -
    -
    -

    Following the nomenclature used in the official GStreamer RTP plugins we called them rtpmoonlightpay_video and rtpmoonlightpay_audio as in RTP Moonlight Payloader video/audio.

    -
    -
    -
    -
    -

    Code

    -
    -
    -

    GStreamer uses GObjects: a mechanism to retrofit Objects into C. -I suggest you to get a bit familiar with it before diving into the code; here’s a great and simple tutorial.

    -
    -
    -

    Following the official docs at Plugin Write’s Guide we started off with the official bash script that creates the boilerplate code from the selected base class; namely:

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/dev/how-it-works.html b/wolf/dev-fix-109/dev/how-it-works.html deleted file mode 100644 index 195bbb6..0000000 --- a/wolf/dev-fix-109/dev/how-it-works.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - How does it work? :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    How does it work?

    -
    -
    -
    -

    Wolf is composed of a few independent components that, when used together, allow us to run and stream multiple graphical applications on the same server without any overlap between them.

    -
    -
    -

    Wolf components diagram

    -
    -
    -
    -
    -

    Virtual desktop

    -
    -
    -

    In order to create virtual desktops on-demand, we’ve created a custom (micro) Wayland compositor: gst-wayland-display. -It’s based on Smithay, coded in Rust and exposes both a standalone GStreamer plugin and an easy-to-use C API.
    -The main benefit of this solution is that our compositor will then expose the raw framebuffer so that Wolf can feed that directly to the video encoding pipeline. -You can read more about it in Headless Wayland.

    -
    -
    -

    To keep things simple, our Wayland compositor doesn’t support XWayland, for containers that need it (like Steam) we use Gamescope which can be run as a Wayland client, and it’ll provide XWayland support to the downstream app.

    -
    -
    -
    -
    -

    Virtual audio

    -
    -
    -

    Audio doesn’t need any HW acceleration, it’s fairly trivial to run PulseAudio as a standalone container and use libpulse in order to create virtual audio sink on-demand.

    -
    -
    -
    -
    -

    Virtual input devices

    -
    -
    -

    Creating and managing virtual devices is handled by inputtino: a small library that abstracts away the complexities of managing uinput (and uhid) to create virtual input devices.

    -
    -
    -

    Virtual devices created by inputtino will be visible on the host system and can potentially break the host isolation that we’re trying to achieve. -In order to avoid this, we encourage users to install a set of udev rules that will restrict access to these devices to a specific group (e.g. input) and move mouse and keyboard to a different seat (see user:quickstart.adoc#_virtual_devices_support).

    -
    -
    -

    You can read a more detailed explanation into why we’ve added uhid and how gyro/acceleration is achieved here

    -
    -
    -

    Support hotplug via fake-udev

    -
    -

    Some devices like mouse and keyboard are always present and will be automatically created and setup before starting the application. -Other devices can be hotplugged whilst the streaming is running; for example, a gamepad can be plugged in after the game has started.
    -Special care is needed in order to safely mount these new devices in the app container and to make them available to the running application, there’s an in-depth article about it here: Hotplug in Docker

    -
    -
    -
    -
    -
    -

    Running applications/games

    -
    -
    -

    We run applications in a containerised environment, this way we can ensure that the application will not interfere with the host system (and with other running apps) and that it will have access only to the virtual devices that we’ve created.
    -We have a set of pre-built containers that are optimised to work with our flow in games-on-whales/gow. Generally, though, most of the GUI applications should work inside a container that can then be streamed via Wolf.

    -
    -
    -
    -
    -

    Streaming

    -
    -
    -

    We use GStreamer to encode the video and audio streams and send them to the client. We have automatic support for HW acceleration using CUDA, QuickSync and VAAPI but thanks to GStreamer we can easily add more encoders into the mix, without having to write a single line of code! The full encoding pipeline is described in a string that can be overridden by users just by changing the config.toml file.

    -
    -
    -

    We’ve implemented a couple of custom GStreamer plugins in order to properly split, RTP encode and add FEC to the resulting buffers into the format that Moonlight expects; they live in here: src/moonlight-server/gst-plugin.

    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/dev/manual_build.html b/wolf/dev-fix-109/dev/manual_build.html deleted file mode 100644 index ff955a5..0000000 --- a/wolf/dev-fix-109/dev/manual_build.html +++ /dev/null @@ -1,426 +0,0 @@ - - - - - - Dev environment setup :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Dev environment setup

    -
    -
    -
    -

    This has been tested on Debian 12, you should adjust the setup based on your distro of choice.

    -
    -
    -
    -
    -

    Install Nvidia driver + cuda

    -
    -
    -

    (Only needed on Nvidia hosts)

    -
    -
    -

    Please refer to NvidiaGraphicsDrivers for how to install the proprietary Nvidia drivers on your system.

    -
    -
    -

    You also have to install Cuda, you can follow the official instructions.

    -
    -
    -
    -
    -

    Wolf dependencies

    -
    -
    -

    Build Gstreamer

    -
    -

    We prefer to build Gstreamer from scratch and place it in a separate folder so that it doesn’t interfere with your system-installed version (if any). -This will make sure that you end up with all the required plugins.

    -
    -
    -
    Build dependencies
    -
    -
    apt install -y build-essential ninja-build gcc meson cmake ccache bison equivs \
    -	ca-certificates git libllvm15 \
    -	flex libx265-dev libopus-dev nasm libzxing-dev libzbar-dev libdrm-dev libva-dev \
    -	libmfx-dev libvpl-dev libmfx-tools libunwind8 libcap2-bin \
    -	libx11-dev libxfixes-dev libxdamage-dev libwayland-dev libpulse-dev libglib2.0-dev \
    -	libopenjp2-7-dev liblcms2-dev libcairo2-dev libcairo-gobject2 libwebp7 librsvg2-dev libaom-dev \
    -	libharfbuzz-dev libpango1.0-dev
    -
    -
    -
    -
    Build gstreamer
    -
    -
    git clone -b 1.24.6 --depth=1 https://gitlab.freedesktop.org/gstreamer/gstreamer.git
    -cd gstreamer
    -# Setup a place where we'll put the libraries
    -mkdir -p $HOME/gstreamer/include -p $HOME/gstreamer/usr/local/include
    -meson setup --prefix=$HOME/gstreamer \
    -	--buildtype=release \
    -	--strip \
    -	-Dgst-full-libraries=app,video \
    -	-Dorc=disabled \
    -	-Dgpl=enabled  \
    -	-Dbase=enabled \
    -	-Dgood=enabled  \
    -	-Dugly=enabled \
    -	-Drs=disabled \
    -	-Dtls=disabled \
    -	-Dgst-examples=disabled \
    -	-Dlibav=disabled \
    -	-Dtests=disabled \
    -	-Dexamples=disabled \
    -	-Ddoc=disabled \
    -	-Dpython=disabled \
    -	-Drtsp_server=disabled \
    -	-Dqt5=disabled \
    -	-Dbad=enabled \
    -	-Dgst-plugins-good:soup=disabled \
    -	-Dgst-plugins-good:ximagesrc=enabled \
    -	-Dgst-plugins-good:pulse=enabled \
    -	-Dgst-plugins-bad:x265=enabled  \
    -	-Dgst-plugins-bad:qsv=enabled \
    -	-Dgst-plugins-bad:aom=enabled \
    -	-Dgst-plugin-bad:nvcodec=enabled  \
    -	-Dvaapi=enabled \
    -	-Dgstreamer-vaapi:x11=disabled \
    -	build
    -meson compile -C build
    -meson install -C build
    -
    -
    -
    -

    This will install libraries and include files under ~/gstreamer, in order for Wolf to pick this up during builing we have to setup the following env variables (you can add them at the end of ~/.bash_rc for example)

    -
    -
    -
    Custom env
    -
    -
    export PATH="$HOME/gstreamer/usr/local/bin:$PATH"
    -export LIBRARY_PATH="$LIBRARY_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/"
    -export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/gstreamer/lib/x86_64-linux-gnu/"
    -export LDFLAGS="$LDFLAGS -L$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/"
    -export CFLAGS="$CFLAGS -I$HOME/gstreamer/usr/local/include"
    -export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$HOME/gstreamer/usr/local/lib/x86_64-linux-gnu/pkgconfig/"
    -
    -
    -
    -

    You can now check that the nvcodec plugin correctly works (only on Nvidia hosts)

    -
    -
    -
    -
    GST_DEBUG=4 gst-inspect-1.0 nvcodec
    -
    -
    -
    -

    Adding GST_DEBUG helps debugging possible issues with this.

    -
    -
    -
    -

    Build gst-wayland-display

    -
    -

    Install Rust following the official docs.

    -
    -
    -
    -
    git clone https://github.com/games-on-whales/gst-wayland-display
    -cd gst-wayland-display
    -cargo install cargo-c
    -mkdir $HOME/gst-wayland-display
    -cargo cinstall --prefix=$HOME/gst-wayland-display
    -
    -
    -
    -

    Like we have done for Gstreamer we are going to install this in a different directory: $HOME/gst-wayland-display in order to keep things clean.

    -
    -
    -
    Custom env
    -
    -
    export LIBRARY_PATH="$LIBRARY_PATH:$HOME/gst-wayland-display/lib/"
    -export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/gst-wayland-display/lib/"
    -export LDFLAGS="$LDFLAGS -L$HOME/gst-wayland-display/lib"
    -export CFLAGS="$CFLAGS -I$HOME/gst-wayland-display/include"
    -export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$HOME/gst-wayland-display/lib/pkgconfig/"
    -
    -
    -
    -
    -

    Install Wolf deps

    -
    -
    Build dependencies
    -
    -
    apt-get install -y --no-install-recommends \
    -    curl \
    -    ca-certificates \
    -    ninja-build \
    -    cmake \
    -    pkg-config \
    -    ccache \
    -    git \
    -    clang \
    -    libboost-thread-dev libboost-locale-dev libboost-filesystem-dev libboost-log-dev libboost-stacktrace-dev libboost-container-dev \
    -    libwayland-dev libwayland-server0 libinput-dev libxkbcommon-dev libgbm-dev \
    -    libcurl4-openssl-dev \
    -    libssl-dev \
    -    libevdev-dev \
    -    libpulse-dev \
    -    libunwind-dev \
    -    libudev-dev \
    -    libdrm-dev \
    -    libpci-dev \
    -
    -
    -
    -
    -
    -
    -

    Compile Wolf

    -
    -
    -
    Compile
    -
    -
    cmake -Bbuild -DCMAKE_C_FLAGS=$CFLAGS -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_EXTENSIONS=OFF -G Ninja
    -ninja -C build
    -
    -
    -
    -

    If compilation completes correctly, you can finally start Wolf

    -
    -
    -
    Run!
    -
    -
    build/src/wolf/wolf
    -INFO  | Reading config file from: config.toml
    -WARN  | Unable to open config file: config.toml, creating one using defaults
    -INFO  | x509 certificates not present, generating...
    -INFO  | HTTP server listening on port: 47989
    -INFO  | HTTPS server listening on port: 47984
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/dev/wayland.html b/wolf/dev-fix-109/dev/wayland.html deleted file mode 100644 index 4ee5130..0000000 --- a/wolf/dev-fix-109/dev/wayland.html +++ /dev/null @@ -1,413 +0,0 @@ - - - - - - Headless Wayland :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Headless Wayland

    -
    -
    -
    -

    Gstreamer allows us to encode any video and stream it to Moonlight via our custom plugin, but we haven’t discussed the upstream video source.
    -You can just use ximagesrc and hook your host X11 desktop to the stream but there are some issues with that:

    -
    -
    -
      -
    • -

      Xorg has to be up and running; we can run it via Docker in GOW but that’s not without its challenges.

      -
    • -
    • -

      You need a physical monitor or a dummy plugged into your GPU (or some esoteric EDID trick which works only when also performing a human sacrifice).

      -
    • -
    • -

      It doesn’t scale well with multiple remote clients when sharing a single host

      -
    • -
    -
    -
    -

    Ideally, can’t we just plug the shared video memory from the running App straight into Gstreamer ??

    -
    -
    -
    -Diagram -
    -
    -
    -

    In theory, for a single fullscreen application that’s kind of possible (read until the end to get an idea of why it’s not so simple); but we need some way to compose multiple running windows into a single scene to be then encoded via the Gstreamer pipeline.
    -Turns out that’s exactly what a Compositing window manager (or compositor) does, and since you can’t have just a compositor without the full X Window System (X11) running, we decided to follow the Wayland route.

    -
    -
    -
    -
    -

    Wayland compositor

    -
    -
    -

    We are in a very fortunate position: we don’t even want to deal with real monitors, we just want to be the glue between an application running and the Gstreamer pipeline; for this reason we can have a simplified view (and implementation).

    -
    -
    -
    -A high level overview of the main components -
    -
    Figure 1. A high level overview of the main components
    -
    -
    -

    Let’s dive into each of these parts in isolation.

    -
    -
    -

    Wayland clients

    -
    -
    -The Wayland protocol does not include a rendering API. -Instead, Wayland follows a direct rendering model, in which the client must render the window contents to a buffer shareable with the compositor. -
    -
    -— https://en.wikipedia.org/wiki/Wayland_(protocol)#Rendering_model -
    -
    -
    -

    By removing the X server from the picture we also removed the mechanism by which X clients typically render, but there’s another mechanism: direct rendering.

    -
    -
    -

    With direct rendering, the client and the server share a video memory buffer. -The client links to a rendering library such as OpenGL that knows how to program the hardware and renders directly into the buffer. -The compositor in turn can take the buffer and use it as a texture when it composites the desktop.

    -
    -
    -
    -Diagram -
    -
    -
    -

    One simple way to implement this buffer would be to use shm as a simple shared region between clients and the server. -Most Wayland compositors do their rendering on the GPU, and many Wayland clients do their rendering on the GPU as well. -With the shared memory approach, sending buffers from the client to the compositor in such cases is very inefficient, as the client has to read their data from the GPU to the CPU, then the compositor has to read it from the CPU back to the GPU to be rendered.

    -
    -
    -

    The Linux DRM (Direct Rendering Manager) interface provides a means for us to export handles to GPU resources. -Mesa, the predominant implementation of userspace Linux graphics drivers, implements a protocol that allows EGL users to transfer handles to their GPU buffers from the client to the compositor for rendering, without ever copying data to the GPU.

    -
    -
    -
    -Diagram -
    -
    -
    -
    -

    Wayland Compositor

    -
    -

    Wayland is designed to update everything atomically, such that no frame is ever presented in an invalid or intermediate state. -Our custom Wayland compositor knows where to get the rendered buffers, but it doesn’t know when the buffer is ready to be rendered; here’s where the Wayland protocol comes into play.

    -
    -
    -

    Client surfaces will start in a pending state (and no state at all when first created), this state is negotiated over the course of any number of requests from clients and events from the server; when both sides agree that it’s a consistent surface, the surface is committed. -Until this time, the compositor will continue to render the last consistent state.

    -
    -
    - - - - - -
    - - -
    -

    In Wayland, instead of continuously pushing new frames, you can let the compositor tell you when it’s ready for a new frame using frame callbacks.

    -
    -
    -
    -
    -

    The compositor must finally compose the various surfaces into a single image, in order to do that efficiently we’ll also use EGL.

    -
    -
    -
    -The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL -
    -
    Figure 2. The compositor communicates with the apps via the Wayland protocol, and compose surfaces via EGL
    -
    -
    -
    -

    Gstreamer

    -
    -

    Our compositor finally composed an image, and we are ready to send this to our Moonlight client, how do we push this to the selected encoder in the Gstreamer pipeline without copying? -Sad news is, we don’t (at least currently).

    -
    -
    -

    Although Gstreamer supports DMA Buffers (Direct Memory Access) which are an efficient way to share memory without going through the CPU, -the support for modifiers of DMA Buffers is lacking behind significantly and varyies from one plugin to the next.

    -
    -
    -

    What are modifiers? Modifiers add additional vendor specific properties to the internal pixel layout of a buffer. These modifiers are usually internally used by the GPU to speed up certain operations depending on characteristics of the hardware. -None of this really has to worry us, because all of that is handled by the gpu driver. But because DMA buffers exist outside of the scope of a singular device, we need to carry the modifier of the buffer along. -If it gets lost on the way, the program receiving the buffer has no idea how the data is layed out in memory and will likely output a broken image.

    -
    -
    -

    Modifiers as such a crucial for communicating formats across devices, but they haven’t existed all the time. So called "explicit" modifiers are a relatively new addition to the apis in question. Previously the drivers managed modifiers internally without exposing them to the user. -Buffers without an accompanying modifier are as such described as having an "implicit" modifier. Because the modifier is handled internally by the driver communication across devices is impossible with such a buffer.

    -
    -
    -

    Because these changes are relatively new, a lot of software still has to adapt to the new explicit apis and many try to be able to handle both, implicit and explicit buffers. Gstreamer being composed of many plugins currently results in very different stages of transitioning between these apis. -Some apis even got support for explicit modifiers, only to drop it a release later, because users of older plugins were complaining about incompatibilities…​ This means the chance of getting a good image out of the pipeline starting with a DMA Buffer is very small.

    -
    -
    -

    Given the state of things, we are currently copying the buffer through host-memory once to side-step this issue for now. The plan for the future is to provide first an experimental option for using DMA buffers, -and later with more testing and development we will hopefully be able to share, compose and finally encode different buffer types with zero memory copied between the GPU and the CPU for truely the best possible latency.

    -
    -
    -
    -Diagram -
    -
    -
    -
    -

    References

    -
    -

    Special thanks to @drakulix for patiently explaining this to me and lead the way in drakulix/sunrise.
    -Here’s a bunch of useful links, docs and videos:

    -
    - -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/index.html b/wolf/dev-fix-109/index.html deleted file mode 100644 index fc12729..0000000 --- a/wolf/dev-fix-109/index.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - Wolf :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Wolf

    -
    -
    -
    -

    Build badge -Discord link -License MIT -Donate button

    -
    -
    -
    -An intelligent wolf is better than a foolish lion. -
    -
    -— Matshona Dhliwayo. -
    -
    -
    -

    Wolf is an open source streaming server for Moonlight that allows you to share a single server with multiple remote clients in order to play videogames!

    -
    -
    -

    Wolf introduction image

    -
    -
    -

    It’s made from the ground up with the following primary goals:

    -
    -
    -
      -
    • -

      Allow multiple users to stream different content by sharing a single remote host hardware

      -
    • -
    • -

      On demand creation of virtual desktops with full support for any resolution/FPS without the need for a monitor or a dummy plug.

      -
    • -
    • -

      Allow multiple GPUs to be used simultaneously for different jobs

      -
      -
        -
      • -

        Example: stream encoding on iGPU whilst gaming on GPU

        -
      • -
      -
      -
    • -
    • -

      Provide low latency video and audio stream with full support for gamepads

      -
    • -
    • -

      Linux and Docker first: run your games with low privileges in containers (based on Games On Whales)

      -
    • -
    • -

      Mostly hackable, just edit the config file to modify encoding pipelines, GPU settings or Docker/Podman low level details

      -
    • -
    -
    -
    -

    It’s a specific tool for a specific need, are you looking for a general purpose streaming solution? -Try out Sunshine!

    -
    -
    -
    - -
    -
    -
    -
    -
    -

    Acknowledgements

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/protocols/control-specs.html b/wolf/dev-fix-109/protocols/control-specs.html deleted file mode 100644 index ff9d6e4..0000000 --- a/wolf/dev-fix-109/protocols/control-specs.html +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - Control specifications :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Control specifications

    -
    -

    Overview

    -
    -
    -

    The control stream runs over UDP via a custom fork of ENET that supports IPV4 and IPV6.

    -
    -
    -

    All the exchanged messages are encrypted using AES GCM 128 bit.
    -In order to decrypt you’ll have to use the keys that are exchanged during the HTTP launch phase.

    -
    -
    -
    -
    -

    Encrypted packet format

    -
    -
    -

    AES GCM not only provides confidentiality by encrypting the message but, by using the GCM TAG, it also guarantees that no one has tampered the original payload.

    -
    -
    -
    -The format of encrypted packets (bytes) -
    -
    Figure 1. The format of encrypted packets (bytes)
    -
    - ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ElementSize in bytesC++ typeDescription

    Type

    2

    unsigned short int

    The type of message, fixed at 0x0001 for this type of packet

    Len

    2

    unsigned short int

    The size of the rest of the message in bytes (Seq + TAG + Payload)

    Seq

    4

    unsigned int

    Monotonically increasing sequence number (used as IV for AES-GCM)

    GCM TAG

    16

    char *

    The AES GCM TAG

    Payload

    until Len

    char *

    The AES encrypted payload

    -
    - - - - - -
    - - -All data is little-endian encoded -
    -
    -
    -
    -
    -

    Decrypted payload

    -
    -
    -

    The first two bytes of the decrypted payload represent the type of the message; the following types are encoded:

    -
    -
    -
      -
    • -

      START_A (0x0305)

      -
    • -
    • -

      START_B (0x0307)

      -
    • -
    • -

      INVALIDATE_REF_FRAMES (0x0301)

      -
    • -
    • -

      LOSS_STATS (0x0201)

      -
    • -
    • -

      FRAME_STATS (0x0204)

      -
    • -
    • -

      INPUT_DATA (0x0206)

      -
    • -
    • -

      TERMINATION (0x0100)

      -
    • -
    • -

      PERIODIC_PING (0x0200)

      -
    • -
    • -

      IDR_FRAME (0x0302)

      -
    • -
    • -

      HDR_MODE (0x010e)

      -
    • -
    • -

      RUMBLE_DATA (0x010b)

      -
    • -
    • -

      RUMBLE_TRIGGERS (0x5500)

      -
    • -
    • -

      MOTION_EVENT (0x5501)

      -
    • -
    • -

      RGB_LED (0x5502)

      -
    • -
    -
    -
    -

    The next two bytes indicate the size of the decrypted payload. -The format of the remaining data depends on the message type.

    -
    -
    -
    -
    -

    Server events

    -
    -
    -

    The following events are originating from the server and will be sent to Moonlight clients.

    -
    -
    -

    Rumble data

    -
    -

    A simple schema for a controller number and low/high frequencies

    -
    -
    -
    -The payload for a Rumble packet (bytes) -
    -
    Figure 2. The payload for a Rumble packet (bytes)
    -
    -
    -
    -

    Rumble Triggers

    -
    -

    new in Moonlight 5.0.0

    -
    -
    -

    A simple schema for a controller number and left/right values

    -
    -
    -
    -The payload for a Trigger packet (bytes) -
    -
    Figure 3. The payload for a Trigger packet (bytes)
    -
    -
    -
    -

    Motion Event

    -
    -

    new in Moonlight 5.0.0

    -
    -
    -

    This is used to signal to Moonlight clients to start sending motion events (Gyro or Acceleration) to the server.
    -By default Moonlight disables these events in order to save bandwith.

    -
    -
    -
    -The payload for a Motion packet (bytes) -
    -
    Figure 4. The payload for a Motion packet (bytes)
    -
    -
    -

    Type could be:

    -
    -
    -
      -
    • -

      ACCELERATION (0x01)

      -
    • -
    • -

      GYROSCOPE (0x02)

      -
    • -
    -
    -
    -
    -

    RGB LED

    -
    -

    new in Moonlight 5.0.0

    -
    -
    -

    This is used to control the color of the LED of supported controllers.
    -An example of this is when setting the LED color in Steam, the server has to send this event all the way to the Moonlight client.

    -
    -
    -
    -The payload for a LED packet (bytes) -
    -
    Figure 5. The payload for a LED packet (bytes)
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/protocols/http-pairing.html b/wolf/dev-fix-109/protocols/http-pairing.html deleted file mode 100644 index add533b..0000000 --- a/wolf/dev-fix-109/protocols/http-pairing.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - HTTP/S Pairing :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    HTTP/S Pairing

    -
    -

    Overview

    -
    -
    -

    Here we start with a question:

    -
    -
    - - - - - -
    - - -
    -

    How can we securely authenticate an untrusted client over an insecure network?

    -
    -
    -
    -
    -

    This involves quite a bit of cryptography and a few steps between the client (Moonlight) and the server (Wolf).

    -
    -
    -
    -Diagram -
    -
    -
    -
    -
    -

    Phase 1

    -
    -
    -
    -Diagram -
    -
    -
    -

    Moonlight will send a salt and client certificate, users will see a prompt asking to insert the password on the remote server. -On the backend, we’ll need the PIN to be inserted by the user.

    -
    -
    -

    PIN and SALT will be used to derive a shared AES key that needs to be stored in order to be used to decrypt in the next phases.

    -
    -
    -

    At this stage we only have to send back our public certificate (plaincert).

    -
    -
    -
    -
    -

    Phase 2

    -
    -
    -
    -Diagram -
    -
    -
    -

    Using the AES key that we generated in the phase 1 we have to decrypt the client challenge,

    -
    -
    -

    We generate a SHA256 hash with the following:

    -
    -
    -
      -
    • -

      Decrypted challenge

      -
    • -
    • -

      Server certificate signature

      -
    • -
    • -

      Server secret: a randomly generated secret

      -
    • -
    -
    -
    -

    The hash + server_challenge will then be AES encrypted and sent as the challengeresponse

    -
    -
    -
    -
    -

    Phase 3

    -
    -
    -
    -Diagram -
    -
    -
    -

    Moonlight will send back a serverchallengeresp: an AES encrypted client hash, we have to send back the pairingsecret: -using our private key we have to sign the certificate_signature + server_secret (generated in phase 2)

    -
    -
    -
    -
    -

    Phase 4

    -
    -
    -
    -Diagram -
    -
    -
    -

    We now have to use everything we exchanged before in order to verify and finally pair the clients.

    -
    -
    -

    We’ll check the client_hash obtained at phase 3, it should contain the following:

    -
    -
    -
      -
    • -

      The original server_challenge

      -
    • -
    • -

      The signature of the X509 client_cert

      -
    • -
    • -

      The unencrypted client_pairing_secret

      -
    • -
    -
    -
    -

    We’ll check that SHA256(server_challenge + client_public_cert_signature + client_secret) == client_hash

    -
    -
    -

    Then using the client certificate public key we should be able to verify that the client secret has been signed by Moonlight

    -
    -
    -

    The response will contain:

    -
    -
    -
      -
    • -

      paired = 1, if all checks are fine

      -
    • -
    • -

      paired = 0, otherwise

      -
    • -
    -
    -
    -
    -
    -

    Phase 5 (HTTPS)

    -
    -
    -
    -Diagram -
    -
    -
    -

    This extra step will run over HTTPS in order to make sure that Moonlight can reach Wolf over a secure connection.
    -On the backend every HTTPS request will be checked for a valid client certificate; only clients that have been successfully paired will be allowed to call the APIs

    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/protocols/index.html b/wolf/dev-fix-109/protocols/index.html deleted file mode 100644 index ec021d6..0000000 --- a/wolf/dev-fix-109/protocols/index.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - Moonlight Protocols :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Moonlight Protocols

    -
    -

    Overview

    -
    -
    -
    -High level overview of the protocols flow -
    -
    Figure 1. High level overview of the protocols flow
    -
    -
    - - - - - -
    - - -
    -

    Design a better flowchart

    -
    -
    -
    -
    -

    There are 6 main protocols involved in the current Moonlight protocol:

    -
    -
    -
      -
    • -

      HTTP (TCP 47989)

      -
      -
        -
      • -

        unencrypted 🔓

        -
      • -
      • -

        used to exchanged public information needed to start pairing clients

        -
      • -
      -
      -
    • -
    • -

      HTTPS (TCP 47984)

      -
      -
        -
      • -

        encrypted 🔐 (SSL)

        -
      • -
      • -

        only available to paired clients

        -
      • -
      • -

        used to exchange available apps, encryption keys and trigger the start of a stream

        -
      • -
      -
      -
    • -
    • -

      RTSP (TCP 48010)

      -
      -
        -
      • -

        unencrypted 🔓

        -
      • -
      • -

        Used to exchange ports and settings for the next 3 streams

        -
      • -
      -
      -
    • -
    • -

      Control over ENet (UDP 47999)

      -
      -
        -
      • -

        encrypted 🔐 (using AES GCM 128 bit)

        -
      • -
      • -

        Used to exchange user input data and extra stream information

        -
      • -
      -
      -
    • -
    • -

      Video over RTP (UDP 47998)

      -
      -
        -
      • -

        unencrypted 🔓

        -
      • -
      • -

        Uses H.264 or HEVC to encode video

        -
      • -
      -
      -
    • -
    • -

      Audio over RTP (UDP 48000)

      -
      -
        -
      • -

        encrypted 🔐 (using AES CBC 128 bit)

        -
      • -
      • -

        Uses Opus to encode audio

        -
      • -
      -
      -
    • -
    -
    -
    - - - - - -
    - - -
    -

    The ports specified here are the defaults, apart from HTTP/S all other ports can be dynamically set by the backend and will be correctly picked up by the Moonlight client.

    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/protocols/input-data.html b/wolf/dev-fix-109/protocols/input-data.html deleted file mode 100644 index 36051ba..0000000 --- a/wolf/dev-fix-109/protocols/input-data.html +++ /dev/null @@ -1,1370 +0,0 @@ - - - - - - Input Data :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Input Data

    -
    -
    -
    -

    Moonlight will send all user inputs via the control stream.

    -
    -
    -
    -General format of an `INPUT_DATA` message -
    -
    Figure 1. General format of an INPUT_DATA message
    -
    -
    -

    The first 4 bytes (big endian) following the header of a packet of type -INPUT_DATA indicate the size of the message, which varies depending on the input type. -The next 4 bytes (little endian) specify the input type, which can be any of the values in the following table.

    -
    - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Input type nameValue

    MOUSE_MOVE_REL

    0x00000007

    MOUSE_MOVE_ABS

    0x00000005

    MOUSE_BUTTON_DOWN

    0x00000008

    MOUSE_BUTTON_UP

    0x00000009

    KEY_DOWN

    0x00000003

    KEY_UP

    0x00000004

    MOUSE_SCROLL

    0x0000000A

    MOUSE_HSCROLL

    0x55000001

    TOUCH

    0x55000002

    PEN

    0x55000003

    CONTROLLER_MULTI

    0x0000000C

    CONTROLLER_ARRIVAL

    0x55000004

    CONTROLLER_TOUCH

    0x55000005

    CONTROLLER_MOTION

    0x55000006

    CONTROLLER_BATTERY

    0x55000007

    HAPTICS

    0x0000000D

    UTF8_TEXT

    0x00000017

    -
    -
    -
    -

    Mouse: relative move

    -
    -
    -

    Moonlight will send mouse relative coordinates when the option "Optimize mouse for remote desktop instead of games" is turned OFF.

    -
    -
    -
    -The full format of a `MOUSE_MOVE_REL` packet -
    -
    Figure 2. The full format of a MOUSE_MOVE_REL packet
    -
    -
    -

    Delta X and Delta Y defines the relative movement that the mouse must perform.

    -
    -
    - - - - - -
    - - -Delta X and Delta Y are encoded as big endian. -
    -
    -
    -
    -
    -

    Mouse: absolute move

    -
    -
    -

    Moonlight will send mouse absolute coordinates when the option "Optimize mouse for remote desktop instead of games" is turned ON.

    -
    -
    -
    -The full format of a `MOUSE_MOVE_ABS` packet -
    -
    Figure 3. The full format of a MOUSE_MOVE_ABS packet
    -
    -
    -

    In order to define an absolute position Moonlight will send both:

    -
    -
    -
      -
    • -

      width, height which represent the size of the viewport on the client side

      -
    • -
    • -

      X,Y are the absolute coordinates of the mouse on the client side

      -
    • -
    -
    -
    - - - - - -
    - - -X, Y, width and height are encoded as big endian. -
    -
    -
    -
    -
    -

    Mouse: button

    -
    -
    -
    -The full format of a `MOUSE_BUTTON_DOWN` or `MOUSE_BUTTON_UP` packet -
    -
    Figure 4. The full format of a MOUSE_BUTTON_DOWN or MOUSE_BUTTON_UP packet
    -
    -
    -

    Action can have the following values:

    -
    - ---- - - - - - - - - - - - - - - - - -
    Action dataMeaning

    0x09

    Button released

    0x08

    Button pressed

    -
    -

    Button can have the following values:

    -
    - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Button dataMeaning

    1

    Button left

    2

    Button middle

    3

    Button right

    4

    Button side

    5

    Button extra

    -
    -
    -
    -

    Keyboard

    -
    -
    -
    -The full format of a `KEY_DOWN` or `KEY_UP` packet -
    -
    Figure 5. The full format of a KEY_DOWN or KEY_UP packet
    -
    -
    -

    Action can have the following values:

    -
    - ---- - - - - - - - - - - - - - - - - -
    Action dataMeaning

    0x04

    Button released

    0x03

    Button pressed

    -
    - - - - - -
    - - -
    -

    What’s modifiers?

    -
    -
    -
    -
    -

    Key code represent the corresponding keyboard code of the pressed input, see the following table:

    -
    - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Moonlight codeKeyboard button

    0x08

    BACKSPACE

    0x09

    TAB

    0x0C

    CLEAR

    0x0D

    ENTER

    0x10

    LEFTSHIFT

    0x11

    LEFTCTRL

    0x12

    LEFTALT

    0x13

    PAUSE

    0x14

    CAPSLOCK

    0x15

    KATAKANAHIRAGANA

    0x16

    HANGEUL

    0x17

    HANJA

    0x19

    KATAKANA

    0x1B

    ESC

    0x20

    SPACE

    0x21

    PAGEUP

    0x22

    PAGEDOWN

    0x23

    END

    0x24

    HOME

    0x25

    LEFT

    0x26

    UP

    0x27

    RIGHT

    0x28

    DOWN

    0x29

    SELECT

    0x2A

    PRINT

    0x2C

    SYSRQ

    0x2D

    INSERT

    0x2E

    DELETE

    0x2F

    HELP

    0x30

    0

    0x31

    1

    0x32

    2

    0x33

    3

    0x34

    4

    0x35

    5

    0x36

    6

    0x37

    7

    0x38

    8

    0x39

    9

    0x41

    A

    0x42

    B

    0x43

    C

    0x44

    D

    0x45

    E

    0x46

    F

    0x47

    G

    0x48

    H

    0x49

    I

    0x4A

    J

    0x4B

    K

    0x4C

    L

    0x4D

    M

    0x4E

    N

    0x4F

    O

    0x50

    P

    0x51

    Q

    0x52

    R

    0x53

    S

    0x54

    T

    0x55

    U

    0x56

    V

    0x57

    W

    0x58

    X

    0x59

    Y

    0x5A

    Z

    0x5B

    LEFTMETA

    0x5C

    RIGHTMETA

    0x5F

    SLEEP

    0x60

    NUMPAD 0

    0x61

    NUMPAD 1

    0x62

    NUMPAD 2

    0x63

    NUMPAD 3

    0x64

    NUMPAD 4

    0x65

    NUMPAD 5

    0x66

    NUMPAD 6

    0x67

    NUMPAD 7

    0x68

    NUMPAD 8

    0x69

    NUMPAD 9

    0x6A

    NUMPAD ASTERISK

    x6B

    NUMPAD PLUS

    0x6C

    NUMPAD COMMA

    0x6D

    NUMPAD MINUS

    0x6E

    NUMPAD DOT

    0x6F

    NUMPAD SLASH

    0x70

    F1

    0x71

    F2

    0x72

    F3

    0x73

    F4

    0x74

    F5

    0x75

    F6

    0x76

    F7

    0x77

    F8

    0x78

    F9

    0x79

    F10

    0x7A

    F11

    0x7B

    F12

    0x90

    NUMLOCK

    0x91

    SCROLLLOCK

    0xA0

    LEFTSHIFT

    0xA1

    RIGHTSHIFT

    0xA2

    LEFTCTRL

    0xA3

    RIGHTCTRL

    0xA4

    LEFTALT

    0xA5

    RIGHTALT

    0xBA

    SEMICOLON

    0xBB

    EQUAL

    0xBC

    COMMA

    0xBD

    MINUS

    0xBE

    DOT

    0xBF

    SLASH

    0xC0

    GRAVE

    0xDB

    LEFTBRACE

    0xDC

    BACKSLASH

    0xDD

    RIGHTBRACE

    0xDE

    APOSTROPHE

    0xE2

    102ND

    -
    -
    -
    -

    Mouse scroll

    -
    -
    -
    -The full format of a `MOUSE_SCROLL` packet -
    -
    Figure 6. The full format of a MOUSE_SCROLL packet
    -
    -
    -

    We only use amount 1 to determine the amount of scroll to be applied.

    -
    -
    - - - - - -
    - - -
    -

    What’s amount 2?

    -
    -
    -
    -
    -
    -
    -

    Mouse horizontal scroll

    -
    -
    -
    -The full format of a `MOUSE_HSCROLL` packet -
    -
    Figure 7. The full format of a MOUSE_HSCROLL packet
    -
    -
    -
    -
    -

    Touch

    -
    -
    -

    new in Moonlight 5.0.0

    -
    -
    -
    -
    -

    Pen

    -
    -
    -

    new in Moonlight 5.0.0

    -
    -
    -
    -
    -

    Controller

    -
    -
    -

    Controller arrival

    -
    -

    new in Moonlight 5.0.0

    -
    -
    -

    Sent when a new connector has been plugged, it’ll specify the supported capabilities and the specific type of controller to be emulated.

    -
    -
    -
    -The full format of a `CONTROLLER_ARRIVAL` packet -
    -
    Figure 8. The full format of a CONTROLLER_ARRIVAL packet
    -
    -
    -

    Where controller type can be:

    -
    - ---- - - - - - - - - - - - - - - - - - - - - - - - - -
    Moonlight codeDescription

    Unknown

    0x00

    XBOX

    0x01

    PS

    0x02

    Nintendo

    0x03

    -
    -

    And the capabilities is a bitfield with the followings options:

    -
    - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Moonlight codeDescription

    Analog triggers

    0x01

    Rumble

    0x02

    Trigger Rumble

    0x04

    Touchpad

    0x08

    Accelerometer

    0x10

    Gyro

    0x20

    Battery

    0x40

    RGB LED

    0x80

    -
    -
    -

    Controller multi

    -
    - - - - - -
    - - -Since Moonlight 5.0.0 the format has been slightly changed (without breaking the legacy format) -
    -
    -
    -
    -The legacy format of a `CONTROLLER_MULTI` packet -
    -
    Figure 9. The legacy format of a CONTROLLER_MULTI packet
    -
    -
    -Legacy format -
    -
    -
    -The legacy format of a `CONTROLLER_MULTI` packet -
    -
    Figure 10. The legacy format of a CONTROLLER_MULTI packet
    -
    -
    -
    -
    -

    LT and RT refer to the left and right triggers, respectively. Left X and the following fields refer to the values of the left and right sticks.

    -
    -
    -

    Active mask

    -
    -

    The active mask represent a bitfield with bits set for each controller present. -If you combine this with the ctrl # (controller number) you can detect when a controller has been unplugged.

    -
    -
    - - - - - -
    - - -
    -

    An active mask of 0x0 and a controller number of 0x1 means that the first controller has been unplugged.

    -
    -
    -
    -
    -
    -

    Button flags

    -
    -

    The buttons element encodes the currently pressed buttons in the joypad.

    -
    -
    -

    In order to get the new added buttons you have to combine btn flags and btn flags 2 so that

    -
    -
    -
    -
    (button_flags | (button_flags2 << 16))
    -
    -
    - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Button typeFlag (HEX)

    DPAD_UP

    0x0001

    DPAD_DOWN

    0x0002

    DPAD_LEFT

    0x0004

    DPAD_RIGHT

    0x0008

    START

    0x0010

    BACK

    0x0020

    HOME

    0x0400

    LEFT_STICK

    0x0040

    RIGHT_STICK

    0x0080

    LEFT_BUTTON

    0x0100

    RIGHT_BUTTON

    0x0200

    A

    0x1000

    B

    0x2000

    X

    0x4000

    Y

    0x8000

    SPECIAL_FLAG

    0x0400

    PADDLE 1

    0x010000

    PADDLE 2

    0x020000

    PADDLE 3

    0x040000

    PADDLE 4

    0x080000

    Touchpad

    0x100000

    MISC

    0x200000

    -
    -

    If more than one button is being pressed at the same time button_flag will contain the sum of both values.

    -
    -
    -
    -When pressing  kbd:[A] and  kbd:[X] `button_flag` contains `0x0050` that `5` decodes as follows: -
    -
    Figure 11. When pressing A and X button_flag contains 0x0050 that 5 decodes as follows:
    -
    -
    -
    -The full format of the `button_flag` binary encoding -
    -
    Figure 12. The full format of the button_flag binary encoding
    -
    -
    -
    -
    -

    Controller Touch

    -
    -

    new in Moonlight 5.0.0

    -
    -
    -
    -

    Controller Motion

    -
    -

    new in Moonlight 5.0.0

    -
    -
    -
    -

    Controller Battery

    -
    -

    new in Moonlight 5.0.0

    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/protocols/rtp-opus.html b/wolf/dev-fix-109/protocols/rtp-opus.html deleted file mode 100644 index 2ae356c..0000000 --- a/wolf/dev-fix-109/protocols/rtp-opus.html +++ /dev/null @@ -1,342 +0,0 @@ - - - - - - Audio stream via RTP :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Audio stream via RTP

    -
    -

    Overview

    -
    -
    -

    Audio is encoded using Opus, encrypted using AES CBC 128 bit and sent via RTP.

    -
    -
    -

    Every 4 RTP packets with audio content will be followed by 2 extra RTP packets with FEC parity information.

    -
    -
    -
    -
    -

    PING

    -
    -
    - - - - - -
    - - -
    -

    The port exchanged during the RTSP phase it’s not where the actual audio stream will take place!

    -
    -
    -
    -
    -

    Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. -The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to.

    -
    -
    -

    This is necessary because usually clients will be behind NAT.

    -
    -
    -
    -
    -

    RTP packets

    -
    -
    -

    The first 12 bytes of each packet are defined as follows:

    -
    -
    -
    -RTP header format in bits -
    -
    Figure 1. RTP header format in bits
    -
    -
    -

    FEC packets will also add the followings 12 bytes after the RTP header and before the FEC actual information:

    -
    -
    -
    -FEC additional header format in bits -
    -
    Figure 2. FEC additional header format in bits
    -
    -
    -
    -
    -

    Opus encoder

    -
    -
    -

    All parameters for properly encoding using Opus are exchanged via the RTSP phase.

    -
    -
    -

    In order to debug what’s exchanged it might be useful to checkout the RFC 6716 #section-3.1 which defines the Opus packet formats; from the specs:

    -
    -
    -
    -
    -

    A well-formed Opus packet MUST contain at least one byte [R1]. -This byte forms a table-of-contents (TOC) header that signals which of the various modes and configurations a given packet uses. -It is composed of a configuration number, "config", a stereo flag, "s", and a frame count code, "c"

    -
    -
    -
    -
    -
    -The first byte of any Opus packet -
    -
    Figure 3. The first byte of any Opus packet
    -
    -
    -
    -
    -

    AES encryption

    -
    -
    -

    Encoded audio packets will be AES encrypted before being sent over the wire, key and IV are exchanged via HTTPS when calling the launch endpoint. -These are the same key and IV used to also encrypt the Control stream.

    -
    -
    -
    -
    -

    Forward Error Correction (FEC)

    -
    -
    -

    Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them).

    -
    -
    -

    This operation will create extra parity blocks that will be sent in separate RTP packets.

    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/protocols/rtp-video.html b/wolf/dev-fix-109/protocols/rtp-video.html deleted file mode 100644 index 76b1e8a..0000000 --- a/wolf/dev-fix-109/protocols/rtp-video.html +++ /dev/null @@ -1,632 +0,0 @@ - - - - - - Video stream via RTP :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Video stream via RTP

    -
    -

    Overview

    -
    -
    -

    Here are a few random notes about the low level details of the video streaming protocol in Moonlight.

    -
    -
    -
    -
    -

    PING

    -
    -
    - - - - - -
    - - -
    -

    The port exchanged during the RTSP phase it’s not where the actual video stream will take place!

    -
    -
    -
    -
    -

    Moonlight will send a PING package to the exchanged port, this will tell us which random port the connecting client was able to open in order to communicate with Wolf. -The client port from where Wolf receives the PING will also be the one where the actual RTP stream will be sent to.

    -
    -
    -

    This is necessary because usually clients will be behind NAT.

    -
    -
    -
    -
    -

    RTP packets

    -
    -
    -

    The video binary NAL unit (see below) will be separated in chunks of packetSize (default: 1024, exchanged during RTSP) + RTP_HEADER_SIZE (16 byte).

    -
    -
    -

    The first 32 bytes of each packet are defined as follows:

    -
    -
    -
    -RTP header format in bits -
    -
    Figure 1. RTP header format in bits
    -
    -
    -
    -NV Video header format in bits -
    -
    Figure 2. NV Video header format in bits
    -
    -
    -

    The very first packet of the sequence will also contain the hardcoded 017charss string before the actual video payload

    -
    -
    - - - - - -
    - - -
    -

    What does this content mean?

    -
    -
    -
    -
    -
    -Video payload starts after the 8 hardcoded bytes `017charss` (hex: 0137636861727373) -
    -
    Figure 3. Video payload starts after the 8 hardcoded bytes 017charss (hex: 0137636861727373)
    -
    -
    -

    NV Video flags

    - ----- - - - - - - - - - - - - - - - - - - - - - - - - -
    Contentvalue (decimal)value (binary)

    Contains Picture data

    1

    00000001

    EOF (End of File)

    2

    00000010

    SOF (Start of File)

    4

    00000100

    -
    -

    They’ll be summed together, for example: 5 means Picture data AND Start of File.

    -
    -
    -
    -
    -
    -

    Forward Error Correction (FEC)

    -
    -
    -

    Uses Reed Solomon to encode the payload so that it can be checked on the receiving end for transmission errors (and possibly fix them).

    -
    -
    -

    This operation will create extra parity blocks that will be sent in separate RTP packets. -The size of this can be set by changing the fecpercentage param.

    -
    -
    - - - - - -
    - - -
    -

    With a video payload of 4KB, a packetSize of 1024 and a fecpercentage of 50%:

    -
    -
    -
      -
    • -

      4 RTP packets will contain the video data

      -
    • -
    • -

      2 extra RTP packets will be sent with the FEC parity information

      -
    • -
    -
    -
    -

    The total overhead of sending 4KB of video will be:
    -headers * packets + FEC = 32 * 6 + 2048 = 2248 bytes

    -
    -
    -
    -
    -

    This extra packets can be easily identified since the NV Video flag will always be 0.

    -
    -
    -
    -
    -

    H.264 binary format

    -
    -
    -

    Read more at stackoverflow.com and yumichan.net.

    -
    -
    -

    The video stream is separated in NAL (Network Abstraction Layer) units. -Each of this unit starts with a three-byte or four-byte start code 0x000001 or 0x00000001

    -
    -
    -
    A complete H.264 example stream composed of 3 NALU
    -
    -
    0x0000 | 00 00 00 01 67 64 00 0A AC 72 84 44 26 84 00 00
    -0x0010 | 03 00 04 00 00 03 00 CA 3C 48 96 11 80 00 00 00
    -0x0020 | 01 68 E8 43 8F 13 21 30 00 00 01 65 88 81 00 05
    -0x0030 | 4E 7F 87 DF 61 A5 8B 95 EE A4 E9 38 B7 6A 30 6A
    -0x0040 | 71 B9 55 60 0B 76 2E B5 0E E4 80 59 27 B8 67 A9
    -0x0050 | 63 37 5E 82 20 55 FB E4 6A E9 37 35 72 E2 22 91
    -0x0060 | 9E 4D FF 60 86 CE 7E 42 B7 95 CE 2A E1 26 BE 87
    -0x0070 | 73 84 26 BA 16 36 F4 E6 9F 17 DA D8 64 75 54 B1
    -0x0080 | F3 45 0C 0B 3C 74 B3 9D BC EB 53 73 87 C3 0E 62
    -0x0090 | 47 48 62 CA 59 EB 86 3F 3A FA 86 B5 BF A8 6D 06
    -0x00A0 | 16 50 82 C4 CE 62 9E 4E E6 4C C7 30 3E DE A1 0B
    -0x00B0 | D8 83 0B B6 B8 28 BC A9 EB 77 43 FC 7A 17 94 85
    -0x00C0 | 21 CA 37 6B 30 95 B5 46 77 30 60 B7 12 D6 8C C5
    -0x00D0 | 54 85 29 D8 69 A9 6F 12 4E 71 DF E3 E2 B1 6B 6B
    -0x00E0 | BF 9F FB 2E 57 30 A9 69 76 C4 46 A2 DF FA 91 D9
    -0x00F0 | 50 74 55 1D 49 04 5A 1C D6 86 68 7C B6 61 48 6C
    -0x0100 | 96 E6 12 4C 27 AD BA C7 51 99 8E D0 F0 ED 8E F6
    -0x0110 | 65 79 79 A6 12 A1 95 DB C8 AE E3 B6 35 E6 8D BC
    -0x0120 | 48 A3 7F AF 4A 28 8A 53 E2 7E 68 08 9F 67 77 98
    -0x0130 | 52 DB 50 84 D6 5E 25 E1 4A 99 58 34 C7 11 D6 43
    -0x0140 | FF C4 FD 9A 44 16 D1 B2 FB 02 DB A1 89 69 34 C2
    -0x0150 | 32 55 98 F9 9B B2 31 3F 49 59 0C 06 8C DB A5 B2
    -0x0160 | 9D 7E 12 2F D0 87 94 44 E4 0A 76 EF 99 2D 91 18
    -0x0170 | 39 50 3B 29 3B F5 2C 97 73 48 91 83 B0 A6 F3 4B
    -0x0180 | 70 2F 1C 8F 3B 78 23 C6 AA 86 46 43 1D D7 2A 23
    -0x0190 | 5E 2C D9 48 0A F5 F5 2C D1 FB 3F F0 4B 78 37 E9
    -0x01A0 | 45 DD 72 CF 80 35 C3 95 07 F3 D9 06 E5 4A 58 76
    -0x01B0 | 03 6C 81 20 62 45 65 44 73 BC FE C1 9F 31 E5 DB
    -0x01C0 | 89 5C 6B 79 D8 68 90 D7 26 A8 A1 88 86 81 DC 9A
    -0x01D0 | 4F 40 A5 23 C7 DE BE 6F 76 AB 79 16 51 21 67 83
    -0x01E0 | 2E F3 D6 27 1A 42 C2 94 D1 5D 6C DB 4A 7A E2 CB
    -0x01F0 | 0B B0 68 0B BE 19 59 00 50 FC C0 BD 9D F5 F5 F8
    -0x0200 | A8 17 19 D6 B3 E9 74 BA 50 E5 2C 45 7B F9 93 EA
    -0x0210 | 5A F9 A9 30 B1 6F 5B 36 24 1E 8D 55 57 F4 CC 67
    -0x0220 | B2 65 6A A9 36 26 D0 06 B8 E2 E3 73 8B D1 C0 1C
    -0x0230 | 52 15 CA B5 AC 60 3E 36 42 F1 2C BD 99 77 AB A8
    -0x0240 | A9 A4 8E 9C 8B 84 DE 73 F0 91 29 97 AE DB AF D6
    -0x0250 | F8 5E 9B 86 B3 B3 03 B3 AC 75 6F A6 11 69 2F 3D
    -0x0260 | 3A CE FA 53 86 60 95 6C BB C5 4E F3
    -
    -
    -
    -

    This is a complete H.264 stream. -If you type these values into a hex editor and save the file with a .264 extension, you will be able to convert it to this image:

    -
    -
    -
    -The decoded H.264 stream above -
    -
    -
    -

    NAL Unit Header

    -
    -

    The first byte after the start code it’s called NAL Unit Header and indicates the type of data contained in it and other information.
    -In the example above the first header byte is 0x67, le’ts see what that means:

    -
    -
    -
    -`0x67` in hex is `01100111` in binary -
    -
    Figure 4. 0x67 in hex is 01100111 in binary
    -
    - ----- - - - - - - - - - - - - - - - - - - - - - - - - -
    ElementSize in bitsDescription

    Forbidden zero

    1

    Used to check whether there is any error occurred during the transmission.
    -The H.264 specification declares a value of 1 as a syntax violation.

    nal_ref_idc

    2

    Current frame priority

    nal_unit_type

    5

    This component specifies the NAL unit payload type

    -
    -

    nal_ref_idc

    -
    -

    Just by looking at this two bits you can already understand what type of information will be encoded:

    -
    - ---- - - - - - - - - - - - - - - - - - - - - - - - - -
    Start Code Typenal_ref_idc (in binary)

    I-frame or header data

    11

    P-frame

    10

    B-frame

    01

    other data

    00

    -
    -

    Read the full table here.

    -
    -
    -
    -

    nal_unit_type

    -
    -

    The 5 remaining bits will uniquely identify which exact type of NAL unit we are looking at, here are the most common:

    -
    - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Unit typenal_unit_type (binary)nal_unit_type (decimal)

    Coded slice of a non-IDR picture

    00001

    1

    Coded slice of an IDR picture

    00101

    5

    Supplemental enhancement information (SEI)

    00110

    6

    Sequence parameter set (SPS)

    00111

    7

    Picture parameter set (PPS)

    01000

    8

    Access unit delimiter

    01001

    9

    -
    -

    Full table here.

    -
    -
    -
    -
    -

    Examples

    -
    -

    Looking back at the example above we can now identify the following 3 NALU:

    -
    -
    -
    -A SPS NALU -
    -
    Figure 5. A SPS NALU
    -
    -
    -
    -A PPS NALU -
    -
    Figure 6. A PPS NALU
    -
    -
    -
    -A IDR frame NALU -
    -
    Figure 7. A IDR frame NALU
    -
    -
    -
    -
    -
    -

    IDR Requests

    -
    -
    -

    During the stream the client is actively asking for IDR frames via the Control UDP stream (see: Control specifications).

    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/protocols/rtsp.html b/wolf/dev-fix-109/protocols/rtsp.html deleted file mode 100644 index 12f5539..0000000 --- a/wolf/dev-fix-109/protocols/rtsp.html +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - RTSP :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    RTSP

    -
    -

    Overview

    -
    -
    -

    The RTSP protocol starts when a Moonlight user launch an app, and it’s used to exchange information about the next streams (video, audio, control).

    -
    -
    -
    -Diagram -
    -
    -
    -
    -
    -

    RTSP specifications

    -
    -
    -

    RTSP messages are plaintext packets of variable size over TCP.

    -
    -
    -

    Parsing of RTSP messages has been implemented using a formal PEG (Parsing Expression Grammars) definition; you can find it in parser.hpp.

    -
    -
    -

    There are two types of message: request and response

    -
    -
    -

    Request message

    -
    -

    All messages have the following structure:

    -
    -
    -
      -
    • -

      message: required

      -
    • -
    • -

      options: optional, zero or more key value options separated by newline

      -
    • -
    • -

      payload: optional, extra unstructured data that needs to be passed.

      -
    • -
    -
    -
    -
    An example request message
    -
    -
    OPTIONS rtsp://192.168.1.100:48010 RTSP/1.0 (1)
    -CSeq:  1 (2)
    -X-GS-ClientVersion: 14 (3)
    -(4)
    -a=fmtp:97 surround-params=21101 (5)
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - -
    1message:
    2option 1
    3option 2
    4empty new line (end of options)
    5payload
    -
    -
    -

    Message

    -
    -

    The message part is the first line, it’s delimited by the newline character (\r\n) , and it’s composed by:

    -
    -
    -
      -
    • -

      command: the first string, delimited by <space>, the command to be executed on the backend; one of: [OPTIONS, DESCRIBE, SETUP, ANNOUNCE, PLAY]

      -
    • -
    • -

      target: the second string, delimited by <space>, specifies the ip address and port that is the target of the session.

      -
    • -
    • -

      protocol: last string, delimited by <space>, the RTSP protocol in use.

      -
    • -
    -
    -
    -
    -

    Options

    -
    -

    Optional additional key values to be passed, delimited by the newline character (\r\n). -The end of the options section is marked by an extra newline character (\r\n).

    -
    -
    -

    Honorable mention goes to CSeq which is always present and represent the sequence number.

    -
    -
    -
    -

    Payload

    -
    -

    Any extra unstructured text that it’s added after the end of the options before the end of the message will be parsed as the payload.

    -
    -
    -
    -
    -

    Response message

    -
    -

    Like requests, responses have a message, zero or more options and an optional payload. -The main difference is in the format of the message.

    -
    -
    -

    You can easily identify a response package by looking at the command part which is always RTSP.

    -
    -
    -
    An example response message
    -
    -
    RTSP/1.0 200 OK (1)
    -CSeq: 1 (2)
    -
    -a=fmtp:97 surround-params=21101 (3)
    -
    -
    -
    - - - - - - - - - - - - - -
    1message
    2option
    3payload
    -
    -
    -

    Message

    -
    -

    Unlike requests a message in a response is composed by different parts:

    -
    -
    -
      -
    • -

      protocol: it’s always RTSP/* and it’s the easiest way to discriminate between request and response messages.

      -
    • -
    • -

      status code: follows the HTTP status codes specification

      -
    • -
    • -

      status string: follows the HTTP status codes specification

      -
    • -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/user/configuration.html b/wolf/dev-fix-109/user/configuration.html deleted file mode 100644 index 39e5cd1..0000000 --- a/wolf/dev-fix-109/user/configuration.html +++ /dev/null @@ -1,814 +0,0 @@ - - - - - - Configuration :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Configuration

    -
    -
    -
    -

    Wolf is configured via a TOML config file and some additional optional ENV variables

    -
    -
    -
    -
    -

    ENV variables

    -
    - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    VariableDefaultDescription

    WOLF_LOG_LEVEL

    INFO

    The log level to show, one of ERROR, WARNING, INFO, DEBUG, TRACE

    WOLF_CFG_FILE

    /etc/wolf/cfg/config.toml

    Full path to the config file

    WOLF_PRIVATE_KEY_FILE

    /etc/wolf/cfg/key.pem

    Full path to the key.pem file

    WOLF_PRIVATE_CERT_FILE

    /etc/wolf/cfg/cert.pem

    Full path to the cert.pem file

    XDG_RUNTIME_DIR

    /tmp/sockets

    The full path where PulseAudio and video sockets will reside, this path is expected to be present in the host and mounted in the Wolf container

    WOLF_PULSE_IMAGE

    ghcr.io/games-on-whales/pulseaudio:master

    The name of the PulseAudio image to be started (when no connection is available)

    WOLF_STOP_CONTAINER_ON_EXIT

    TRUE

    Set to False in order to avoid force stop and removal of containers when the connection is closed

    WOLF_DOCKER_SOCKET

    /var/run/docker.sock

    The full path to the docker socket, doesn’t support tcp (yet)

    NVIDIA_DRIVER_VOLUME_NAME

    nvidia-driver-vol

    The name of the externally created Docker Volume that holds the Nvidia drivers

    HOST_APPS_STATE_FOLDER

    /etc/wolf

    The base folder in the host where the running apps will store permanent state

    WOLF_RENDER_NODE

    /dev/dri/renderD128

    The default render node used for virtual desktops; see: Multiple GPUs

    WOLF_ENCODER_NODE

    $WOLF_RENDER_NODE

    The default render node used for the Gstreamer pipelines; see: Multiple GPUs

    WOLF_DOCKER_FAKE_UDEV_PATH

    $HOST_APPS_STATE_FOLDER/fake-udev

    The path on the host for the fake-udev CLI tool

    -
    -

    Additional env variables useful when debugging:

    -
    - ----- - - - - - - - - - - - - - - - - - - - -
    VariableDefaultDescription

    RUST_BACKTRACE

    full

    In case an exception is thrown in the Rust code, this sets the backtrace level

    GST_DEBUG

    2

    Gstreamer debug print, see debugging-tools

    -
    -
    -
    -

    Where apps will store permanent data?

    -
    -
    -

    Since Wolf supports multiple streaming sessions at the same time and each session can run a different app, we need to make sure that each app has its own folder where it can store permanent data.
    -To achieve this, for each running app, Wolf will create a folder structure like this:

    -
    -
    -
    -
    ${HOST_APPS_STATE_FOLDER}/${app_state_folder}/${app_title}
    -
    -
    -
    -

    and then mount that as the home (/home/retro) for the docker container that will run the selected app.

    -
    -
    -

    These 3 variables are defined as follows:

    -
    -
    -
      -
    • -

      HOST_APPS_STATE_FOLDER: defaults to /etc/wolf, can be changed via ENV

      -
    • -
    • -

      app_state_folder: defaults to a unique identifier for each client so that every Moonlight session will have its own folder. -Can be changed in the config.toml file

      -
    • -
    • -

      app_title: the title of the app as defined in the config.toml file

      -
    • -
    -
    -
    -

    Share home folder with multiple clients

    -
    - - - - - -
    - - -
    -

    This will break isolation, if you want to connect with multiple clients at the same time you should not share the home folder. -You can follow development of that feature here

    -
    -
    -
    -
    -

    By default, Wolf will create a new home folder for each client, but if you want to share the same home folder with multiple clients, you can set the app_state_folder to the same value for each paired client; example:

    -
    -
    -
    -
    [[paired_clients]]
    -app_state_folder = "common"               # <-- !!!
    -
    -[[paired_clients]]
    -app_state_folder = "common"               # <-- !!!
    -
    -
    -
    -

    This way, when running any app from those two clients, they will share the same home folder by mounting ${HOST_APPS_STATE_FOLDER}/common/${app_title} as /home/retro in the docker container.

    -
    -
    -
    -

    Change the HOST_APPS_STATE_FOLDER

    -
    -

    Changing this folder via ENV variable is not enough; Wolf expects to be able to access files under this folder, so you need to make sure that the new folder is created and mounted in the Wolf container.

    -
    -
    -

    For example, if you want to change the HOST_APPS_STATE_FOLDER to /mnt/drive/wolf you need to change the docker run command with:

    -
    -
    -
      -
    • -

      -e HOST_APPS_STATE_FOLDER=/mnt/drive/wolf

      -
    • -
    • -

      -v /mnt/drive/wolf:/mnt/drive/wolf:rw

      -
    • -
    -
    -
    -
    -
    -
    -

    TOML file

    -
    -
    -

    The TOML configuration file is read only once at startup (or created if not present) and it’ll be modified by Wolf only when a new user is successfully paired.

    -
    -
    -
    Default TOML configuration file
    -
    -
    hostname = "wolf"   (1)
    -support_hevc = true (2)
    -config_version = 2 (3)
    -uuid = "0f75f4d1-e28e-410a-b318-c0579f18f8d1" (4)
    -
    -paired_clients = [] (5)
    -apps = [] (6)
    -gstreamer = {} (7)
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    1hostname: this is the name that will be displayed in the list of hosts in the Moonlight UI
    2support_hevc: when set to false will disable support for HEVC in Moonlight
    3config_version: The version of this config file
    4uuid: a randomly generated UUID, it’s used by Moonlight to know if the current host has already been paired
    5paired_clients: a list of all the Moonlight clients that have succesfully completed the pairing process; it’ll be populated by Wolf and saved to this file.
    6apps: a list of apps, see: Defining apps
    7gstreamer audio/video pipeline definitions, see Gstreamer
    -
    -
    -

    Defining apps

    -
    -

    Apps defined here will be shown in Moonlight after successfully pairing with Wolf.
    -You can re-define parts of the Gstreamer pipeline easily, ex:

    -
    -
    -
    -
    [[apps]]
    -title = "Test ball" (1)
    -start_virtual_compositor = false (2)
    -app_state_folder = "some/folder" (3)
    -
    -[apps.runner] (4)
    -type = "process"
    -run_cmd = "sh -c \"while :; do echo 'running...'; sleep 10; done\""
    -
    -[apps.video] (5)
    -source = """
    -videotestsrc pattern=ball flip=true is-live=true !
    -video/x-raw, framerate={fps}/1
    -\
    -"""
    -
    -[apps.audio] (6)
    -source = "audiotestsrc wave=ticks is-live=true"
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    1title: this is the name that will be displayed in Moonlight
    2start_virtual_compositor: set to True if this app needs our custom virtual compositor (TODO: document this better)
    3app_state_folder: the folder where the app will store permanent data, see: Where apps will store permanent data?
    4runner: the type of process to run in order to start this app, see: App Runner
    5video: here it’s possible to override the default video pipeline variables defined in: Gstreamer
    6audio: here it’s possible to override the default audio pipeline variables defined in: Gstreamer
    -
    -
    -

    See more examples in the Gstreamer page.

    -
    -
    -
    -

    Override the default joypad mapping

    -
    -

    By default, Wolf will try to match the joypad type that Moonlight sends with the correct mapping. -It is possible to override this behaviour by setting the joypad_mapping property in the apps entry; example:

    -
    -
    -
    -
    [[apps]]
    -title = "Test ball"
    -joypad_type = "xbox" # Force the joypad to always be xbox
    -
    -
    -
    -

    The available joypad types are:

    -
    -
    -
      -
    • -

      auto (default)

      -
    • -
    • -

      xbox

      -
    • -
    • -

      nintendo

      -
    • -
    • -

      ps

      -
    • -
    -
    -
    -

    App Runner

    -
    -

    There are currently two types of runner supported: docker and process

    -
    -
    -
    -

    Process

    -
    -

    Example:

    -
    -
    -
    -
    [apps.runner]
    -type = "process"
    -run_cmd = "sh -c \"while :; do echo 'running...'; sleep 10; done\""
    -
    -
    -
    -
    -

    Docker

    -
    -

    Example:

    -
    -
    -
    -
    type = "docker"
    -name = "WolfSteam"
    -image = "ghcr.io/games-on-whales/steam:edge"
    -mounts = [
    -  "/run/udev:/run/udev:ro"
    -]
    -env = [
    -  "PROTON_LOG=1",
    -  "RUN_SWAY=true",
    -  "ENABLE_VKBASALT=1"
    -]
    -devices = []
    -ports = []
    -base_create_json = """ (1)
    -{
    -  "HostConfig": {
    -    "IpcMode": "host",
    -    "CapAdd": ["SYS_ADMIN", "SYS_NICE"],
    -    "Privileged": false
    -  }
    -}
    -\
    -"""
    -
    -
    -
    - - - - - -
    1base_create_json: here you can re-define any property that’s defined in the docker API JSON format, see: docs.docker.com/engine/api/v1.40
    -
    -
    -
    -
    -

    Gstreamer

    -
    -

    In here we define the default pipeline for both video and audio streaming to Moonlight.
    -In order to automatically pick up the right encoder at runtime based on the user HW we run in order the list of encoders at gstreamer.video.hevc_encoders (and gstreamer.video.h264_encoders); the first set of plugins that can be correctly initialised by Gstreamer will be the selected encoder for all the pipelines.

    -
    -
    -

    You can read more about gstreamer and custom pipelines in the Gstreamer page.

    -
    -
    -
    -
    -
    -

    Multiple GPUs

    -
    -
    -

    When you have multiple GPUs installed in your host, you might want to have better control over which one is used by Wolf and how.
    -There are two main separated parts that make use of HW acceleration in Wolf:

    -
    -
    -
      -
    • -

      App render node: this will use HW acceleration in order to create virtual Wayland desktops and run the chosen app (ex: Firefox, Steam, …​). -Use the WOLF_RENDER_NODE (defaults to /dev/dri/renderD128) env variable to control this.

      -
    • -
    • -

      Gstreamer video encoding: this will use HW acceleration in order to efficiently encode the video stream with H.264 or HEVC. -Use the WOLF_ENCODER_NODE (defaults to WOLF_RENDER_NODE) env variable to control this.

      -
    • -
    -
    -
    -

    They can be configured separately, and in theory you could even use two GPUs at the same time for different jobs; ex: use the integrated GPU just for the streaming part and use a powerful GPU to play apps/games.

    -
    -
    - - - - - -
    - - -
    -

    This isn’t recommended, it might introduce additional latency and it’s not optimal. -HW encoding on modern GPUs is very lightweight and it’s better to use the same GPU for both jobs.

    -
    -
    -
    -
    -

    App render node

    -
    -

    Each application that Wolf will start will have access only to a specific render node even if the host has multiple GPUs connected.
    -By default, Wolf will use the env variable WOLF_RENDER_NODE which defaults to /dev/dri/renderD128

    -
    -
    - - - - - -
    - - -
    -

    If you don’t know which render node is associated with which GPU you can use the following command:

    -
    -
    -
    -
    ls -l /sys/class/drm/renderD*/device/driver
    -/sys/class/drm/renderD128/device/driver -> ../../../../bus/virtio/drivers/virtio_gpu (1)
    -/sys/class/drm/renderD129/device/driver -> ../../../../bus/pci/drivers/nvidia (2)
    -
    -
    -
    - - - - - - - - - -
    1This line will tell you that renderD128 is a virtual GPU
    2This line will tell you that renderD129 is a Nvidia GPU
    -
    -
    -
    -
    -

    Wolf supports also overriding the render node in each single app defined in the config.toml config file by setting the render_node property; example:

    -
    -
    -
    -
    [apps.runner]
    -type = "docker"
    -name = "WolfSteam"
    -image = "ghcr.io/games-on-whales/steam:edge"
    -
    -# More options here, removed for brevity...
    -render_node = "/dev/dri/renderD129"
    -
    -
    -
    -
    -

    Gstreamer video encoding

    -
    -

    The easy way to control this is to just edit the env variable WOLF_ENCODER_NODE (defaults to match WOLF_RENDER_NODE in order to use the same GPU for both), this will set the default render node used for the Gstreamer pipelines.

    -
    -
    -

    The streaming video encoding pipeline is fully controlled by the config.toml file; here the order in which entries are listed is important because Wolf will just try each listed plugin; the first one that works is the one that will be used.

    -
    -
    - - - - - -
    - - -
    -

    If you have an Intel iGPU and a Nvidia card in the same host, and you would like to use QuickSync in order to do the encoding, you can either:

    -
    -
    -
      -
    • -

      Delete the nvcodec entries under gstreamer.video.hevc_encoders

      -
    • -
    • -

      Cut the qsv entry and paste it above the nvcodec entry

      -
    • -
    -
    -
    -
    -
    -

    On top of that, each single apps entry support overriding the default streaming pipeline; for example:

    -
    -
    -
    -
    [[apps]]
    -title = "Test ball"
    -
    -# More options here, removed for brevity...
    -
    -[apps.video]
    -source = """
    -videotestsrc pattern=ball flip=true is-live=true !
    -video/x-raw, framerate={fps}/1
    -\
    -"""
    -
    -
    -
    -

    In case you have two GPUs that will use the same encoder pipeline (example: an AMD iGPU and an AMD GPU card) you can override the video_params with the corresponding encoder plugin; see: -gstreamer/issues/1167.

    -
    -
    -
    -
    -
    -

    Directly launch a Steam game

    -
    -
    -

    This has been moved to the Steam page.

    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/user/gstreamer.html b/wolf/dev-fix-109/user/gstreamer.html deleted file mode 100644 index dc3c93c..0000000 --- a/wolf/dev-fix-109/user/gstreamer.html +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - Gstreamer :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Gstreamer

    -
    -

    CLI interface

    -
    -
    -

    To list the installed plugins use:

    -
    -
    -
    -
    gst-inspect-1.0
    -
    -
    -
    -

    To analyse some media use:

    -
    -
    -
    -
    gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4
    -
    -
    -
    -

    To test out pipelines in your system use:

    -
    -
    -
    -
    gst-launch-1.0 videotestsrc ! autovideosink
    -
    -
    -
    -
    -
    -

    Example pipelines

    -
    -
    -

    See more examples at: matthew1000/gstreamer-cheat-sheet

    -
    -
    -

    Stream your desktop

    -
    -
    -
    [[apps]]
    -title = "Desktop"
    -[apps.video]
    -source = "avfvideosrc capture-screen-cursor=true capture-screen=true"
    -
    -
    -
    -

    This works in OSX, for X11 you can use ximagesrc or on Wayland you can try: pipewiresrc

    -
    -
    -
    -

    Play some audio

    -
    -

    Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline:

    -
    -
    -
    -
    [[apps]]
    -title = "Music"
    -# Audio sample downloaded from https://www.bensound.com/free-music-for-videos
    -# try also: spacescope style=color-lines
    -[apps.video]
    -source = """
    -filesrc location=/Users/ale/Downloads/elevate.mp3 !
    -tee name=t
    -! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000
    -t. ! decodebin ! audioconvert ! wavescope style=color-lines
    -"""
    -# Get the audio info using:
    -# gst-discoverer-1.0 -v elevate.mp3
    -[apps.audio]
    -source = """
    -shmsrc socket-path=/tmp/pipe.sock do-timestamp=true  !
    - audio/mpeg, mpegversion=(int)1, mpegaudioversion=(int)1, layer=(int)3, rate=(int)44100, channels=(int)2 !
    - decodebin
    -"""
    -
    -
    -
    -
    -

    Stream a remote video

    -
    -

    Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline:

    -
    -
    -
    -
    [[apps]]
    -title = "BigBuckBunny (MP4 - remote)"
    -[apps.video]
    -# taken from https://gist.github.com/jsturgis/3b19447b304616f18657
    -source = """
    -curlhttpsrc location="https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" !
    -qtdemux name=demux
    -demux.audio_0 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000
    -demux.video_0 ! decodebin
    -\
    -"""
    -# Get the audio info using:
    -# gst-discoverer-1.0 -v https://storage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4
    -[apps.audio]
    -source = """
    -shmsrc socket-path=/tmp/pipe.sock do-timestamp=true !
    - audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1210, rate=(int)44100, channels=(int)2 !
    - decodebin
    -"""
    -
    -
    -
    -
    -

    Stream from Twitch

    -
    -

    Here the trick is to use shmsink and shmsrc in order to share the raw audio between the video and audio pipeline:

    -
    -
    -
    -
    [[apps]]
    -title = "Twitch.tv"
    -[apps.video]
    -# location is the result of
    -# youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950
    -source = """
    -curlhttpsrc location="https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8" !
    -hlsdemux !
    -tsdemux name=demux
    -demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000
    -demux.video_0_0101 ! queue ! decodebin
    -\
    -"""
    -# Get the audio info using:
    -# gst-discoverer-1.0 -v https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8
    -[apps.audio]
    -source = """
    -shmsrc socket-path=/tmp/pipe.sock do-timestamp=true !
    -audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts !
    -decodebin
    -"""
    -
    -
    -
    -
    -

    Picture in picture

    -
    -

    The element compositor allows video to be mixed (overlayed, put side-by-side, etc).

    -
    -
    -
    -
    [[apps]]
    -title = "PIP: Desktop + Twitch"
    -[apps.video]
    -# location is the result of
    -# youtube-dl --format mp4 --get-url https://www.twitch.tv/videos/560738950
    -source = """
    -curlhttpsrc location="https://dqrpb9wgowsf5.cloudfront.net/49e35d90a96078583c9c_andrewfoxtv_34248972186_2596839032/chunked/highlight-560738950.m3u8" !
    -hlsdemux !
    -tsdemux name=demux
    -demux.audio_0_0100 ! queue ! shmsink socket-path=/tmp/pipe.sock shm-size=10000000
    -demux.video_0_0101 ! queue !
    -decodebin !
    -videoscale !
    -videorate !
    -video/x-raw, width=(int)640, height=(int)360, framerate={fps}/1 !
    -compositor name=comp sink_0::alpha=1.0 sink_0::zorder=2 sink_0::xpos=1280 sink_1::alpha=1.0 sink_1::zorder=1 !
    -avfvideosrc capture-screen-cursor=true capture-screen=true
    -\
    -"""
    -
    -video_params = """
    -videoscale !
    -videoconvert !
    -videorate !
    -video/x-raw, width={width}, height={height}, framerate={fps}/1, format=I420, chroma-site={color_range}, colorimetry={color_space} !
    -comp.
    -comp.
    -\
    -"""
    -
    -[apps.audio]
    -source = """
    -shmsrc socket-path=/tmp/pipe.sock do-timestamp=true !
    -audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts !
    -decodebin
    -"""
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/user/quickstart.html b/wolf/dev-fix-109/user/quickstart.html deleted file mode 100644 index 245131c..0000000 --- a/wolf/dev-fix-109/user/quickstart.html +++ /dev/null @@ -1,781 +0,0 @@ - - - - - - Quickstart :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Quickstart

    -
    -
    -
    -

    Wolf runs as a single container, it’ll spin up and down additional containers on-demand.

    -
    -
    -
    -
    -

    Docker

    -
    -
    -
    -
    -
      -
    • -

      Intel/AMD

      -
    • -
    • -

      Nvidia (Container Toolkit)

      -
    • -
    • -

      Nvidia (Manual)

      -
    • -
    • -

      WSL2

      -
    • -
    -
    -
    -
    -

    Docker CLI:

    -
    -
    -
    -
    docker run \
    -    --name wolf \
    -    --network=host \
    -    -e XDG_RUNTIME_DIR=/tmp/sockets \
    -    -v /tmp/sockets:/tmp/sockets:rw \
    -    -e HOST_APPS_STATE_FOLDER=/etc/wolf \
    -    -v /etc/wolf:/etc/wolf:rw \
    -    -v /var/run/docker.sock:/var/run/docker.sock:rw \
    -    --device /dev/dri/ \
    -    --device /dev/uinput \
    -    --device /dev/uhid \
    -    -v /dev/:/dev/:rw \
    -    -v /run/udev:/run/udev:rw \
    -    --device-cgroup-rule "c 13:* rmw" \
    -    ghcr.io/games-on-whales/wolf:stable
    -
    -
    -
    -

    Docker compose:

    -
    -
    -
    -
    version: "3"
    -services:
    -  wolf:
    -    image: ghcr.io/games-on-whales/wolf:stable
    -    environment:
    -      - XDG_RUNTIME_DIR=/tmp/sockets
    -      - HOST_APPS_STATE_FOLDER=/etc/wolf
    -    volumes:
    -      - /etc/wolf/:/etc/wolf
    -      - /tmp/sockets:/tmp/sockets:rw
    -      - /var/run/docker.sock:/var/run/docker.sock:rw
    -      - /dev/:/dev/:rw
    -      - /run/udev:/run/udev:rw
    -    device_cgroup_rules:
    -      - 'c 13:* rmw'
    -    devices:
    -      - /dev/dri
    -      - /dev/uinput
    -      - /dev/uhid
    -    network_mode: host
    -    restart: unless-stopped
    -
    -
    -
    -
    -
    - - - - - -
    - - -
    -

    Make sure that the version of the Nvidia container toolkit is >= 1.16.0 and that your driver version is >= 530.30.02 (you can check the driver version with nvidia-smi).

    -
    -
    -
    -
    sudo nvidia-container-cli -V
    -cli-version: 1.16.0
    -lib-version: 1.16.0
    -build date: 2024-07-15T13:41+00:00
    -
    -
    -
    -
    -
    -

    Docker CLI:

    -
    -
    -
    -
    docker run \
    -    --name wolf \
    -    --network=host \
    -    -e XDG_RUNTIME_DIR=/tmp/sockets \
    -    -v /tmp/sockets:/tmp/sockets:rw \
    -    -e HOST_APPS_STATE_FOLDER=/etc/wolf \
    -    -v /etc/wolf:/etc/wolf:rw \
    -    -v /var/run/docker.sock:/var/run/docker.sock:rw \
    -    -e NVIDIA_DRIVER_CAPABILITIES=all \
    -    -e NVIDIA_VISIBLE_DEVICES=all \
    -    --gpus=all \
    -    --device /dev/dri/ \
    -    --device /dev/uinput \
    -    --device /dev/uhid \
    -    -v /dev/:/dev/:rw \
    -    -v /run/udev:/run/udev:rw \
    -    --device-cgroup-rule "c 13:* rmw" \
    -    ghcr.io/games-on-whales/wolf:stable
    -
    -
    -
    -

    Docker compose:

    -
    -
    -
    -
    version: "3"
    -services:
    -  wolf:
    -    image: ghcr.io/games-on-whales/wolf:stable
    -    environment:
    -      - XDG_RUNTIME_DIR=/tmp/sockets
    -      - HOST_APPS_STATE_FOLDER=/etc/wolf
    -      - NVIDIA_DRIVER_CAPABILITIES=all
    -      - NVIDIA_VISIBLE_DEVICES=all
    -    volumes:
    -      - /etc/wolf/:/etc/wolf
    -      - /tmp/sockets:/tmp/sockets:rw
    -      - /var/run/docker.sock:/var/run/docker.sock:rw
    -      - /dev/:/dev/:rw
    -      - /run/udev:/run/udev:rw
    -    device_cgroup_rules:
    -      - 'c 13:* rmw'
    -    devices:
    -      - /dev/dri
    -      - /dev/uinput
    -      - /dev/uhid
    -    runtime: nvidia
    -    deploy:
    -      resources:
    -        reservations:
    -          devices:
    -            - capabilities: [gpu]
    -    network_mode: host
    -    restart: unless-stopped
    -
    -
    -
    -
    -
    -

    Unfortunately, on Nvidia, things are a little bit more complex..

    -
    -
    -

    Make sure that your driver version is >= 530.30.02

    -
    -
    -

    First, let’s build an additional docker image that will contain the Nvidia driver files:

    -
    -
    -
    -
    curl https://raw.githubusercontent.com/games-on-whales/gow/master/images/nvidia-driver/Dockerfile | docker build -t gow/nvidia-driver:latest -f - --build-arg NV_VERSION=$(cat /sys/module/nvidia/version) .
    -
    -
    -
    -

    This will create gow/nvidia-driver:latest locally.

    -
    -
    -

    Unfortunately, docker doesn’t seem to support directly mounting images, but you can pre-polulate volumes by running:

    -
    -
    -
    -
    docker create --rm --mount source=nvidia-driver-vol,destination=/usr/nvidia gow/nvidia-driver:latest sh
    -
    -
    -
    -

    It will create a Docker container, populate nvidia-driver-vol with Nvidia driver if it wasn’t already done and remove the container.

    -
    -
    -

    Check volume exists with:

    -
    -
    -
    -
    docker volume ls | grep nvidia-driver
    -
    -local     nvidia-driver-vol
    -
    -
    -
    -

    One last final check: we have to make sure that the nvidia-drm module has been loaded and that the module is loaded with the flag modeset=1.

    -
    -
    -
    -
    sudo cat /sys/module/nvidia_drm/parameters/modeset
    -Y
    -
    -
    -
    -I get N or the file is not present, how do I set the flag? -
    -
    -

    If using Grub, the easiest way to make the change persistent is to add nvidia-drm.modeset=1 to the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub ex:

    -
    -
    -
    -
    GRUB_CMDLINE_LINUX_DEFAULT="quiet nvidia-drm.modeset=1"
    -
    -
    -
    -

    Then sudo update-grub and reboot.

    -
    -
    -

    For more options or details, you can see ArchWiki: Kernel parameters

    -
    -
    -
    -
    -

    You can now finally start the container; Docker CLI:

    -
    -
    -
    -
    docker run \
    -    --name wolf \
    -    --network=host \
    -    -e XDG_RUNTIME_DIR=/tmp/sockets \
    -    -v /tmp/sockets:/tmp/sockets:rw \
    -    -e NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol \
    -    -v nvidia-driver-vol:/usr/nvidia:rw \
    -    -e HOST_APPS_STATE_FOLDER=/etc/wolf \
    -    -v /etc/wolf:/etc/wolf:rw \
    -    -v /var/run/docker.sock:/var/run/docker.sock:rw \
    -    --device /dev/nvidia-uvm \
    -    --device /dev/nvidia-uvm-tools \
    -    --device /dev/dri/ \
    -    --device /dev/nvidia-caps/nvidia-cap1 \
    -    --device /dev/nvidia-caps/nvidia-cap2 \
    -    --device /dev/nvidiactl \
    -    --device /dev/nvidia0 \
    -    --device /dev/nvidia-modeset \
    -    --device /dev/uinput \
    -    --device /dev/uhid \
    -    -v /dev/:/dev/:rw \
    -    -v /run/udev:/run/udev:rw \
    -    --device-cgroup-rule "c 13:* rmw" \
    -    ghcr.io/games-on-whales/wolf:stable
    -
    -
    -
    -

    Docker compose:

    -
    -
    -
    -
    version: "3"
    -services:
    -  wolf:
    -    image: ghcr.io/games-on-whales/wolf:stable
    -    environment:
    -      - XDG_RUNTIME_DIR=/tmp/sockets
    -      - NVIDIA_DRIVER_VOLUME_NAME=nvidia-driver-vol
    -      - HOST_APPS_STATE_FOLDER=/etc/wolf
    -    volumes:
    -      - /etc/wolf/:/etc/wolf:rw
    -      - /tmp/sockets:/tmp/sockets:rw
    -      - /var/run/docker.sock:/var/run/docker.sock:rw
    -      - /dev/:/dev/:rw
    -      - /run/udev:/run/udev:rw
    -      - nvidia-driver-vol:/usr/nvidia:rw
    -    devices:
    -      - /dev/dri
    -      - /dev/uinput
    -      - /dev/uhid
    -      - /dev/nvidia-uvm
    -      - /dev/nvidia-uvm-tools
    -      - /dev/nvidia-caps/nvidia-cap1
    -      - /dev/nvidia-caps/nvidia-cap2
    -      - /dev/nvidiactl
    -      - /dev/nvidia0
    -      - /dev/nvidia-modeset
    -    device_cgroup_rules:
    -      - 'c 13:* rmw'
    -    network_mode: host
    -    restart: unless-stopped
    -
    -volumes:
    -  nvidia-driver-vol:
    -    external: true
    -
    -
    -
    -

    If you are missing any of the /dev/nvidia* devices you might also need to initialise them using:

    -
    -
    -
    -
    sudo nvidia-container-cli --load-kmods info
    -
    -
    -
    -Or if that fails: -
    -
    -
    -
    #!/bin/bash
    -## Script to initialize nvidia device nodes.
    -## https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications
    -
    -/sbin/modprobe nvidia
    -if [ "$?" -eq 0 ]; then
    -  # Count the number of NVIDIA controllers found.
    -  NVDEVS=`lspci | grep -i NVIDIA`
    -  N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
    -  NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`
    -  N=`expr $N3D + $NVGA - 1`
    -  for i in `seq 0 $N`; do
    -    mknod -m 666 /dev/nvidia$i c 195 $i
    -  done
    -  mknod -m 666 /dev/nvidiactl c 195 255
    -else
    -  exit 1
    -fi
    -
    -/sbin/modprobe nvidia-uvm
    -if [ "$?" -eq 0 ]; then
    -  # Find out the major device number used by the nvidia-uvm driver
    -  D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`
    -  mknod -m 666 /dev/nvidia-uvm c $D 0
    -  mknod -m 666 /dev/nvidia-uvm-tools c $D 0
    -else
    -  exit 1
    -fi
    -
    -
    -
    -
    -
    -
    -
    - - - - - -
    - - -
    -

    Running Wolf in WSL2 hasn’t been properly tested.

    -
    -
    -
    -
    -

    You can run Wolf in a very unprivileged setting without uinput/uhid, unfortunately this means that you’ll be restricted to only using mouse and keyboard.

    -
    -
    - - - - - -
    - - -
    -

    For Nvidia users, follow the Nvidia instructions above. -This should work for AMD/Intel users.

    -
    -
    -
    -
    -
    -
    docker run \
    -    --name wolf \
    -    --network=host \
    -    -e XDG_RUNTIME_DIR=/tmp/sockets \
    -    -v /tmp/sockets:/tmp/sockets:rw \
    -    -e HOST_APPS_STATE_FOLDER=/etc/wolf \
    -    -v /etc/wolf:/etc/wolf:rw \
    -    -v /var/run/docker.sock:/var/run/docker.sock:rw \
    -    --device /dev/dri/ \
    -    ghcr.io/games-on-whales/wolf:stable
    -
    -
    -
    -
    -
    -
    -Which ports are used by Wolf? -
    -
    -

    To keep things simple the scripts above defaulted to network:host; that’s not really required, the minimum set of ports that needs to be exposed are:

    -
    -
    -
    -
    # HTTPS
    -EXPOSE 47984/tcp
    -# HTTP
    -EXPOSE 47989/tcp
    -# Control
    -EXPOSE 47999/udp
    -# RTSP
    -EXPOSE 48010/tcp
    -# Video (up to 10 users, you can open more ports if needed)
    -EXPOSE 48100-48110/udp
    -# Audio (up to 10 users, you can open more ports if needed)
    -EXPOSE 48200-48210/udp
    -
    -
    -
    -
    -
    -
    -
    -

    Moonlight pairing

    -
    -
    -

    You should now be able to point Moonlight to the IP address of the server and start the pairing process:

    -
    -
    -
      -
    • -

      In Moonlight, you’ll get a prompt for a PIN A screenshot of Moonlight asking for a PIN

      -
    • -
    • -

      Wolf will log a line with a link to a page where you can input that PIN (ex: http://localhost:47989/pin/#337327E8A6FC0C66 make sure to replace localhost with your server IP) A screenshot of the Wolf page where you can insert the PIN

      -
    • -
    • -

      In Moonlight, you should now be able to see a list of the applications that are supported by Wolf A screenshot of Moonlight showing the apps

      -
    • -
    -
    -
    - - - - - -
    - - -
    -

    If you can only see a black screen with a cursor in Moonlight it’s because the first time that you start an app Wolf will download the corresponding docker image + first time updates.
    -Keep an eye on the logs from Wolf to get more details.

    -
    -
    -
    -
    -
    -
    -

    Virtual devices support

    -
    -
    -

    We use uinput to create virtual devices (Mouse, Keyboard and Joypad), make sure that /dev/uinput is present in the host:

    -
    -
    -
    -
    ls -la /dev/uinput
    -crw------- 1 root root 10, 223 Jan 17 09:08 /dev/uinput
    -
    -
    -
    -
    Add your user to group input
    -
    -
    sudo usermod -a -G input $USER
    -
    -
    -
    -
    Create udev rules under /etc/udev/rules.d/85-wolf-virtual-inputs.rules
    -
    -
    # Allows Wolf to acces /dev/uinput
    -KERNEL=="uinput", SUBSYSTEM=="misc", MODE="0660", GROUP="input", OPTIONS+="static_node=uinput"
    -
    -# Allows Wolf to access /dev/uhid
    -KERNEL=="uhid", TAG+="uaccess"
    -
    -# Move virtual keyboard and mouse into a different seat
    -SUBSYSTEMS=="input", ATTRS{id/vendor}=="ab00", MODE="0660", GROUP="input", ENV{ID_SEAT}="seat9"
    -
    -# Joypads
    -SUBSYSTEMS=="input", ATTRS{name}=="Wolf X-Box One (virtual) pad", MODE="0660", GROUP="input"
    -SUBSYSTEMS=="input", ATTRS{name}=="Wolf PS5 (virtual) pad", MODE="0660", GROUP="input"
    -SUBSYSTEMS=="input", ATTRS{name}=="Wolf gamepad (virtual) motion sensors", MODE="0660", GROUP="input"
    -SUBSYSTEMS=="input", ATTRS{name}=="Wolf Nintendo (virtual) pad", MODE="0660", GROUP="input"
    -
    -
    -
    -What does that mean? -
    -
    -
    -
    KERNEL=="uinput", SUBSYSTEM=="misc", MODE="0660", GROUP="input", OPTIONS+="static_node=uinput"
    -
    -
    -
    -

    Allows Wolf to access /dev/uinput on your system. -It needs that node to create the virtual devices. -This is usually not the default on servers, but if that is already working for you on your desktop system, you can skip this line.

    -
    -
    -
    -
    SUBSYSTEMS=="input", ATTRS{id/vendor}=="ab00", MODE="0660", GROUP="input", ENV{ID_SEAT}="seat9"
    -
    -
    -
    -

    This line checks for the custom vendor-id that Wolf gives to newly created virtual devices and assigns them to seat9, which will cause any session with a lower seat (usually you only have seat1 for your main session) to ignore the devices.

    -
    -
    -
    -
    SUBSYSTEMS=="input", ATTRS{name}=="Wolf X-Box One (virtual) pad", MODE="0660", GROUP="input"
    -SUBSYSTEMS=="input", ATTRS{name}=="Wolf PS5 (virtual) pad", MODE="0660", GROUP="input"
    -SUBSYSTEMS=="input", ATTRS{name}=="Wolf gamepad (virtual) motion sensors", MODE="0660", GROUP="input"
    -SUBSYSTEMS=="input", ATTRS{name}=="Wolf Nintendo (virtual) pad", MODE="0660", GROUP="input"
    -
    -
    -
    -

    Now the virtual controllers are different, because we need to emulate an existing brand for them to be picked up correctly, so our virtual controllers have a vendor/product id resembling a real controller. -The assigned name instead is specific to Wolf.

    -
    -
    -

    You can’t assign controllers a seat however (well - you can - but it won’t have the same effect), so we just give it permissions where only user+group can pick it up.

    -
    -
    -
    -
    -

    Reload the udev rules either by rebooting or run:

    -
    -
    -
    -
    udevadm control --reload-rules && udevadm trigger
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/user/steam.html b/wolf/dev-fix-109/user/steam.html deleted file mode 100644 index ff248b1..0000000 --- a/wolf/dev-fix-109/user/steam.html +++ /dev/null @@ -1,311 +0,0 @@ - - - - - - Steam :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Steam

    -
    -
    -
    -

    One of the pre-installed applications in the default Wolf configuration is Steam. -Getting Steam to work in a headless container took some work, so this page lists some limitations -and tips to get the most out of Steam.

    -
    -
    -
    -
    -

    Directly launch a Steam game

    -
    -
    -

    In order to directly launch a Steam game from Moonlight you can just copy the existing entry for Steam, change the name and just add the Steam app ID as env variable; example:

    -
    -
    -
    -
    [[apps]]
    -title = "Elden Ring"
    -start_virtual_compositor = true
    -
    -[apps.runner]
    -env = [
    -  "PROTON_LOG=1",
    -  "RUN_SWAY=true",
    -  "GOW_REQUIRED_DEVICES=/dev/input/* /dev/dri/* /dev/nvidia*",
    -  "STEAM_STARTUP_FLAGS=steam://rungameid/1245620"
    -]
    -# COPY EVERYTHING ELSE ...
    -
    -
    -
    -

    You can get the app ID from https://steamdb.info/

    -
    -
    -

    (Thanks to @nathanle1406 for the tip)

    -
    -
    -
    -
    -

    MangoHud

    -
    -
    -

    The steam overlay currently does not work in our headless container. -So if you want to see FPS and other stats you can use FlightlessMango’s excellent MangoHud.

    -
    -
    -

    Mangohud screenshot

    -
    -
    -

    Proton (Steam Play) and other Vulkan games

    -
    -

    It’s already installed and enabled in the default steam image for all Vulkan games (including Proton games).

    -
    -
    -

    See below for how to activate it in game.

    -
    -
    -
    -

    OpenGL (Native Linux) games

    -
    -

    While mangohud is already installed, there’s no way to globally enable it for all OpenGL games. -You can still enable it on a per-game basis by adding mangohud %command% to the game’s launch options in Steam.

    -
    -
    -

    Steam launch options

    -
    -
    -
    -

    Activation and configuration

    -
    -

    In a game, you can press Right Shift + F12 to make the overlay appear and disappear. -You can also press Right Shift + F11 to change the position of the overlay on screen.

    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-fix-109/user/troubleshooting.html b/wolf/dev-fix-109/user/troubleshooting.html deleted file mode 100644 index 4c6c3be..0000000 --- a/wolf/dev-fix-109/user/troubleshooting.html +++ /dev/null @@ -1,453 +0,0 @@ - - - - - - Troubleshooting :: Games On Whales - - - - - - - -
    -
    - -
    -
    - -
    - -
    - -
    -

    Troubleshooting

    -
    -
    -
    - - - - - -
    - - -
    -

    When something doesn’t work it’ll be helpful to be able to see the logs from Wolf, please change the env variable WOLF_LOG_LEVEL to DEBUG and try to replicate the issue.

    -
    -
    -
    -
    -
    -
    -

    Black screen in Moonlight

    -
    -
    -

    If it’s the very first time that you are running an app, and you can only see a black screen with a cursor in Moonlight, it’s probably because Wolf is downloading the corresponding docker image and installing first time updates (when necessary).

    -
    -
    -

    If this persists or Moonlight kicks you out of the streaming session then you should probably take a look at the Wolf logs to gather more informations.

    -
    -
    -

    Vulkan errors in App

    -
    -

    Example log line:

    -
    -
    -
    -
    vulkan: physical device 10de:1c03 compute queue doesn't support presenting on our surface, using graphics queue
    -vulkan: selecting physical device 'NVIDIA GeForce GTX 1060 6GB': queue family 0
    -vulkan: physical device supports DRM format modifiers
    -vulkan: vkCreateDevice failed (VkResult: -7)
    -Failed to initialize Vulkan
    -
    -
    -
    -

    Vulkan errors are generally related to the video drivers.

    -
    -
    -Nvidia GPU checklist -
    -
    -

    Make sure to follow all the instructions on the Quickstart page. -Here’s a brief summary of things to check:

    -
    -
    -
      -
    • -

      Check that the nvidia volume driver has been created…​

      -
    • -
    -
    -
    -
    -
    docker volume ls | grep nvidia-driver
    -
    -local     nvidia-driver-vol
    -
    -
    -
    -
      -
    • -

      …​and that the same volume name is passed in the env variable NVIDIA_DRIVER_VOLUME_NAME

      -
    • -
    • -

      Make sure that the nvidia-drm module has been loaded…​

      -
    • -
    -
    -
    -
    -
    sudo dmesg | grep nvidia-drm    # Should print something like the following:
    -[   12.561107] [drm] [nvidia-drm] [GPU ID 0x00000100] Loading driver
    -[   14.138312] [drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:01:00.0 on minor 0
    -
    -
    -
    -
      -
    • -

      …​and check that the module is loaded with the flag modeset=1.

      -
    • -
    -
    -
    -
    -
    sudo cat /sys/module/nvidia_drm/parameters/modeset
    -Y
    -
    -
    -
    -
    -
    -
    -
    -
    -

    Address already in use

    -
    -
    -

    You’ll see something like the following log lines:

    -
    -
    -
    -
    terminate called after throwing an instance of 'boost::wrapexcept<boost::system::system_error>'
    -  what():  bind: Address already in use
    -INFO  | Received interrupt signal 6, clean exit
    -
    -
    -
    -

    This means that some other process is using the same ports that Wolf needs in order to communicate with Moonlight.

    -
    -
    - - - - - -
    - - -
    -

    Have you left Sunshine running in the background?

    -
    -
    -
    -
    -

    The following ports need to be available in order for Wolf to work:

    -
    -
    -
      -
    • -

      47984/tcp - HTTPS

      -
    • -
    • -

      47989/tcp - HTTP

      -
    • -
    • -

      47999/udp - Control

      -
    • -
    • -

      48100/udp - Video

      -
    • -
    • -

      48200/udp - Audio

      -
    • -
    • -

      48010/tcp - RTSP

      -
    • -
    -
    -
    -
    -
    -

    Unable to recognise GPU vendor

    -
    -
    -

    Example log line:

    -
    -
    -
    -
    WARN  | Unable to recognise GPU vendor: red hat, inc.
    -
    -
    -
    -

    Do you have multiple GPUs installed (or even just a virtual display in a VM)?
    -Checkout the Multiple GPU configuration page

    -
    -
    -
    -
    -

    Intel: MFX_ERR_UNSUPPORTED

    -
    -
    -

    Example log line:

    -
    -
    -
    -
    0:01:31.983118812     1 0x7f1d50000b70 ERROR             qsvencoder gstqsvencoder.cpp:1098:gst_qsv_encoder_init_encode_session:<qsvh265enc3> MFXVideoENCODE::Query failed -3 (MFX_ERR_UNSUPPORTED)
    -0:01:31.983243805     1 0x7f1d50000b70 WARN            videoencoder gstvideoencoder.c:771:gst_video_encoder_setcaps:<qsvh265enc3> rejected caps video/x-raw(memory:VAMemory), width=(int)1280, height=(int)720, framerate=(fraction)60/1, format=(string)NV12, chroma-site=(string)mpeg2, colorimetry=(string)bt601
    -
    -
    -
    -

    Follow the steps outlined in here:

    -
    -
    -
      -
    • -

      sudo apt install --reinstall linux-firmware

      -
    • -
    • -

      Add i915.enable_guc=2 in /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i915.force_probe=* i915.enable_guc=2"

      -
    • -
    • -

      sudo update-initramfs –u

      -
    • -
    • -

      sudo update-grub

      -
    • -
    • -

      Reboot the system.

      -
    • -
    • -

      After reboot, execute the command: dmesg | grep guc

      -
    • -
    • -

      Verify the logs for guc information.

      -
    • -
    -
    -
    -

    Note: If output doesn’t contain guc details, then install the latest guc/huc firmware. Copy the firmware to /lib/firmware/i915/, and reboot the system.

    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - diff --git a/wolf/dev-nix/dev/code-structure.html b/wolf/dev-nix/dev/code-structure.html index 695e1c5..b4343ef 100644 --- a/wolf/dev-nix/dev/code-structure.html +++ b/wolf/dev-nix/dev/code-structure.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/dev/fake-udev.html b/wolf/dev-nix/dev/fake-udev.html index 6f62d02..a6634fa 100644 --- a/wolf/dev-nix/dev/fake-udev.html +++ b/wolf/dev-nix/dev/fake-udev.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/dev/gstreamer.html b/wolf/dev-nix/dev/gstreamer.html index 274b0ac..437a07a 100644 --- a/wolf/dev-nix/dev/gstreamer.html +++ b/wolf/dev-nix/dev/gstreamer.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/dev/manual_build.html b/wolf/dev-nix/dev/manual_build.html index 25347d7..9d360f6 100644 --- a/wolf/dev-nix/dev/manual_build.html +++ b/wolf/dev-nix/dev/manual_build.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/dev/wayland.html b/wolf/dev-nix/dev/wayland.html index 213889d..12743e1 100644 --- a/wolf/dev-nix/dev/wayland.html +++ b/wolf/dev-nix/dev/wayland.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/index.html b/wolf/dev-nix/index.html index 3b79b65..0e590fa 100644 --- a/wolf/dev-nix/index.html +++ b/wolf/dev-nix/index.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -194,7 +191,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/protocols/control-specs.html b/wolf/dev-nix/protocols/control-specs.html index c0d3b70..730bfe0 100644 --- a/wolf/dev-nix/protocols/control-specs.html +++ b/wolf/dev-nix/protocols/control-specs.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -196,7 +193,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/protocols/http-pairing.html b/wolf/dev-nix/protocols/http-pairing.html index 4073503..6a2698a 100644 --- a/wolf/dev-nix/protocols/http-pairing.html +++ b/wolf/dev-nix/protocols/http-pairing.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -196,7 +193,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/protocols/index.html b/wolf/dev-nix/protocols/index.html index 2f8bf5f..cbd9c5b 100644 --- a/wolf/dev-nix/protocols/index.html +++ b/wolf/dev-nix/protocols/index.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/protocols/input-data.html b/wolf/dev-nix/protocols/input-data.html index f637984..c51cd64 100644 --- a/wolf/dev-nix/protocols/input-data.html +++ b/wolf/dev-nix/protocols/input-data.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/protocols/rtp-opus.html b/wolf/dev-nix/protocols/rtp-opus.html index b08e158..a37ccf4 100644 --- a/wolf/dev-nix/protocols/rtp-opus.html +++ b/wolf/dev-nix/protocols/rtp-opus.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/protocols/rtp-video.html b/wolf/dev-nix/protocols/rtp-video.html index fdf2871..448e5d8 100644 --- a/wolf/dev-nix/protocols/rtp-video.html +++ b/wolf/dev-nix/protocols/rtp-video.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/protocols/rtsp.html b/wolf/dev-nix/protocols/rtsp.html index 2596545..f20f3d7 100644 --- a/wolf/dev-nix/protocols/rtsp.html +++ b/wolf/dev-nix/protocols/rtsp.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -196,7 +193,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/user/configuration.html b/wolf/dev-nix/user/configuration.html index 32f12c1..6f5b0bd 100644 --- a/wolf/dev-nix/user/configuration.html +++ b/wolf/dev-nix/user/configuration.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/user/gstreamer.html b/wolf/dev-nix/user/gstreamer.html index cb50005..8b4a23d 100644 --- a/wolf/dev-nix/user/gstreamer.html +++ b/wolf/dev-nix/user/gstreamer.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/user/overview.html b/wolf/dev-nix/user/overview.html index 14b6074..fb4540b 100644 --- a/wolf/dev-nix/user/overview.html +++ b/wolf/dev-nix/user/overview.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/user/quickstart.html b/wolf/dev-nix/user/quickstart.html index 473e624..ee4a9ab 100644 --- a/wolf/dev-nix/user/quickstart.html +++ b/wolf/dev-nix/user/quickstart.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-nix/user/troubleshooting.html b/wolf/dev-nix/user/troubleshooting.html index e817ee3..336809f 100644 --- a/wolf/dev-nix/user/troubleshooting.html +++ b/wolf/dev-nix/user/troubleshooting.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/dev/code-structure.html b/wolf/dev-tracy/dev/code-structure.html index 66496ac..7aeb831 100644 --- a/wolf/dev-tracy/dev/code-structure.html +++ b/wolf/dev-tracy/dev/code-structure.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/dev/fake-udev.html b/wolf/dev-tracy/dev/fake-udev.html index 8dc446f..6a80e69 100644 --- a/wolf/dev-tracy/dev/fake-udev.html +++ b/wolf/dev-tracy/dev/fake-udev.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/dev/gstreamer.html b/wolf/dev-tracy/dev/gstreamer.html index 3273338..9a5eaf5 100644 --- a/wolf/dev-tracy/dev/gstreamer.html +++ b/wolf/dev-tracy/dev/gstreamer.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/dev/manual_build.html b/wolf/dev-tracy/dev/manual_build.html index 312da5e..6f0e777 100644 --- a/wolf/dev-tracy/dev/manual_build.html +++ b/wolf/dev-tracy/dev/manual_build.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/dev/wayland.html b/wolf/dev-tracy/dev/wayland.html index 9b7da08..0caa380 100644 --- a/wolf/dev-tracy/dev/wayland.html +++ b/wolf/dev-tracy/dev/wayland.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/index.html b/wolf/dev-tracy/index.html index 1a65b8c..59674b9 100644 --- a/wolf/dev-tracy/index.html +++ b/wolf/dev-tracy/index.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -194,7 +191,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/protocols/control-specs.html b/wolf/dev-tracy/protocols/control-specs.html index 9cf0ad9..8cb6670 100644 --- a/wolf/dev-tracy/protocols/control-specs.html +++ b/wolf/dev-tracy/protocols/control-specs.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -196,7 +193,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/protocols/http-pairing.html b/wolf/dev-tracy/protocols/http-pairing.html index 984bac0..4d0ebd6 100644 --- a/wolf/dev-tracy/protocols/http-pairing.html +++ b/wolf/dev-tracy/protocols/http-pairing.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -196,7 +193,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/protocols/index.html b/wolf/dev-tracy/protocols/index.html index 64db8a8..a3f0216 100644 --- a/wolf/dev-tracy/protocols/index.html +++ b/wolf/dev-tracy/protocols/index.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/protocols/input-data.html b/wolf/dev-tracy/protocols/input-data.html index 4d1e840..075e965 100644 --- a/wolf/dev-tracy/protocols/input-data.html +++ b/wolf/dev-tracy/protocols/input-data.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/protocols/rtp-opus.html b/wolf/dev-tracy/protocols/rtp-opus.html index 62052fd..ff18163 100644 --- a/wolf/dev-tracy/protocols/rtp-opus.html +++ b/wolf/dev-tracy/protocols/rtp-opus.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/protocols/rtp-video.html b/wolf/dev-tracy/protocols/rtp-video.html index dd4c0fb..4194bce 100644 --- a/wolf/dev-tracy/protocols/rtp-video.html +++ b/wolf/dev-tracy/protocols/rtp-video.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,7 +194,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/protocols/rtsp.html b/wolf/dev-tracy/protocols/rtsp.html index c6a0adf..c051580 100644 --- a/wolf/dev-tracy/protocols/rtsp.html +++ b/wolf/dev-tracy/protocols/rtsp.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -196,7 +193,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/user/configuration.html b/wolf/dev-tracy/user/configuration.html index 9bce2d4..6b91cc1 100644 --- a/wolf/dev-tracy/user/configuration.html +++ b/wolf/dev-tracy/user/configuration.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/user/gstreamer.html b/wolf/dev-tracy/user/gstreamer.html index a551631..e9574c6 100644 --- a/wolf/dev-tracy/user/gstreamer.html +++ b/wolf/dev-tracy/user/gstreamer.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/user/overview.html b/wolf/dev-tracy/user/overview.html index 7dba0a5..b2998e2 100644 --- a/wolf/dev-tracy/user/overview.html +++ b/wolf/dev-tracy/user/overview.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/user/quickstart.html b/wolf/dev-tracy/user/quickstart.html index 78e0013..6981696 100644 --- a/wolf/dev-tracy/user/quickstart.html +++ b/wolf/dev-tracy/user/quickstart.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/dev-tracy/user/troubleshooting.html b/wolf/dev-tracy/user/troubleshooting.html index c15613b..1489d9a 100644 --- a/wolf/dev-tracy/user/troubleshooting.html +++ b/wolf/dev-tracy/user/troubleshooting.html @@ -162,9 +162,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -195,7 +192,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/apps/index.html b/wolf/stable/apps/index.html index cc75493..783c333 100644 --- a/wolf/stable/apps/index.html +++ b/wolf/stable/apps/index.html @@ -77,15 +77,15 @@

    wolf

    - @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,6 +194,7 @@

    wolf

    @@ -206,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/apps/pegasus.html b/wolf/stable/apps/pegasus.html index c847553..c56386d 100644 --- a/wolf/stable/apps/pegasus.html +++ b/wolf/stable/apps/pegasus.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,6 +194,8 @@

    wolf

    @@ -206,7 +205,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/apps/steam.html b/wolf/stable/apps/steam.html index ad6fe73..8992cdc 100644 --- a/wolf/stable/apps/steam.html +++ b/wolf/stable/apps/steam.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -197,6 +194,8 @@

    wolf

    @@ -206,7 +205,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/dev/code-structure.html b/wolf/stable/dev/code-structure.html index 742d6e0..f87ae10 100644 --- a/wolf/stable/dev/code-structure.html +++ b/wolf/stable/dev/code-structure.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/dev/fake-udev.html b/wolf/stable/dev/fake-udev.html index ab77877..a53cc23 100644 --- a/wolf/stable/dev/fake-udev.html +++ b/wolf/stable/dev/fake-udev.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/dev/gstreamer.html b/wolf/stable/dev/gstreamer.html index 21bc0ae..b86a987 100644 --- a/wolf/stable/dev/gstreamer.html +++ b/wolf/stable/dev/gstreamer.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/dev/how-it-works.html b/wolf/stable/dev/how-it-works.html index 4654727..46a8f5f 100644 --- a/wolf/stable/dev/how-it-works.html +++ b/wolf/stable/dev/how-it-works.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/dev/manual_build.html b/wolf/stable/dev/manual_build.html index 0904d09..e48811b 100644 --- a/wolf/stable/dev/manual_build.html +++ b/wolf/stable/dev/manual_build.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/dev/wayland.html b/wolf/stable/dev/wayland.html index 3878434..6a2303b 100644 --- a/wolf/stable/dev/wayland.html +++ b/wolf/stable/dev/wayland.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/index.html b/wolf/stable/index.html index d612692..d1c2c0e 100644 --- a/wolf/stable/index.html +++ b/wolf/stable/index.html @@ -80,13 +80,13 @@

    wolf

    @@ -175,9 +175,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/protocols/control-specs.html b/wolf/stable/protocols/control-specs.html index cf57770..7db82ee 100644 --- a/wolf/stable/protocols/control-specs.html +++ b/wolf/stable/protocols/control-specs.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -208,7 +205,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/protocols/http-pairing.html b/wolf/stable/protocols/http-pairing.html index 6419a8b..0bff487 100644 --- a/wolf/stable/protocols/http-pairing.html +++ b/wolf/stable/protocols/http-pairing.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -208,7 +205,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/protocols/index.html b/wolf/stable/protocols/index.html index 7f2dcbd..82b78ff 100644 --- a/wolf/stable/protocols/index.html +++ b/wolf/stable/protocols/index.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/protocols/input-data.html b/wolf/stable/protocols/input-data.html index d5bf617..8f203b2 100644 --- a/wolf/stable/protocols/input-data.html +++ b/wolf/stable/protocols/input-data.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -209,7 +206,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/protocols/rtp-opus.html b/wolf/stable/protocols/rtp-opus.html index fd708be..a2c139c 100644 --- a/wolf/stable/protocols/rtp-opus.html +++ b/wolf/stable/protocols/rtp-opus.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -209,7 +206,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/protocols/rtp-video.html b/wolf/stable/protocols/rtp-video.html index 19d2e10..521adad 100644 --- a/wolf/stable/protocols/rtp-video.html +++ b/wolf/stable/protocols/rtp-video.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -209,7 +206,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/protocols/rtsp.html b/wolf/stable/protocols/rtsp.html index 8dd50a6..2c8af36 100644 --- a/wolf/stable/protocols/rtsp.html +++ b/wolf/stable/protocols/rtsp.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -208,7 +205,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/user/configuration.html b/wolf/stable/user/configuration.html index cd32039..43f13ba 100644 --- a/wolf/stable/user/configuration.html +++ b/wolf/stable/user/configuration.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/user/gstreamer.html b/wolf/stable/user/gstreamer.html index 07d415e..b6973e8 100644 --- a/wolf/stable/user/gstreamer.html +++ b/wolf/stable/user/gstreamer.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/user/quickstart.html b/wolf/stable/user/quickstart.html index 8d44978..27aaff7 100644 --- a/wolf/stable/user/quickstart.html +++ b/wolf/stable/user/quickstart.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api diff --git a/wolf/stable/user/troubleshooting.html b/wolf/stable/user/troubleshooting.html index ffc1672..65abb9e 100644 --- a/wolf/stable/user/troubleshooting.html +++ b/wolf/stable/user/troubleshooting.html @@ -79,13 +79,13 @@

    wolf

    @@ -174,9 +174,6 @@

    wolf

  • dev-nix
  • -
  • - dev-fix-109 -
  • dev-fake-uinput
  • @@ -207,7 +204,6 @@

    wolf

    stable dev-tracy dev-nix - dev-fix-109 dev-fake-uinput dev-backend-api