Description
Some text here.
Description
Some text here.
Description
Some text here.
(GraphicsLayer
  (anchor 0.00 0.00)
  (bounds 800.00 615.00)
  (visible rect 0.00, 0.00 800.00 x 600.00)
  (coverage rect 0.00, 0.00 800.00 x 600.00)
  (intersects coverage rect 1)
  (contentsScale 2.00)
  (children 1
    (GraphicsLayer
      (bounds 800.00 615.00)
      (contentsOpaque 1)
      (visible rect 0.00, 0.00 800.00 x 600.00)
      (coverage rect 0.00, 0.00 800.00 x 600.00)
      (intersects coverage rect 1)
      (contentsScale 2.00)
      (children 1
        (GraphicsLayer
          (position 0.00 13.00)
          (bounds 602.00 602.00)
          (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
          (visible rect 0.00, 0.00 602.00 x 587.00)
          (coverage rect 0.00, -13.00 800.00 x 600.00)
          (intersects coverage rect 1)
          (contentsScale 2.00)
          (children 1
            (GraphicsLayer
              (position 101.00 101.00)
              (anchor 0.57 0.50)
              (bounds 440.00 440.00)
              (preserves3D 1)
              (transform [-1.00 0.00 -0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 -1.00 0.00] [0.00 0.00 0.00 1.00])
              (visible rect 0.00, 0.00 440.00 x 440.00)
              (coverage rect -199.00, -114.00 800.00 x 600.00)
              (intersects coverage rect 1)
              (contentsScale 2.00)
              (children 1
                (GraphicsLayer
                  (bounds 420.00 420.00)
                  (contentsOpaque 1)
                  (transform [-1.00 0.00 -0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 -1.00 0.00] [0.00 0.00 0.00 1.00])
                  (visible rect 0.00, 0.00 420.00 x 420.00)
                  (coverage rect -181.00, -114.00 800.00 x 600.00)
                  (intersects coverage rect 1)
                  (contentsScale 2.00)
                  (children 1
                    (GraphicsLayer
                      (bounds 420.00 420.00)
                      (visible rect 0.00, 0.00 420.00 x 420.00)
                      (coverage rect 0.00, 0.00 420.00 x 420.00)
                      (intersects coverage rect 1)
                      (contentsScale 2.00)
                      (children 1
                        (GraphicsLayer
                          (position 0.00 -90.00)
                          (bounds 418.00 510.00)
                          (contentsOpaque 1)
                          (visible rect 0.00, 90.00 418.00 x 420.00)
                          (coverage rect 0.00, 90.00 420.00 x 420.00)
                          (intersects coverage rect 1)
                          (contentsScale 2.00)
                          (children 1
                            (GraphicsLayer
                              (bounds 418.00 510.00)
                              (visible rect 0.00, 90.00 418.00 x 420.00)
                              (coverage rect 0.00, 90.00 418.00 x 420.00)
                              (intersects coverage rect 1)
                              (contentsScale 2.00)
                              (children 3
                                (GraphicsLayer
                                  (offsetFromRenderer width=-3000 height=0)
                                  (position -3000.00 0.00)
                                  (anchor 0.94 0.50)
                                  (bounds 3418.00 120.00)
                                  (usingTiledLayer 1)
                                  (drawsContent 1)
                                  (visible rect 3000.00, 90.00 418.00 x 30.00)
                                  (coverage rect 3000.00, 90.00 418.00 x 420.00)
                                  (intersects coverage rect 1)
                                  (contentsScale 2.00)
                                )
                                (GraphicsLayer
                                  (offsetFromRenderer width=-3000 height=0)
                                  (position -3000.00 120.00)
                                  (anchor 0.94 0.50)
                                  (bounds 3418.00 120.00)
                                  (usingTiledLayer 1)
                                  (drawsContent 1)
                                  (visible rect 3000.00, 0.00 418.00 x 120.00)
                                  (coverage rect 3000.00, -30.00 418.00 x 420.00)
                                  (intersects coverage rect 1)
                                  (contentsScale 2.00)
                                )
                                (GraphicsLayer
                                  (offsetFromRenderer width=-3000 height=0)
                                  (position -3000.00 240.00)
                                  (anchor 0.94 0.50)
                                  (bounds 3418.00 120.00)
                                  (usingTiledLayer 1)
                                  (drawsContent 1)
                                  (visible rect 3000.00, 0.00 418.00 x 120.00)
                                  (coverage rect 3000.00, -150.00 418.00 x 420.00)
                                  (intersects coverage rect 1)
                                  (contentsScale 2.00)
                                )
                              )
                            )
                          )
                        )
                      )
                    )
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)

