wood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/* @test
   @summary Test AudioFloatInputStream close method
   @modules java.desktop/com.sun.media.sound
*/

import java.io.*;

import javax.sound.sampled.*;

import com.sun.media.sound.*;

public class Close {

    static float[] test_float_array;
    static byte[] test_byte_array;
    static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);

    static AudioFloatInputStream getStream1()
    {
        return AudioFloatInputStream.getInputStream(format, test_byte_array, 0, test_byte_array.length);
    }

    static AudioFloatInputStream getStream2()
    {
        AudioInputStream strm = new AudioInputStream(new ByteArrayInputStream(test_byte_array), format, 1024);
        return AudioFloatInputStream.getInputStream(strm);
    }

    static void setUp() throws Exception {
        test_float_array = new float[1024];
        test_byte_array = new byte[1024*format.getFrameSize()];
        for (int i = 0; i < 1024; i++) {
            double ii = i / 1024.0;
            ii = ii * ii;
            test_float_array[i] = (float)Math.sin(10*ii*2*Math.PI);
            test_float_array[i] += (float)Math.sin(1.731 + 2*ii*2*Math.PI);
            test_float_array[i] += (float)Math.sin(0.231 + 6.3*ii*2*Math.PI);
            test_float_array[i] *= 0.3;
        }
        AudioFloatConverter.getConverter(format).toByteArray(test_float_array, test_byte_array);
    }

    public static void main(String[] args) throws Exception {
        setUp();
        getStream1().close();
        getStream2().close();
    }

}
/*
 * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

/* @test
   @summary Test AudioFloatInputStream skip method
   @modules java.desktop/com.sun.media.sound
*/

import java.io.*;

import javax.sound.sampled.*;

import com.sun.media.sound.*;

public class Skip {

    static float[] test_float_array;
    static byte[] test_byte_array;
    static AudioFormat format = new AudioFormat(44100, 16, 1, true, false);

    static AudioFloatInputStream getStream1()
    {
        return AudioFloatInputStream.getInputStream(format, test_byte_array, 0, test_byte_array.length);
    }

    static AudioFloatInputStream getStream2()
    {
        AudioInputStream strm = new AudioInputStream(new ByteArrayInputStream(test_byte_array), format, 1024);
        return AudioFloatInputStream.getInputStream(strm);
    }

    static void setUp() throws Exception {
        test_float_array = new float[1024];
        test_byte_array = new byte[1024*format.getFrameSize()];


師安西歐要你去艾蘭達瀑布裝滿蒼藍之瓶。"}},
[9404] = {"適者生存", nil, {"殺死永歌森林守衛者直到找到完美的樹枝給導師安西歐。"}},
[9405] = {"大酋長的命令", nil, {"把沉重的石斧帶給在地獄火半島索爾瑪的先知瑞卡酷。"}},
[9406] = {"瑪格哈", nil, {"將來自瑪格哈的信送回地獄火半島給索爾瑪的納茲格雷爾。"}},
[9407] = {"通過黑暗之門", nil, {"傳過黑暗之門找到歐萊恩中將。他在另外一邊等著你的到達，就在外域裡。"}},
[9409] = {"緊急送件!", nil, {"將一捆瓶子送到安曼谷給失事地點的薩度恩。"}},
[9410] = {"精神指引", nil, {"在你到找克魯恩·斷脊氏族屍體的地點使用狼圖騰，然後跟著先祖之狼圖騰的靈魂。"}},
[9415] = {"向治安官藍牆報告", nil, {"到佐拉蟲巢旁的聯盟營地和治安官藍牆談談。"}},
[9416] = {"向奇立卡將軍報告", nil, {"到雷戈蟲巢旁的部落營地和奇立卡將軍談談。"}},
[9417] = {"阿拉卡的威脅", nil, {"地獄火半島的葛明尼·長鬚要你殺死4個海艾斯風行者和6個海艾斯猛爪護衛。"}},
[9418] = {"艾芙魯的寶珠", nil, {"把艾芙魯的寶珠帶回地獄火半島，到海艾斯洞穴東南方的海艾斯祭壇，一旦艾羅那斯重獲自由就把寶珠交給他。"}},
[9419] = {"穿過沙漠", nil, {"找到並將希利塞斯紅塵送到希利塞斯提取器那裡，再到佐拉蟲巢附近的聯盟營地和治安官藍牆談談。"}},
[9420] = {"完美的羽毛", nil, {"地獄火半島的麥倫·長鬚要你從海艾斯洞穴不同種類的卡里瑞身上弄到8根卡里瑞羽毛。"}},
[9421] = {"薩滿訓練", nil, nil},
[9422] = {"


        color: white;
        padding: 0px 25px;
        padding-top: 19px;

      }
      &:before {
        display: none;
      }
    }

    .checkbox {
      @include transition-transform(0.2s ease-in-out);
      @include translateX (-60px);
      position: absolute !important;
      left: 0px;
      pointer-events: none;
      width: 100%;
      z-index: 100;
    }

    > span {
      @include transition-transform(0.2s ease-in-out);
      display: block;
      min-height: 60px;
      line-height: 58px;
      font-size: 15px;

      color: $medium;
      text-decoration: none;

      padding: 0px 25px;

      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      width: 100%;

      // &:active {background-color: $dark !important; }

      &:first-letter {
        // text-transform: capitalize;
      }
      &.thumbnail {
        padding: 0px 25px;
        padding-top: 25px;

        img {
          display: block;
          max-width: 100%;
        }
      }
    }
  }
}

.light .list > li{
  &.editing,
  &:active,
  &.loading,
  &.active {
    > span {
      color: black;
      &:after {
        color: black !important;
      }
    }
  }
}

@-webkit-keyframes pulse {
    0% { @include scale(0,0); }
    50% { @include scale(0.3,0.3); }
    100% { @include scale(0,0); }
}

@-webkit-keyframes collapse {
    0% { max-height: 60px; }
    100% { max-height: 0px; }
}
a,
button {
	cursor: default !important;
}

body {
	@apply cursor-default;
	-webkit-user-select: none;
	// font-family: 'InterVariable', sans-serif;
}

.app-background {
	@apply bg-app;
}

.frame::before {
	@apply bg-app-frame;
	content: '';
	pointer-events: none;
	user-select: none;
	position: absolute;
	inset: 0px;
	border-radius: inherit;
	padding: 1px;
	mask:
		linear-gradient(black, black) content-box content-box,
		linear-gradient(black, black);
	mask-composite: xor;
	z-index: 9999;
}

.has-blur-effects {
	.app-background {
		// adjust macOS blur intensity here
		// @apply bg-app/[0.88];
		@apply bg-app;
	}
}

.no-scrollbar {
	-ms-overflow-style: none; /* for Internet Explorer, Edge */
	scrollbar-width: none; /* for Firefox */
	overflow-y: scroll;
}

.no-scrollbar::-webkit-scrollbar {
	display: none;
}

.no-scrollbar::-webkit-scrollbar {
	display: none;
}

/*Tooltip*/

.TooltipContent {
	animation-duration: 0.6s;
	animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
}
.TooltipContent[data-side='top'] {
	animation-name: slideUp;
}
.TooltipContent[data-side='bottom'] {
	animation-name: slideDown;
}

.TooltipContent[dat


end div.el-select:hover .el-input__inner {
  border-color: transparent;
  background-color: transparent;
  color: inherit;
  border-top: 0;
  border-bottom: 0
}

.el-input-group__append .el-button,
.el-input-group__append .el-input,
.el-input-group__prepend .el-button,
.el-input-group__prepend .el-input {
  font-size: inherit
}

.el-input-group__prepend {
  border-right: 0
}

.el-input-group__append {
  border-left: 0
}

.el-input-group--append .el-select .el-input.is-focus .el-input__inner,
.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner {
  border-color: transparent
}

.el-input__inner::-ms-clear {
  display: none;
  width: 0;
  height: 0
}

.el-button {
  display: inline-block;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  background: #fff;
  border: 1px solid #dcdfe6;
  color: #606266;
  -webkit-appearance: none;
  text-align: center;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  outline: 0;
  margin: 0;
  -webkit-transition: .1s;
  transition: .1s;
  padding: 12px 20px;
  font-size: 14px;
  border-radius: 4px
}

.el-button+.el-button {
  margin-left: 10px
}

.el-button:focus,
.el-button:hover {
  color: #00D1B2;
  border-color: rgb(179, 241, 232);
  background-color: rgb(230, 250, 247)
}

.el-button:active {
  color: rgb(0, 188, 160);
  border-color: rgb(0, 188, 160);
  outline: 0
}

.el-button::-moz-focus-inner {
  border: 0
}

.el-button [class*=el-icon-]+span {
  margin-left: 5px
}

.el-button.is-plain:focus,
.el-button.is-plain:hover {
  background: #fff;
  border-color: #00D1B2;
  color: #00D1B2
}

.el-button.is-active,
.el-button.is-plain:active {
  color: rgb(0, 188, 160);
  border-color: rgb(0, 188, 160)
}

.el-button.is-plain:active {
  background: #fff;
  outline: 0
}

.el-button.is-disabled,
.el-button.is-disabled:focus,
.el-button.is-disabled:hover {
  color: #c0c4cc;
  cursor: not-allowed;
  background-image: none;
  background-color: #fff;
  border-color: #ebeef5
}

.el-button.is-disabled.el-button--text {
  background-color: transparent
}

.el-button.is-disabled.is-plain,
.el-button.is-disabled.is-plain:focus,
.el-button.is-disabled.is-plain:hover {
  background-color: #fff;
  border-color: #ebeef5;
  color: #c0c4cc
}

.el-button.is-loading {
  position: relative;
  pointer-events: none
}

.el-button.is-loading:before {
  pointer-events: none;
  content: '';
  position: absolute;
  left: -1px;
  top: -1px;
  right: -1


/*-
 * Copyright (c) 1989, 1991, 1993, 1994
 *	The Regents of the University of California.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef lint
static char const copyright[] =
"@(#) Copyright (c) 1989, 1991, 1993, 1994\n\
	The Regents of the University of California.  All rights reserved.\n";
#endif /* not lint */

#ifndef lint
#if 0
static char sccsid[] = "@(#)stty.c	8.3 (Berkeley) 4/2/94";
#endif
#endif /* not lint */
#include <sys/cdefs.h>
__RCSID("$FreeBSD: src/bin/stty/stty.c,v 1.20 2002/06/30 05:15:04 obrien Exp $");

#include <sys/types.h>

#include <ctype.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "stty.h"
#include "extern.h"

int
main(int argc, char *argv[])
{
	struct info i;
	enum FMT fmt;
	int ch;

	fmt = NOTSET;
	i.fd = STDIN_FILENO;

	opterr = 0;
	while (optind < argc &&
	    strspn(argv[optind], "-aefg") == strlen(argv[optind]) &&
	    (ch = getopt(argc, argv, "aef:g")) != -1)
		switch(ch) {
		case 'a':		/* undocumented: POSIX compatibility */
			fmt = POSIX;
			break;
		case 'e':
			fmt = BSD;
			break;
		case 'f':
			if ((i.fd = open(optarg, O_RDONLY | O_NONBLOCK)) < 0)
				err(1, "%s", optarg);
			break;
		case 'g':
			fmt = GFLAG;
			break;
		case '?':
		default:
			goto args;
		}

args:	argc -= optind;
	argv += optind;

	if (tcgetattr(i.fd, &i.t) < 0)
		errx(1, "stdin isn't a terminal");
	if (ioctl(i.fd, TIOCGETD, &i.ldisc) < 0)
		err(1, "TIOCGETD");
	if (ioctl(i.fd, TIOCGWINSZ, &i.win) < 0)
		warn("TIOCGWINSZ");

	checkredirect();			/* conversion aid */

	switch(fmt) {
	case NOTSET:
		if (*argv)
			break;
		/* FALLTHROUGH */
	case BSD:
	case POSIX:
		print(&i.t, &i.win, i.ldisc, fmt);
		break;
	case GFLAG:
		gprint(&i.t, &i.win, i.ldisc);
		break;
	}

	for (i.set = i.wset = 0; *argv; ++argv) {
		if (ksearch(&argv, &i))
			continue;

		if (csearch(&argv, &i))
			continue;

		if (msearch(&argv, &i))
			continue;

		if (isdigit(**argv)) {
			speed_t speed;

			speed = atoi(*argv);
			cfsetospeed(&i.t, speed);
			cfsetispeed(&i.t, speed);
			i.set = 1;
			continue;
		}

		if (!strncmp(*argv, "gfmt1", sizeof("gfmt1") - 1)) {
			gread(&i.t, *argv + sizeof("gfmt1") - 1);
			i.set = 1;
			continue;
		}

		warnx("illegal option -- %s", *argv);
		usage();
	}

	if (i.set && tcsetattr(i.fd, 0, &i.t) < 0)
		err(1, "tcsetattr");
	if (i.wset && ioctl(i.fd, TIOCSWINSZ, &i.win) < 0)
		warn("TIOCSWINSZ");
	exit(0);
}

void
usage(void)
{

	(void)fprintf(stderr, "usage: stty [-a|-e|-g] [-f file] [options]\n");
	exit (1);
}


Bart language reference
=======================
Bart supports: [interpolation](#interpolation), [verbatim
interpolation](#verbatim-interpolation), …

Interpolation
-------------
```
# #[macro_use] extern crate bart_derive;
# #[derive(BartDisplay)]
# #[template_string = "\
Hello {{name}}
# "]
# struct HelloWorld<'a> {
#     name: &'a str,
# }
#
# fn main() {
#     assert_eq!(
#         "Hello World < &\n",
#         format!("{}", &HelloWorld { name: "World < &" })
#     );
# }
```
Include fields by delegating to the [`Display`][Display] trait.

Interpolations are HTML escaped, so it is safe to include user input this way.

Verbatim interpolation
----------------------
```
# #[macro_use] extern crate bart_derive;
# #[derive(BartDisplay)]
# #[template_string = "\
Hello {{{name}}}
# "]
# struct HelloWorld<'a> {
#     name: &'a str,
# }
#
# fn main() {
#     assert_eq!(
#         "Hello World < &\n",
#         format!("{}", &HelloWorld { name: "World < &" })
#     );
# }
```
Include fields by delegating to the [`Display`][Display] trait.

Verbatim interpolations are not HTML escaped and are suitable for including
HTML content that is otherwise known to be safe.

It can be valuable to use verbatim interpolation to include other Bart
templates.

*/

#![cfg_attr(feature = "specialization", feature(specialization))]

#[macro_use] extern crate nom;

mod display_html_safe;

// With specialization, DisplayHtmlSafe could be something that the
// user wants to deal with. But specialization is still unstable.
#[doc(hidden)]
pub use display_html_safe::DisplayHtmlSafe;

mod conditional;
pub use conditional::Conditional;

mod negative_iterator;
pub use negative_iterator::NegativeIterator;
// Copyright 2019 Red Hat, Inc. All Rights Reserved.
//
// Portions Copyright 2019 Intel Corporation. All Rights Reserved.
//
// Portions Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//
// Portions Copyright 2017 The Chromium OS Authors. All rights reserved.
//
// SPDX-License-Identifier: (Apache-2.0 AND BSD-3-Clause)

#[macro_use(crate_version, crate_authors)]
extern crate clap;
extern crate vhost_user_block;

use clap::{App, Arg};
use vhost_user_block::start_block_backend;

fn main() {
    let cmd_arguments = App::new("vhost-user-blk backend")
        .version(crate_version!())
        .author(crate_authors!())
        .about("Launch a vhost-user-blk backend.")
        .arg(
            Arg::with_name("block-backend")
                .long("block-backend")
                .help(vhost_user_block::SYNTAX)
                .takes_value(true)
                .min_values(1),
        )
        .get_matches();

    let backend_command = cmd_arguments.value_of("block-backend").unwrap();
    start_block_backend(backend_command);
}
use crate::ZaraController;
use crate::utils::{FrameC, EnvironmentC, HealthC, FrameSummaryC, PlayerStatusC, ActiveDiseaseC, ActiveInjuryC};
use crate::utils::event::{Listener, Event, MessageQueue};
use crate::error::ZaraUpdateErr;
use crate::health::StageLevel;

use std::time::Duration;
use std::collections::BTreeMap;
use std::cell::RefMut;

/// How frequently should Zara update all its controllers,
/// recalculate values and check monitors (real seconds)
/// when player is awake
const UPDATE_INTERVAL: f32 = 1.;
/// How frequently should Zara update all its controllers,
/// recalculate values and check monitors (real seconds)
/// when player is sleeping
const SLEEPING_UPDA


pShadowPaint() {
        mPaint.reset()
        mPaint.isAntiAlias = true
        mPaint.color = Color.TRANSPARENT
        mPaint.setShadowLayer(mShadowRadius, mShadowDx, mShadowDy, mShadowColor)
    }

    /**
     * dip2px dp 值转 px 值
     *
     * @param dpValue dp 值
     * @return px 值
     */
    private fun dip2px(dpValue: Float): Float {
        val dm = context.resources.displayMetrics
        val scale = dm.density
        return dpValue * scale + 0.5f
    }

    companion object {
        const val ALL = 0x1111
        const val LEFT = 0x0001
        const val TOP = 0x0010
        const val RIGHT = 0x0100
        const val BOTTOM = 0x1000
        const val SHAPE_RECTANGLE = 0x0001
        const val SHAPE_OVAL = 0x0010
    }

}package ltd.finelink.read.ui.config

import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import ltd.finelink.read.R
import ltd.finelink.read.base.BaseDialogFragment
import ltd.finelink.read.constant.PreferKey
import ltd.finelink.read.databinding.DialogCheckSourceConfigBinding
import ltd.finelink.read.lib.theme.primaryColor
import ltd.finelink.read.model.CheckSource
import ltd.finelink.read.utils.putPrefString
import ltd.finelink.read.utils.setLayout
import ltd.finelink.read.utils.toastOnUi
import ltd.finelink.read.utils.viewbindingdelegate.viewBinding
import splitties.views.onClick

class CheckSourceConfig : BaseDialogFragment(R.layout.dialog_check_source_config) {

    private val binding by viewBinding(DialogCheckSourceConfigBinding::bind)

    //允许的最小超时时间，秒
    private val minTimeout = 0L

    override fun onStart() {
        super.onStart()
        setLayout(0.9f, ViewGroup.LayoutParams.WRAP_CONTENT)
    }

    override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
        binding.toolBar.setBackgroundColor(primaryColor)
        binding.run {
            checkSearch.onClick {
                if (!checkSearch.isChecked && !checkDiscovery.isChecked) {
                    checkDiscovery.isChecked = true
                }
            }
            checkDiscovery.onClick {
                if (!checkSearch.isChecked && !checkDiscovery.isChecked) {
                    checkSearch.isChecked = true
                }
            }
            checkInfo.onClick {
                if (!checkInfo.isChecked) {
                    checkCategory.isChecked = false
                    checkContent.isChecked = false
                    checkCategory.isEnabled = false
                    checkContent.isEnabled = false
                } else {
                    checkCategory.isEnabled = true
                }
            }
            checkCategory.onClick {
                if (!checkCategory.isChecked) {
                    checkContent.isChecked = false
                    checkContent.isEnabled = false
                } else {
                    checkContent.isEnabled = true
                }
            }
        }
        CheckSource.run {
            binding.checkSourceTimeout.setText((timeout / 1000).toString())
            binding.checkSearch.isChecked = checkSearch
            binding.checkDiscovery.isChecked = checkDiscovery
            binding.checkInfo.isChecked = checkInfo
            binding.checkCategory.isChecked = checkCategory
            binding.checkContent.isChecked = checkContent
            binding.checkCategory.isEnabled = checkInfo
            binding.checkContent.isEnabled = checkCategory
            binding.tvCancel.


card-dashboard-audience-metrics .flot-chart .flot-x-axis>div{display:block}}.card-dashboard-audience-metrics .flot-chart .flot-x-axis>div span:last-child{padding-left:2px;font-weight:700;color:#1c273c}.card-dashboard-audience-metrics .card-body{background-color:#f4f5f8;display:flex;padding:0 20px 20px;flex:none;position:relative;z-index:10}.card-dashboard-audience-metrics .card-body>div+div{margin-left:10px;padding-left:10px;border-left:1px solid #b4bdce}@media (min-width: 576px){.card-dashboard-audience-metrics .card-body>div+div{margin-left:20px;padding-left:20px}}.card-dashboard-audience-metrics .card-body h4{font-weight:700;font-size:17px;font-family:"Archivo",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";color:#1c273c;letter-spacing:-.5px;margin-bottom:3px}@media (min-width: 576px){.card-dashboard-audience-metrics .card-body h4{font-size:21px}}.card-dashboard-audience-metrics .card-body label{margin-bottom:0;display:flex;align-items:center;font-size:11px}@media (min-width: 576px){.card-dashboard-audience-metrics .card-body label{font-size:.875rem}}.card-dashboard-audience-metrics .card-body label span{display:inline-block;width:9px;height:9px;margin-right:5px;border-radius:100%}.bg-primary-dark{background-color:#03c}.az-iconbar-primary{background-color:#0040ff;padding-top:0}.az-iconbar-primary .az-img-user::after{box-shadow:none}.az-iconbar-primary .az-iconbar-logo{background-color:#0039e6;color:#fff;height:64px}.az-iconbar-primary .az-iconbar-logo::after{display:none}.az-iconbar-primary .nav{justify-content:center}.az-iconbar-primary .nav-link{width:42px;height:42px;color:rgba(255,255,255,0.5);border-radius:3px;transition:all 0.2s ease-in-out}@media (prefers-reduced-motion: reduce){.az-iconbar-primary .nav-link{transition:none}}.az-iconbar-primary .nav-link:hover,.az-iconbar-primary .nav-link:focus{color:#fff;background-color:rgba(255,255,255,0.1)}.az-iconbar-primary .nav-link.active{color:#fff;background-color:rgba(255,255,255,0.2)}.az-iconbar-primary .az-iconbar-help{color:rgba(255,255,255,0.5)}.az-iconbar-primary .az-iconbar-help:hover,.az-iconbar-primary .az-iconbar-help:focus{color:#fff}.az-iconbar-aside-primary{width:250px;background-color:#f4f5f8;box-shadow:0 0 16px rgba(28,39,60,0.08);border-right:1px solid #cdd4e0}.az-iconbar-aside-primary .az-iconbar-header{padding:18px 25px;background-color:#fff;border-bottom:1px solid #e3e7ed}.az-iconbar-aside-primary .az-iconbar-body{padding:20px 25px}.az-iconbar-aside-primary .az-iconbar-body .nav{padding-top:0;padding-left:0;border-left-width:0}.az-iconbar-aside-primary .az-iconbar-body .nav-


sides under a Source folder.
		string SourceDir = InnermostParentDirectoryPathWithName("Source", ProgramsDir);

		// The program is assumed to reside inside the "Engine" folder.
		string EngineDir = InnermostParentDirectoryPathWithName("Engine", SourceDir);

		// The default Binaries path is assumed to be a sibling of "Source" folder.
		string DefaultBinDir = Path.GetFullPath(Path.Combine(SourceDir, "..", "Binaries", Platform.ToString()));

		// We assume that the engine exe resides in Engine/Binaries/[Platform]
		string EngineBinariesDir = Path.Combine(EngineDir, "Binaries", Platform.ToString());

		// Now we calculate the relative path between the default output directory and the engine binaries,
		// in order to force the output of this program to be in the same folder as th engine.
		ExeBinariesSubFolder = (new DirectoryReference(EngineBinariesDir)).MakeRelativeTo(new DirectoryReference(DefaultBinDir));

		// Setting this is necessary since we are creating the binaries outside of Restricted.
		bLegalToDistributeBinary = true;

		// We still need to copy the resources, so at this point we might as well copy the files where the default Binaries folder was meant to be.
		// MobuLiveLinkPlugin.xml will be unaware of how the files got there.

		string ResourcesDir = Path.Combine(ProgramsDir, "MobuLiveLink", "Resources");
		string PostBuildBinDir = Path.Combine(DefaultBinDir, "MotionBuilder", InMobuVersionString);
		string TbbDependency = Path.Combine(EngineBinariesDir, "tbb12.dll");
		string TbbMallocDependency = Path.Combine(EngineBinariesDir, "tbbmalloc.dll");

		// Copy resources
		PostBuildSteps.Add(string.Format("echo Copying {0} to {1}...", ResourcesDir, PostBuildBinDir));
		PostBuildSteps.Add(string.Format("xcopy /y /i /v \"{0}\\*.*\" \"{1}\" 1>nul", ResourcesDir, PostBuildBinDir));

		// Copy binaries
		PostBuildSteps.Add(string.Format("echo Copying {0} to {1}...", EngineBinariesDir, PostBuildBinDir));
		PostBuildSteps.Add(string.Format("xcopy /y /i /v \"{0}\\{1}.*\" \"{2}\" 1>nul", EngineBinariesDir, LaunchModuleName, PostBuildBinDir));

		// Copy support dlls
		PostBuildSteps.Add(string.Format("echo Copying {0} to {1}...", TbbDependency, PostBuildBinDir));
		PostBuildSteps.Add(string.Format("xcopy /y /i /r /v \"{0}\" \"{1}\" 1>nul", TbbDependency, PostBuildBinDir));
		PostBuildSteps.Add(string.Format("xcopy /y /i /r /v \"{0}\" \"{1}\" 1>nul", TbbMallocDependency, PostBuildBinDir));
	}
}

public class MobuLiveLinkPlugin2017Target : MobuLiveLinkPluginTargetBase
{
	public MobuLiveLinkPlugin2017Target(TargetInfo Target) : base(Target, "2017")
	{
	}
}


augment void topLevelFunction2(int a, int b, ) {
  throw 42;
}*/
@FunctionDefinitionMacro1()
external void topLevelFunction2(int a, int b);

/*member: topLevelFunction3:
definitions:
augment void topLevelFunction3(int a, [int? b, ]) {
  throw 42;
}*/
@FunctionDefinitionMacro1()
external void topLevelFunction3(int a, [int? b]);

/*member: topLevelFunction4:
definitions:
augment void topLevelFunction4(int a, {int? b, int? c, }) {
  throw 42;
}*/
@FunctionDefinitionMacro1()
external void topLevelFunction4(int a, {int? b, int? c});
// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';
import 'package:_fe_analyzer_shared/src/macros/api.dart';
import 'dart:collection';

macro

class DataClass implements ClassDeclarationsMacro, ClassDefinitionMacro {
  const DataClass();

  FutureOr<void> buildDeclarationsForClass(IntrospectableClassDeclaration clazz,
      ClassMemberDeclarationBuilder builder) async {
    Uri dartCore = Uri.parse('dart:core');
    Identifier objectIdentifier =
    await builder.resolveIdentifier(dartCore, 'Object');
    Identifier boolIdentifier =
    await builder.resolveIdentifier(dartCore, 'bool');
    Identifier intIdentifier =
    await builder.resolveIdentifier(dartCore, 'int');
    Identifier stringIdentifier =
    await builder.resolveIdentifier(dartCore, 'String');

    List<FieldDeclaration> fields = await builder.fieldsOf(clazz);
    List<Object> constructorParts = ['const ', clazz.identifier.name, '({'];
    String comma = '';
    for (FieldDeclaration field in fields) {
      constructorParts.addAll([comma, 'required this.', field.identifier]);
      comma = ', ';
    }
    constructorParts.add('});');
    builder.declareInClass(new DeclarationCode.fromParts(constructorParts));

    builder.declareInClass(new DeclarationCode.fromParts([
      'external ', intIdentifier, ' get hashCode;']));
    builder.declareInClass(new DeclarationCode.fromParts([
      'external ',
      boolIdentifier,
      ' operator ==(',
      objectIdentifier,
      ' other);'
    ]));
    builder.declareInClass(new DeclarationCode.fromParts([
      'external ', stringIdentifier, ' toString();']));
  }

  FutureOr<void> buildDefinitionForClass(IntrospectableClassDeclaration clazz,
      ClassDefinitionBuilder builder) async {
    Uri dartCore = Uri.parse('dart:core');
    Identifier identicalIdentifier =
    await builder.resolveIdentifier(dartCore, 'identical');

    List<FieldDeclaration> fields = await builder.fieldsOf(clazz);
    List<MethodDeclaration> methods = await builder.methodsOf(clazz);

    FunctionDefinitionBuilder hashCodeBuilder = await builder.buildMethod(
        methods
            .firstWhere((e) => e.identifier.name == 'hashCode')
            .identifier);
    FunctionDefinitionBuilder equalsBuilder = await builder.buildMethod(
        methods
            .firstWhere((e) => e.identifier.name == '==')
            .identifier);
    FunctionDefinitionBuilder toStringBuilder = await builder.buildMethod(
        methods
            .firstWhere((e) => e.identifier.name == 'toString')
            .identifier);

    List<Object> hashCodeParts = ['''{
    return '''
    ];

    List<O


    ngOnDestroy() {
        this.idleEndsubscribtion.unsubscribe();
        this.idleStartsubscribtion.unsubscribe();
        this.warningsubscribtion.unsubscribe();
        this.timeoutsubscribtion.timeoutsubscribtion();
    }
}
import * as actions from '../index';
import { AxiosInstance } from 'axios';
import { Dispatch } from 'redux';

const mockStrings: String[] = ['a', 'b', 'c'];
const error = new Error('There was an error :(');
let dispatch: any;
let getState: any;
let api: any;

describe('fetchStrings', () => {
  beforeEach(() => {
    dispatch = jest.fn() as Dispatch<any>;
    getState = jest.fn() as () => any;
    api = {} as AxiosInstance;
  });

  test('should dispatch an action when data is returned', () => {
    api.get = jest.fn(() => Promise.resolve(mockStrings));

    return actions
      .fetchStrings()(dispatch, getState, api)
      .then(() => {
        expect(dispatch).toBeCalledWith({
          type: actions.FETCH_STRINGS,
          meta: {},
          payload: mockStrings,
        });
      });
  });

  test('should dispatch an error when api cannot get data', () => {
    api.get = jest.fn(() => Promise.reject(error));

    return actions
      .fetchStrings()(dispatch, getState, api)
      .then(() => {
        expect(dispatch).toBeCalledWith({
          type: actions.FETCH_STRINGS,
          payload: error,
          error: true,
        });
      });
  });

  test('should call /resume endpoint', () => {
    api.get = jest.fn(() => Promise.resolve());

    return actions
      .fetchStrings()(dispatch, getState, api)
      .then(() => {
        expect(api.get).toBeCalledWith('/strings');
      });
  });
});
/**
 * maxProfit
 * @author guobin201314@gmail.com on 2019-01-16
 */

const maxProfit = function(prices: number[]) {
  let res = 0
  let temp = 0
  for (let i = 0; i < prices.length; i++) {
    temp = prices[i]
    if (prices[i + 1] > prices[i]) {
      res += prices[i + 1] - temp
    }
  }
  return res
}

export default maxProfit
import { BaseModel } from './base-model';
import { User } from './user';
import { Match } from './match';

export class Prediction extends BaseModel {
  id: number = null;
  user: User = null;
  match: Match = null;
  matchId: number = null;
  goalsHome: number = null;
  goalsAway: number = null;
  prevGoalsHome: number = null;
  prevGoalsAway: number = null;
  points: number = null;
  editable = true;
  forceDisabled = false;
  markedSuccess = false;
  markedError = false;
  errorGoalsHome: string = null;
  errorGoalsAway: string = null;

  constructor(
    options?: any
  ) {
    super();
    this.setValuesByJson(options);
    this.matchId = this.match ? this.match.id : null;
  }

  private isInteger(val: any): boolean {
    return /^\+?(0|[1-9]\d*)$/.test(val.toString());
  }

  goalsValid(goals: number, checkEmpty: boolean = false): boolean {
    let isNotEmpty = true;
    if (checkEmpty) {
      isNotEmpty = goals !== null && goals !== undefined ? true : false;
    }
    return (isNotEmpty && this.isInteger(goals) && goals >= 0);
  }

  goalsHomeAwaySet(): boolean {
    if (!this.goalsAway && this.goalsAway !== 0 && !this.goalsHome


    }
.component-162 {
    clip-path: polygon(27.7% 56.645963%, 27.6% 56.770186%, 27.6% 56.89441%, 27.5% 57.018634%, 27.4% 57.018634%, 26.9% 57.639752%, 26.7% 57.639752%, 26.6% 57.763975%, 26.5% 57.763975%, 26.4% 57.888199%, 26.3% 57.888199%, 26.2% 58.012422%, 26.1% 58.012422%, 26% 58.136646%, 25.7% 58.136646%, 25.6% 58.012422%, 25.3% 58.012422%, 25.2% 57.888199%, 25% 57.888199%, 24.9% 58.012422%, 25.2% 58.385093%, 25.4% 58.385093%, 25.5% 58.509317%, 26% 58.509317%, 26.1% 58.385093%, 26.4% 58.385093%, 26.5% 58.26087%, 26.7% 58.26087%, 26.8% 58.136646%, 26.9% 58.136646%, 27.2% 57.763975%, 27.3% 57.763975%, 27.4% 57.639752%, 27.4% 57.515528%, 27.8% 57.018634%, 27.8% 56.770186%);
    background-color: rgb(106, 12, 82)
    }
.component-163 {
    clip-path: polygon(25.1% 46.086957%, 25% 46.21118%, 25% 47.080745%, 25.1% 47.204969%, 25.2% 47.204969%, 25.3% 47.080745%, 25.3% 46.956522%, 25.4% 46.832298%, 25.4% 46.708075%, 25.3% 46.583851%, 25.3% 46.21118%, 25.2% 46.086957%);
    background-color: rgb(229, 182, 0)
    }
.component-164 {
    clip-path: polygon(28% 83.850932%, 27.9% 83.975155%, 27.6% 83.975155%, 27.5% 84.099379%, 27.3% 84.099379%, 26.7% 84.84472%, 26.3% 84.84472%, 26.2% 84.968944%, 25.6% 84.968944%, 25.5% 85.093168%, 25.3% 85.093168%, 25.2% 85.217391%, 25.1% 85.217391%, 25% 85.341615%, 25.1% 85.465839%, 25.2% 85.465839%, 25.6% 85.962733%, 25.7% 85.962733%, 25.8% 86.086957%, 25.9% 86.086957%, 26% 86.21118%, 26.2% 86.21118%, 26.3% 86.335404%, 26.6% 86.335404%, 26.7% 86.459627%, 26.8% 86.459627%, 26.9% 86.583851%, 27.1% 86.583851%, 27.2% 86.708075%, 27.4% 86.708075%, 27.5% 86.832298%, 27.7% 86.832298%, 27.8% 86.708075%, 28.1% 86.708075%, 28.2% 86.583851%, 28.2% 86.335404%, 28.1% 86.21118%, 28.2% 86.086957%, 28.6% 86.086957%, 28.7% 86.21118%, 28.7% 86.335404%, 28.8% 86.459627%, 29.3% 86.459627%, 29.4% 86.583851%, 29.7% 86.583851%, 29.8% 86.708075%, 30% 86.708075%, 30.1% 86.832298%, 30.3% 86.832298%, 30.4% 86.708075%, 30.5% 86.832298%, 30.9% 86.832298%, 31%


ide
  late final _TranslationsDialogsFavoriteDialogSr favoriteDialog = _TranslationsDialogsFavoriteDialogSr._(_root);
  @override
  late final _TranslationsDialogsFavoriteDeleteDialogSr favoriteDeleteDialog = _TranslationsDialogsFavoriteDeleteDialogSr._(_root);
  @override
  late final _TranslationsDialogsFavoriteEditDialogSr favoriteEditDialog = _TranslationsDialogsFavoriteEditDialogSr._(_root);
  @override
  late final _TranslationsDialogsFileInfoSr fileInfo = _TranslationsDialogsFileInfoSr._(_root);
  @override
  late final _TranslationsDialogsFileNameInputSr fileNameInput = _TranslationsDialogsFileNameInputSr._(_root);
  @override
  late final _TranslationsDialogsHistoryClearDialogSr historyClearDialog = _TranslationsDialogsHistoryClearDialogSr._(_root);
  @override
  late final _TranslationsDialogsLocalNetworkUnauthorizedSr localNetworkUnauthorized = _TranslationsDialogsLocalNetworkUnauthorizedSr._(_root);
  @override
  late final _TranslationsDialogsMessageInputSr messageInput = _TranslationsDialogsMessageInputSr._(_root);
  @override
  late final _TranslationsDialogsNoFilesSr noFiles = _TranslationsDialogsNoFilesSr._(_root);
  @override
  late final _TranslationsDialogsNoPermissionSr noPermission = _TranslationsDialogsNoPermissionSr._(_root);
  @override
  late final _TranslationsDialogsNotAvailableOnPlatformSr notAvailableOnPlatform = _TranslationsDialogsNotAvailableOnPlatformSr._(_root);
  @override
  late final _TranslationsDialogsQrSr qr = _TranslationsDialogsQrSr._(_root);
  @override
  late final _TranslationsDialogsQuickActionsSr quickActions = _TranslationsDialogsQuickActionsSr._(_root);
  @override
  late final _TranslationsDialogsQuickSaveNoticeSr quickSaveNotice = _TranslationsDialogsQuickSaveNoticeSr._(_root);
  @override
  late final _TranslationsDialogsQuickSaveFromFavoritesNoticeSr quickSaveFromFavoritesNotice =
      _TranslationsDialogsQuickSaveFromFavoritesNoticeSr._(_root);
  @override
  late final _TranslationsDialogsPinSr pin = _TranslationsDialogsPinSr._(_root);
  @override
  late final _TranslationsDialogsSendModeHelpSr sendModeHelp = _TranslationsDialogsSendModeHelpSr._(_root);
  @override
  late final _TranslationsDialogsZoomSr zoom = _TranslationsDialogsZoomSr._(_root);
}

// Path: sanitization
class _TranslationsSanitizationSr extends TranslationsSanitizationEn {
  _TranslationsSanitizationSr._(TranslationsSr root)
      : this._root = root,
        super.internal(root);

  final TranslationsSr _root; // ignore: unused_field

  // Translations
  @override
  String get empty => 'Naziv fajla ne može biti prazan';
  @override
  String get invalid => 'Naziv fajla sadrži nevažeće znakove';
}

// Path: tray
class _TranslationsTraySr extends TranslationsTrayEn {
  _TranslationsTraySr._(TranslationsSr root)
      : this._root = root,
        super.internal(root);

  final TranslationsSr _root; // ignore: unused_field

  // Translations
  @override
  String get open => _root.general.open;
  @override
  String get close => 'Napusti LocalSend';
  @override
  String get closeWindows => 'Izađi';
}

// Path: web
class _TranslationsWebSr extends TranslationsWebEn {
  _TranslationsWebSr._(TranslationsSr root)
      : this._root = root,
        super.internal(


.kotlin.logger

class S3FileStorageFunTest : WordSpec() {
    private val loopback = InetAddress.getLoopbackAddress()
    private val protocol = "http"
    private val port = Random.nextInt(1024, 49152) // See https://en.wikipedia.org/wiki/Registered_port.
        .also { logger.debug { "Using port $it for S3 Mock server." } }

    private val bucket = "ort-scan-results"

    private val handler = object : HttpHandler {
        val requests = mutableMapOf<String, String>()

        override fun handle(exchange: HttpExchange) {
            when (exchange.requestMethod) {
                "HEAD" -> {
                    val status = if (requests.containsKey(exchange.requestURI.toString())) {
                        HttpURLConnection.HTTP_OK
                    } else {
                        HttpURLConnection.HTTP_NOT_FOUND
                    }

                    exchange.sendResponseHeaders(status, -1)
                }

                "PUT" -> {
                    val key = exchange.requestURI.toString().removePrefix("/$bucket/")
                    requests[key] = exchange.requestBody.reader().use { it.readText() }.split('\n')[1].trimEnd()
                    exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, 0)
                }

                "GET" -> {
                    val key = exchange.requestURI.toString().removePrefix("/$bucket/")
                    val data = requests[key]

                    if (data != null) {
                        exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, 0)
                        exchange.responseBody.writer().use { it.write(data) }
                    } else {
                        exchange.sendResponseHeaders(HttpURLConnection.HTTP_NOT_FOUND, 0)
                        exchange.responseBody.bufferedWriter().use {
                            it.write(
                                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                                    "<Error>\n" +
                                    "  NoSuchKey\n" +
                                    "  <Message>The resource you requested does not exist</Message>\n" +
                                    "  <Resource>${exchange.requestURI}</Resource> \n" +
                                    "  <RequestId>4442587FB7D0A2F9</RequestId>\n" +
                                    "</Error>"
                            )
                        }
                    }
                }
            }
        }
    }

    // Start a local HTTP server to mock S3 with the system default value for queued incoming connections.
    private val server = HttpServer.create(InetSocketAddress(loopback, port), 0).apply {
        createContext("/", handler)
        start()
    }

    private val storage = S3FileStorage(
        accessKeyId = "key",
        awsRegion = "us-east-1",
        bucketName = bucket,
        compression = false,
        customEndpoint = "$protocol://${loopback.hostAddress}:$port",
        secretAccessKey = "secret"
    )

    override suspend fun afterEach(testCase: TestCase, result: TestResult) {
        handler.requests.clear()
    }

    override suspend fun afterSpec(spec: Spec) {
        // Ensure the server is properly stopped even in case of exceptions, but wait at most 5 seconds.
        server.stop(5)
    }

    init {
        "Querying for a file" should {
            "succeed if the file does not exist" {
                storage.exists("target/file") shouldBe false
            }
        }

        "Writing a file" should {
            "succeed if the file does not exist" {
                shouldNotThrowAny {
                    storage.write("target/file", "content".byteInputStream())
                }

                handler.requests["target/file"] shouldBe "content"
            }
        }

        "Reading a file" should {
            "succeed if the file exists" {


ons) svg.sweep {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg id='icon' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3Cstyle%3E .cls-1 %7B fill: none; %7D %3C/style%3E%3C/defs%3E%3Ctitle%3Eclean%3C/title%3E%3Crect x='20' y='18' width='6' height='2' transform='translate(46 38) rotate(-180)'/%3E%3Crect x='24' y='26' width='6' height='2' transform='translate(54 54) rotate(-180)'/%3E%3Crect x='22' y='22' width='6' height='2' transform='translate(50 46) rotate(-180)'/%3E%3Cpath d='M17.0029,20a4.8952,4.8952,0,0,0-2.4044-4.1729L22,3,20.2691,2,12.6933,15.126A5.6988,5.6988,0,0,0,7.45,16.6289C3.7064,20.24,3.9963,28.6821,4.01,29.04a1,1,0,0,0,1,.96H20.0012a1,1,0,0,0,.6-1.8C17.0615,25.5439,17.0029,20.0537,17.0029,20ZM11.93,16.9971A3.11,3.11,0,0,1,15.0041,20c0,.0381.0019.208.0168.4688L9.1215,17.8452A3.8,3.8,0,0,1,11.93,16.9971ZM15.4494,28A5.2,5.2,0,0,1,14,25H12a6.4993,6.4993,0,0,0,.9684,3H10.7451A16.6166,16.6166,0,0,1,10,24H8a17.3424,17.3424,0,0,0,.6652,4H6c.031-1.8364.29-5.8921,1.8027-8.5527l7.533,3.35A13.0253,13.0253,0,0,0,17.5968,28Z'/%3E%3Crect id='_Transparent_Rectangle_' data-name='<Transparent Rectangle>' class='cls-1' width='32' height='32'/%3E%3C/svg%3E%0A");
}
body:not(.no-sanctum-icons) svg.excalidraw-icon {
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg id='icon' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3Cstyle%3E .cls-1 %7B fill: none; %7D %3C/style%3E%3C/defs%3E%3Cpath d='M29.707,5.293l-3-3a.9994.9994,0,0,0-1.414,0L19.5859,8H17.0947A11.0118,11.0118,0,0,0,6.7124,15.3662L2.0562,28.67a1,1,0,0,0,1.2744,1.2739l13.3037-4.6562A11.012,11.012,0,0,0,24,14.9053V12.4141L29.707,6.707A.9994.9994,0,0,0,29.707,5.293Zm-7.414,6A1,1,0,0,0,22,12v2.9053A9.01,9.01,0,


context) {
      return custom_shader_path_demo_page.CustomShaderPathDemoPage();
    });
  },
  "列表联动 BottomSheet 效果": (context) {
    return ContainerAsyncRouterPage(
        list_link_bottomsheet_demo_page.loadLibrary(), (context) {
      return list_link_bottomsheet_demo_page.ListLinkBottomSheetDemoPage();
    });
  },
  "DraggableSheet 的 stick 效果": (context) {
    return ContainerAsyncRouterPage(
        demo_draggable_sheet_stick_page.loadLibrary(), (context) {
      return demo_draggable_sheet_stick_page.DemoDraggableSheetStickPage();
    });
  },
  "异步调用的顺序执行": (context) {
    return ContainerAsyncRouterPage(async_to_sync_call_page.loadLibrary(),
        (context) {
      return async_to_sync_call_page.AsyncToSyncCallPage();
    });
  },
  "点击爆炸的五角星（ChatGPT 生成代码）": (context) {
    return ContainerAsyncRouterPage(star_bomb_button_page.loadLibrary(),
        (context) {
      return star_bomb_button_page.StarBombButtonPage();
    });
  },
  "有趣画廊": (context) {
    return ContainerAsyncRouterPage(photo_gallery_demo_page.loadLibrary(),
        (context) {
      return photo_gallery_demo_page.PhotoGalleryDemoPage();
    });
  },
  "有趣的文本撕裂动画": (context) {
    return ContainerAsyncRouterPage(tear_text_demo_page.loadLibrary(),
        (context) {
      return tear_text_demo_page.TearTextDemoPage();
    });
  },
  "自适应横竖列表": (context) {
    return ContainerAsyncRouterPage(un_bounded_listview.loadLibrary(),
        (context) {
      return un_bounded_listview.UnboundedListViewDemoPage();
    });
  },
  "PageView嵌套PageView": (context) {
    return ContainerAsyncRouterPage(
        pageview_in_pageview_demo_page.loadLibrary(), (context) {
      return pageview_in_pageview_demo_page.PageViewInPageViewDemoPage();
    });
  },
  "手势密码": (context) {
    return ContainerAsyncRouterPage(gesture_password_demo_page.loadLibrary(),
        (context) {
      return gesture_password_demo_page.GesturePasswordDemoPage();
    });
  },
  "link scroll": (context) {
    return ContainerAsyncRouterPage(link_scroll_page.loadLibrary(), (context) {
      return link_scroll_page.LinkListViewPage();
    });
  },
  "glass": (context) {
    return ContainerAsyncRouterPage(glass_demo_page.loadLibrary(), (context) {
      return glass_demo_page.GlassDemoPage();
    });
  },
  "liquid glass": (context) {
    return ContainerAsyncRouterPage(liquid_glass_demo.loadLibrary(), (context) {
      return liquid_glass_demo.LiquidGlassShaderView();
    });
  },
  "liquid glass 2": (context) {
    return ContainerAsyncRouterPage(liquid_glass_demo2.loadLibrary(),
        (context) {
      return liquid_glass_demo2.LiquidGlassShaderView2();
    });
  },
};

enum Cat {
  black(1),
  white(2);

  ///2.17 之后可以直接添加 value
  const Cat(this.value);

  final int value;
}


    }

    @Test
    public void startTimeShouldNotBeAfterEnd() {
        final JoinWindows windowSpec = JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(ANY_SIZE));
        try {
            windowSpec.before(ofMillis(-ANY_SIZE - 1));
            fail("window start time should not be after window end time");
        } catch (final IllegalArgumentException e) {
            // expected
        }
    }

    @SuppressWarnings("deprecation")
    @Test
    public void untilShouldSetGraceDuration() {
        final JoinWindows windowSpec = JoinWindows.of(ofMillis(ANY_SIZE));
        final long windowSize = windowSpec.size();
        assertEquals(windowSize, windowSpec.grace(ofMillis(windowSize)).gracePeriodMs());
    }

    @Test
    public void gracePeriodShouldEnforceBoundaries() {
        JoinWindows.ofTimeDifferenceAndGrace(ofMillis(3L), ofMillis(0L));

        try {
            JoinWindows.ofTimeDifferenceAndGrace(ofMillis(3L), ofMillis(-1L));
            fail("should not accept negatives");
        } catch (final IllegalArgumentException e) {
            //expected
        }
    }

    @SuppressWarnings("deprecation")
    @Test
    public void oldAPIShouldSetDefaultGracePeriod() {
        assertEquals(Duration.ofDays(1).toMillis(), DEPRECATED_DEFAULT_24_HR_GRACE_PERIOD);
        assertEquals(DEPRECATED_DEFAULT_24_HR_GRACE_PERIOD - 6L, JoinWindows.of(ofMillis(3L)).gracePeriodMs());
        assertEquals(0L, JoinWindows.of(ofMillis(DEPRECATED_DEFAULT_24_HR_GRACE_PERIOD)).gracePeriodMs());
        assertEquals(0L, JoinWindows.of(ofMillis(DEPRECATED_DEFAULT_24_HR_GRACE_PERIOD + 1L)).gracePeriodMs());
    }

    @Test
    public void noGraceAPIShouldNotSetGracePeriod() {
        assertEquals(0L, JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(3L)).gracePeriodMs());
        assertEquals(0L, JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(ANY_SIZE)).gracePeriodMs());
        assertEquals(0L, JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(ANY_OTHER_SIZE)).gracePeriodMs());
    }

    @Test
    public void withGraceAPIShouldSetGracePeriod() {
        assertEquals(ANY_GRACE, JoinWindows.ofTimeDifferenceAndGrace(ofMillis(3L), ofMillis(ANY_GRACE)).gracePeriodMs());
        assertEquals(ANY_GRACE, JoinWindows.ofTimeDifferenceAndGrace(ofMillis(ANY_SIZE), ofMillis(ANY_GRACE)).gracePeriodMs());
        assertEquals(ANY_GRACE, JoinWindows.ofTimeDifferenceAndGrace(ofMillis(ANY_OTHER_SIZE), ofMillis(ANY_GRACE)).gracePeriodMs());
    }

    @Test
    public void equalsAndHashcodeShouldBeValidForPositiveCases() {
        verifyEquality(
            JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(3)),
            JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(3))
        );

        verifyEquality(
            JoinWindows.ofTimeDifferenceAndGrace(ofMillis(3), ofMillis(2)),
            JoinWindows.ofTimeDifferenceAndGrace(ofMillis(3), ofMillis(2))
        );

        verifyEquality(
            JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(3)).after(ofMillis(2)),
            JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(3)).after(ofMillis(2))
        );

        verifyEquality(
            JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(3)).before(ofMillis(2)),
            JoinWindows.ofTimeDifferenceWithNoGrace(ofMillis(3)).before(ofMilli


 f = fract( p );
	vec2 u = f*f*(3.0-2.0*f);
    return -1.0+2.0*mix( mix( hash( i + vec2(0.0,0.0) ),
                     hash( i + vec2(1.0,0.0) ), u.x),
                mix( hash( i + vec2(0.0,1.0) ),
                     hash( i + vec2(1.0,1.0) ), u.x), u.y);
}

// lighting
float diffuse(vec3 n,vec3 l,float p) {
    return pow(dot(n,l) * 0.4 + 0.6,p);
}
float specular(vec3 n,vec3 l,vec3 e,float s) {
    float nrm = (s + 8.0) / (PI * 8.0);
    return pow(max(dot(reflect(e,n),l),0.0),s) * nrm;
}

// sky
vec3 getSkyColor(vec3 e) {
    e.y = (max(e.y,0.0)*0.8+0.2)*0.8;
    return vec3(pow(1.0-e.y,2.0), 1.0-e.y, 0.6+(1.0-e.y)*0.4) * 1.1;
}

// sea
float sea_octave(vec2 uv, float choppy) {
    uv += noise(uv);
    vec2 wv = 1.0-abs(sin(uv));
    vec2 swv = abs(cos(uv));
    wv = mix(wv,swv,wv);
    return pow(1.0-pow(wv.x * wv.y,0.65),choppy);
}

float map(vec3 p) {
    float freq = SEA_FREQ;
    float amp = SEA_HEIGHT;
    float choppy = SEA_CHOPPY;
    vec2 uv = p.xz; uv.x *= 0.75;

    float d, h = 0.0;
    for(int i = 0; i < ITER_GEOMETRY; i++) {
    	d = sea_octave((uv+SEA_TIME)*freq,choppy);
    	d += sea_octave((uv-SEA_TIME)*freq,choppy);
        h += d * amp;
    	uv *= octave_m; freq *= 1.9; amp *= 0.22;
        choppy = mix(choppy,1.0,0.2);
    }
    return p.y - h;
}

float map_detailed(vec3 p) {
    float freq = SEA_FREQ;
    float amp = SEA_HEIGHT;
    float choppy = SEA_CHOPPY;
    vec2 uv = p.xz; uv.x *= 0.75;

    float d, h = 0.0;
    for(int i = 0; i < ITER_FRAGMENT; i++) {
    	d = sea_octave((uv+SEA_TIME)*freq,choppy);
    	d += sea_octave((uv-SEA_TIME)*freq,choppy);
        h += d * amp;
    	uv *= octave_m; freq *= 1.9; amp *= 0.22;
        choppy = mix(choppy,1.0,0.2);
    }
    return p.y - h;
}

vec3 getSeaColor(vec3 p, vec3 n, vec3 l, vec3 eye, vec3 dist) {
    float fresnel = clamp(1.0 - dot(n,-eye), 0.0, 1.0);
    fresnel = pow(fresnel,3.0) * 0.5;

    vec3 reflected = getSkyColor(reflect(eye,n));
    vec3 refracted = SEA_BASE + diffuse(n,l,80.0) * SEA_WATER_COLOR * 0.12;

    vec3 color = mix(refracted,reflected,fresnel);

    float atten = max(1.0 - dot(dist,dist) * 0.001, 0.0);
    color


(u3), x3 = ee2(n4), w3 = (0, a2.useRef)(false), [k2, E3] = (0, a2.useState)(0);
            return (0, a2.useEffect)(() => {
              const e4 = f2.current;
              if (e4)
                return e4.addEventListener(q2, y3), () => e4.removeEventListener(q2, y3);
            }, [y3]), (0, a2.createElement)(oe2, { scope: n4, orientation: r4, dir: h2, loop: o3, currentTabStopId: m3, onItemFocus: (0, a2.useCallback)((e4) => v3(e4), [v3]), onItemShiftTab: (0, a2.useCallback)(() => b2(true), []), onFocusableItemAdd: (0, a2.useCallback)(() => E3((e4) => e4 + 1), []), onFocusableItemRemove: (0, a2.useCallback)(() => E3((e4) => e4 - 1), []) }, (0, a2.createElement)(K2.WV.div, (0, N2.Z)({ tabIndex: g2 || 0 === k2 ? -1 : 0, "data-orientation": r4 }, d2, { ref: p3, style: { outline: "none", ...e3.style }, onMouseDown: (0, B2.M)(e3.onMouseDown, () => {
              w3.current = true;
            }), onFocus: (0, B2.M)(e3.onFocus, (e4) => {
              const t5 = !w3.current;
              if (e4.target === e4.currentTarget && t5 && !g2) {
                const t6 = new CustomEvent(q2, $);
                if (e4.currentTarget.dispatchEvent(t6), !t6.defaultPrevented) {
                  const e5 = x3().filter((e6) => e6.focusable);
                  de2([e5.find((e6) => e6.active), e5.find((e6) => e6.id === m3), ...e5].filter(Boolean).map((e6) => e6.ref.current));
                }
              }
              w3.current = false;
            }), onBlur: (0, B2.M)(e3.onBlur, () => b2(false)) })));
          }), ce2 = "RovingFocusGroupItem", se2 = (0, a2.forwardRef)((e3, t4) => {
            const { __scopeRovingFocusGroup: n4, focusable: r4 = true, active: o3 = false, tabStopId: i3, ...l4 } = e3, c3 = (0, U2.M)(), s3 = i3 || c3, u3 = ie2(ce2, n4), d2 = u3.currentTabStopId === s3, f2 = ee2(n4), { onFocusableItemAdd: p3, onFocusableItemRemove: h2 } = u3;
            return (0, a2.useEffect)(() => {
              if (r4)
                return p3(), () => h2();
            }, [r4, p3, h2]), (0, a2.createElement)(Q2.ItemSlot, { scope: n4, id: s3, focusable: r4, active: o3 }, (0, a2.createElement)(K2.WV.span, (0, N2.Z)({ tabIndex: d2 ? 0 : -1, "data-orientation": u3.orientation }, l4, { ref: t4, onMouseDown: (0, B2.M)(e3.onMouseDown, (e4) => {
              r4 ? u3.onItemFocus(s3) : e4.preventDefault();
            }), onFocus: (0, B2.M)(e3.onFocus, () => u3.onItemFocus(s3)), onKeyDown: (0, B2.M)(e3.onKeyDown, (e4) => {
              if ("Tab" === e4.


%fp0	 | ...s(a1+...)

	fadds		COSB1,%fp1	| ...B1+S(B2...)
	fmulx		RPRIME(%a6),%fp0	| ...R'S(A1+...)
	fmulx		SPRIME(%a6),%fp1	| ...S'(B1+S(B2+...))

	movel		%d1,-(%sp)	|save users mode & precision
	andil		#0xff,%d1		|mask off all exceptions
	fmovel		%d1,%FPCR
	fadds		POSNEG1(%a6),%fp1	| ...COS(X)
	bsr		sto_cos		|store cosine result
	fmovel		(%sp)+,%FPCR	|restore users exceptions
	faddx		RPRIME(%a6),%fp0	| ...SIN(X)

	bra		t_frcinx

SCBORS:
	cmpil		#0x3FFF8000,%d0
	bgt		REDUCEX

SCSM:
	movew		#0x0000,XDCARE(%a6)
	fmoves		#0x3F800000,%fp1

	movel		%d1,-(%sp)	|save users mode & precision
	andil		#0xff,%d1		|mask off all exceptions
	fmovel		%d1,%FPCR
	fsubs		#0x00800000,%fp1
	bsr		sto_cos		|store cosine result
	fmovel		(%sp)+,%FPCR	|restore users exceptions
	fmovex		X(%a6),%fp0
	bra		t_frcinx

	|end


/************************************************************************************************
    SBFspot - Yet another tool to read power production of SMA solar inverters
    (c)2012-2022, SBF

    Latest version found at https://github.com/SBFspot/SBFspot

    License: Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0)
    http://creativecommons.org/licenses/by-nc-sa/3.0/

    You are free:
        to Share - to copy, distribute and transmit the work
        to Remix - to adapt the work
    Under the following conditions:
    Attribution:
        You must attribute the work in the manner specified by the author or licensor
        (but not in any way that suggests that they endorse you or your use of the work).
    Noncommercial:
        You may not use this work for commercial purposes.
    Share Alike:
        If you alter, transform, or build upon this work, you may distribute the resulting work
        only under the same or similar license to this one.

DISCLAIMER:
    A user of SBFspot software acknowledges that he or she is receiving this
    software on an "as is" basis and the user is not relying on the accuracy
    or functionality of the software for any purpose. The user further
    acknowledges that any use of this software will be at his own risk
    and the copyright owner accepts no responsibility whatsoever arising from
    the use or application of the software.

    SMA is a registered trademark of SMA Solar Technology AG

************************************************************************************************/

#pragma once

#include <vector>
#include <string>
#include "hash.h"

struct Config;
struct InverterData;

class MqttExport
{
public:
    MqttExport(const Config& config);
    ~MqttExport();

    int exportInverterData(const std::vector<InverterData>& inverterData);

private:
    const Config& m_config;

    std::string to_keyvalue(const std::string key, const std::string value) const;
    time_t to_time_t(float time_f);
};


void ReferenceAngleBondIxn::calculateBondIxn(vector<int>& atomIndices,
                                             vector<Vec3>& atomCoordinates,
                                             vector<double>& parameters,
                                             vector<Vec3>& forces,
                                             double* totalEnergy, double* energyParamDerivs) {

    static const int LastAtomIndex      = 3;

   double deltaR[2][ReferenceForce::LastDeltaRIndex];

   // ---------------------------------------------------------------------------------------

   // get deltaR, R2, and R between 2 atoms

   int atomAIndex = atomIndices[0];
   int atomBIndex = atomIndices[1];
   int atomCIndex = atomIndices[2];
   if (usePeriodic) {
      ReferenceForce::getDeltaRPeriodic(atomCoordinates[atomAIndex], atomCoordinates[atomBIndex], boxVectors, deltaR[0]);
      ReferenceForce::getDeltaRPeriodic(atomCoordinates[atomCIndex], atomCoordinates[atomBIndex], boxVectors, deltaR[1]);
   }
   else {
      ReferenceForce::getDeltaR(atomCoordinates[atomAIndex], atomCoordinates[atomBIndex], deltaR[0]);
      ReferenceForce::getDeltaR(atomCoordinates[atomCIndex], atomCoordinates[atomBIndex], deltaR[1]);
   }

   double pVector[3];
   SimTKOpenMMUtilities::crossProductVector3(deltaR[0], deltaR[1], pVector);
   double rp = sqrt(DOT3(pVector, pVector));
   if (rp < 1.0e-06) {
      rp = 1.0e-06;
   }
   double dot             = DOT3(deltaR[0], deltaR[1]);
   double cosine          = dot/sqrt((deltaR[0][ReferenceForce::R2Index]*deltaR[1][ReferenceForce::R2Index]));

   double dEdR;
   double energy;
   getPrefactorsGivenAngleCosine(cosine, parameters, &dEdR, &energy);

   double termA           =  dEdR/(deltaR[0][ReferenceForce::R2Index]*rp);
   double termC           = -dEdR/(deltaR[1][ReferenceForce::R2Index]*rp);

   double deltaCrossP[LastAtomIndex][3];
   SimTKOpenMMUtilities::crossProductVector3(deltaR[0], pVector, deltaCrossP[0]);
   SimTKOpenMMUtilities::crossProductVector3(deltaR[1], pVector, deltaCrossP[2]);

   for (int ii = 0; ii < 3; ii++) {
      deltaCrossP[0][ii] *= termA;
      deltaCrossP[2][ii] *= termC;
      deltaCrossP[1][ii]  = -(deltaCrossP[0][ii] + deltaCrossP[2][ii]);
   }

   // accumulate forces

   for (int jj = 0; jj < LastAtomIndex; jj++) {
      for (int ii = 0; ii < 3; ii++) {
         forces[atomIndices[jj]][ii] += deltaCrossP[jj][ii];
      }
   }

   // accumulate energies

   if (totalEnergy != NULL)
       *totalEnergy += energy;
}
// AUTOGENERATED FILE - DO NOT MODIFY!
// This file was generated by Djinni from text.djinni

#include "NativeTextLayerInterface.h"  // my header
#include "Marshal.hpp"
#include "NativeFontLoaderInterface.h"
#include "NativeLayerInterface.h"
#include "NativeTextInfoInterface.h"

namespace djinni_generated {

NativeTextLayerInterface::NativeTextLayerInterface() : ::djinni::JniInterface<::TextLayerInterface, NativeTextLayerInterface>("io/openmobilemaps/mapscore/shared/map/layers/text/TextLayerInterface$CppProxy") {}

NativeTextLayerInterface::~NativeTextLayerInterface() = default;

CJNIEXPORT void JNICALL Java_io_openmobilemaps_mapscore_shared_map_layers_text_TextLayerInterface_00024CppProxy_nativeDestroy(JNIEnv* jniEnv, jobject /*this*/, jlong nativeRef)
{
    try {
        delete reinterpret_cast<::djinni::CppProxyHandle<::TextLayerInterface>*>(nativeRef);
    } JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, )
}

CJNIEXPORT jobject JNICALL Java_io_openmobilemaps_mapscore_shared_map_layers_text_TextLayerInterface_cr


ere!

            // Assert
            Assert.IsTrue(dummy.Health > 0);
        }

        [TestMethod]
        public void IsDeadDummyGiveXP()
        {
            // Arrange
            Dummy dummy = new Dummy(1, 1);
            Hero hero = new Hero("Коняря");

            // Act
            var xp = hero.Experience;
            hero.Attack(dummy);
            xp = hero.Experience - xp;

            // Assert
            Assert.IsTrue(xp > 0);
        }

        [TestMethod]
        public void IsAliveDummyGiveXP()
        {
            // Arrange
            Dummy dummy = new Dummy(100, 100);
            Hero hero = new Hero("Коняря");

            // Act
            var xp = hero.Experience;
            hero.Attack(dummy);
            xp = hero.Experience - xp;

            // Assert
            Assert.IsTrue(xp == 0);
        }
    }

}


 0 0 100%; }
.mfn-ql-slider-wrapper-offset .mfn-queryloop-item-wrapper { flex-shrink: 0; }

/* Options fix */
.mfn-ql-slider-wrapper-offset{overflow: unset;}

.mfn-looped-items-slider-wrapper .mfn-queryloop-item-wrapper .mcb-column:last-child .mcb-column-inner { margin-bottom: 0; }

/* hidden on front / visible in builder */
.mfn-ui .mfn-popup-tmpl.mfn-popup-tmpl-close-button-show-delay .exit-mfn-popup{opacity: 1;}

/* --------------------------------------------------------------------------------------------------------------- */
/* ------------------------------------------------ SIDE MENU ---------------------------------------------------- */
/* --------------------------------------------------------------------------------------------------------------- */

.mfn-bebuilder-sidemenu #Content{ padding-top:0; }
.mfn-bebuilder-sidemenu #Header_wrapper,
.mfn-bebuilder-sidemenu #Footer{ display: none; }

.mfn-bebuilder-sidemenu,
.mfn-bebuilder-sidemenu #Wrapper { min-height: 100vh; }

.mfn-sidemenu-tmpl { height: auto; overflow: unset; position: static; margin: 60px auto; min-height: unset; opacity: 1; }
.mfn-ui .mfn-sidemenu-tmpl .mfn-sidemenu-tmpl-builder { overflow: unset; position:relative; min-height: calc(100vh - 120px); }
.mfn-sidemenu-tmpl .mcb-section .section-header { width: max-content; }

.mfn-sidemenu-always-visible-tmpl-left{ padding-left:0; }
.mfn-sidemenu-always-visible-tmpl-right{ padding-right:0; }

body:not(.mfn-bebuilder-sidemenu) .mfn-sidemenu-tmpl { display: none !important; }

.mfn-ui.mfn-bebuilder-blog #Subheader, .mfn-ui.mfn-bebuilder-portfolio #Subheader{ display: none; }@font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJ


.pos;
  assert(pos != null);
  assert(pos.z == 3.0);

  // Get a test an element from the `inventory` FlatBuffer's `vector`.
  var inv = monster.inventory;
  assert(inv != null);
  assert(inv.length == 10);
  assert(inv[9] == 9);

  // Get and test the `weapons` FlatBuffers's `vector`.
  var expected_weapon_names = ["Sword", "Axe"];
  var expected_weapon_damages = [3, 5];
  var weps = monster.weapons;
  for (int i = 0; i < weps.length; i++) {
    assert(weps[i].name == expected_weapon_names[i]);
    assert(weps[i].damage == expected_weapon_damages[i]);
  }

  // Get and test the `Equipment` union (`equipped` field).
  assert(monster.equippedType.value == myGame.EquipmentTypeId.Weapon.value);
  assert(monster.equippedType == myGame.EquipmentTypeId.Weapon);

  assert(monster.equipped is myGame.Weapon);
  var equipped = monster.equipped as myGame.Weapon;
  assert(equipped.name == "Axe");
  assert(equipped.damage == 5);

  print(monster);
  return true;
}
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
import 'package:logging_to_logcat/logging_to_logcat.dart';

class AppLog {
  // Singleton instance
  static final AppLog _instance = AppLog._internal();
  Logger log = Logger("TNS-Archiverse");

  factory AppLog() {
    return _instance;
  }

  AppLog._internal();
  void initFlutter() {
    // Set default log level
    if (kDebugMode) {
      Logger.root.level = Level.FINE;
    } else {
      Logger.root.level = Level.INFO;
    }

    // If Android platform, output to logcat
    if (Platform.isAndroid) {
      Logger.root.activateLogcat();
    }
  }

  // Just mirrors of the Android Log APIs for usability since I'm way too used to them
  void v(String message, {String tag = "app"}) {
    log.fine("[$tag]: $message");
  }

  void d(String message, {String tag = "app"}) {
    if (kDebugMode) {
      log.info("[$tag]: $message");
    }
  }

  void i(String message, {String tag = "app"}) {
    log.info("[$tag]: $message");
  }

  void w(String message, {String tag = "app"}) {
    log.warning("[$tag]: $message");
  }

  void e(String message, {String tag = "app"}) {
    log.severe("[$tag]: $message");
  }
}
import 'package:archiverse/models/reader_color.dart';
import 'package:archiverse/models/theming.dart';

class Preferences {
  // Default values for preferences
  static const Map<String, dynamic> defaults = {
    Preferences.themeMode: AppThemeMode.system,
    Preferences.colorScheme: AppColorScheme.red,

    Preferences.textScaleFactor: 1.0,
    Preferences.readerHeadingFont: 'system',
    Preferences.readerBodyFont: 'system',

    Preferences.readerBackgroundColor: ReaderColor.system,
    Preferences.paragraphSpacing: 1.0,
    Preferences.lineHeight: 1.5,
    Preferences.readerJustifiedText: false,
    Preferences.keepScreenOn: true,
  };

  static const String themeMode = 'theme_mode';
  static const String colorScheme = 'theme_color_scheme_preference';

  // Text size and Font preferences
  static const String textScaleFactor = 'text_scale_factor';
  static const String readerHeadingFont = 'reader


,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},kw="react-flow__node-desc",Sw="react-flow__edge-desc",FO=t=>t.ariaLiveMessage;function zO({rfId:t}){const e=mt(FO);return K.createElement("div",{id:`react-flow__aria-live-${t}`,"aria-live":"assertive","aria-atomic":"true",style:LO},e)}function BO({rfId:t,disableKeyboardA11y:e}){return K.createElement(K.Fragment,null,K.createElement("div",{id:`${kw}-${t}`,style:vw},"Press enter or space to select a node.",!e&&"You can then use the arrow keys to move the node around."," Press delete to remove it and escape to cancel."," "),K.createElement("div",{id:`${Sw}-${t}`,style:vw},"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel."),!e&&K.createElement(zO,{rfId:t}))}var Ui=(t=null,e={actInsideInputWithModifier:!0})=>{const[n,o]=A.useState(!1),r=A.useRef(!1),s=A.useRef(new Set([])),[i,a]=A.useMemo(()=>{if(t!==null){const l=(Array.isArray(t)?t:[t]).filter(d=>typeof d=="string").map(d=>d.split("+")),c=l.reduce((d,u)=>d.concat(...u),[]);return[l,c]}return[[],[]]},[t]);return A.useEffect(()=>{const l=typeof document<"u"?document:null,c=(e==null?void 0:e.target)||l;if(t!==null){const d=m=>{if(r.current=m.ctrlKey||m.metaKey||m.shiftKey,(!r.current||r.current&&!e.actInsideInputWithModifier)&&Zu(m))return!1;const _=Nw(m.code,a);s.current.add(m[_]),Cw(i,s.current,!1)&&(m.preventDefault(),o(!0))},u=m=>{if((!r.current||r.current&&!e.actInsideInputWithModifier)&&Zu(m))return!1;const _=Nw(m.code,a);Cw(i,s.current,!0)?(o(!1),s.current.clear()):s.current.delete(m[_]),m.key==="Meta"&&s.current.clear(),r.current=!1},f=()=>{s.current.clear(),o(!1)};return c==null||c.addEventListener("keydown",d),c==null||c.addEventListener("keyup",u),window.addEventListener("blur",f),()=>{c==null||c.removeEventListener("keydown",d),c==null||c.removeEventListener("keyup",u),window.removeEventListener("blur",f)}}},[t,o]),n};function Cw(t,e,n){return t.filter(o=>n||o.length===e.size).some(o=>o.every(r=>e.has(r)))}function Nw(t,e){return e.includes(t)?"code":"key"}function jw(t,e,n,o){var a,l;const r=t.parentNode||t.parentId;if(!r)return n;const s=e.get(r),i=ls(s,o);return jw(s,e,{x:(n.x??0)+i.x,y:(n.y??0)+i.y,z:(((a=s[Ct])==null?void 0:a.z)??0)>(n.z??0)?((l=s[Ct])==null?void 0:l.z)??0:n.z??0},o)}function Ew(t,e,n){t.forEach(o=>{var s;const r=o.parentNode||o.parentId;if(r&&!t.has(r))throw new Error(`Parent node ${r} not found`);if(r||n!=null&&n[o.


ify("‼ 引用" + "⟦" + subtag + "⟧" + " 返回內容为空", "⁉ 点通知跳转以确认链接是否失效", para.split("#")[0], nan_link);
    flag = 0;
  } else if (type0 == "sub-http") {
    let url = VCheck(String(Base64.decode(content0.split("sub://")[1].split("#")[0])+", opt-parser=true, tag="+(new Date()).getTime()))
     RLink = RLink.replace("sremoteposition",url).replace("fremoteposition","").replace("rremoteposition","")
    let ADDres0 = ADDres.replace("url-encoded-json",encodeURIComponent(RLink))
    openlink = {"open-url": ADDres0}
    $notify("⚠ 该链接为节点订阅, 请点击此通知跳转添加", url, ADDres0,openlink)
    flag = -1
    total = ""
  } else if (type0 == "unknown") {
    ParseUnknown(content0)
    flag = -1;
  } else if (type0 == "profile") {
    PProfile = "111" //默认添加所有部分
    Profile_Handle()
    openlink = {"open-url": ADDres}
    $notify("⚠ 该链接为完整配置文件, 请点击此通知跳转", "添加配置中的有效远程资源👇 ["+ PProfile+"]", ADDres, openlink)
    flag = -1;
    total = ""
  } else if (type0 == "JS-0") {
    total = ""
  }

  //开始处理
  if (flag == 1) { //server 类型统一处理
    total = isQuanX(total.filter(Boolean).join("\n"))
    if (Pinfo == 1 && ntf_flow == 0) { //假节点类型的流量通知
      flowcheck(total)
    }
    if (Pin0 || Pout0) { total = Filter(total, Pin0, Pout0) } // in & out
    if (Preg) { total = total.map(Regex).filter(Boolean)  // regex
      RegCheck(total, "节点订阅", "regex", Preg)}
    if (Pregout) { total = total.map(RegexOut).filter(Boolean)  // regex out
      RegCheck(total, "节点订阅", "regout", Pregout)}
    if (Psfilter) { total = FilterScript(total, Psfilter) }
    if (Prrname) {
      Prn = Prrname;
      total = total.map(Rename);
    }
    //if (Pemoji) { total = emoji_handle(total, Pemoji); }
    if (Pregdel) {
      delreg = Pregdel
      total = total.map(DelReg)
    }
    //script rename 置于其它参数之前
    if (Psrename) { total = RenameScript(total, Psrename) }
    if (Preplace) { // server 类型也可用 replace 参数进行重命名操作
      total = ReplaceReg(total, Preplace)
    }
    if (Prname) {
      Prn = Prname;
      total = total.map(Rename);
      if(Pdbg==1) {$notify("rename","content",total)}
    }
    //2023-07-10 调整emoji操作顺序
    if (Pemoji) { total = emoji_handle(total, Pemoji); }
    if (total.length > 0){
      if (Psuffix==1 || Psuffix==-1) {total = Psuffix == 1? total.map(type_suffix):


ath fill-rule='evenodd' d='M7.793 2.232a.75.75 0 0 1-.025 1.06L3.622 7.25h10.003a5.375 5.375 0 0 1 0 10.75H10.75a.75.75 0 0 1 0-1.5h2.875a3.875 3.875 0 0 0 0-7.75H3.622l4.146 3.957a.75.75 0 0 1-1.036 1.085l-5.5-5.25a.75.75 0 0 1 0-1.085l5.5-5.25a.75.75 0 0 1 1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-toolbar .redo:before{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='currentColor' class='size-5'%3E%3Cpath fill-rule='evenodd' d='M12.207 2.232a.75.75 0 0 0 .025 1.06l4.146 3.958H6.375a5.375 5.375 0 0 0 0 10.75H9.25a.75.75 0 0 0 0-1.5H6.375a3.875 3.875 0 0 1 0-7.75h10.003l-4.146 3.957a.75.75 0 0 0 1.036 1.085l5.5-5.25a.75.75 0 0 0 0-1.085l-5.5-5.25a.75.75 0 0 0-1.06.025Z' clip-rule='evenodd' /%3E%3C/svg%3E%0A")}.fi-fo-markdown-editor .EasyMDEContainer .editor-statusbar{display:none}.fi-fo-markdown-editor:where(.dark,.dark *){--color-cm-red:#f87171;--color-cm-orange:#fb923c;--color-cm-amber:#fbbf24;--color-cm-yellow:#facc15;--color-cm-lime:#a3e635;--color-cm-green:#4ade80;--color-cm-emerald:#4ade80;--color-cm-teal:#2dd4bf;--color-cm-cyan:#22d3ee;--color-cm-sky:#38bdf8;--color-cm-blue:#60a5fa;--color-cm-indigo:#818cf8;--color-cm-violet:#a78bfa;--color-cm-purple:#c084fc;--color-cm-fuchsia:#e879f9;--color-cm-pink:#f472b6;--color-cm-rose:#fb7185;--color-cm-gray:#fafafa;--color-cm-gray-muted:#a1a1aa;--color-cm-gray-background:#52525b}.fi


m.$text for performance
            return (req.type === item.type &&
                    ((req.src && item.src && req.src === item.src &&
                      ((req.$library && item.$library && req.$library === item.$library) ||
                       (!req.$library && !item.$library))) ||
                     (req.$text && item.$text && reqText === item.$text.replace(/\s/g, " "))));
        });
    },

    _showDialog: function(metadata) {
        var formDialog = new Dialog({
            title: langObj.sawdTitle,
            "class": "dvSaveAsWidgetDialog",
            execute: dojo.hitch(this, function() {
                this._saveMetadata(arguments[0].metadata);
            }),
            onHide: function() {
                setTimeout(function() {
                    formDialog.destroyRecursive();
                }, formDialog.duration);
            }
        });

        var form = new SaveAsWidgetForm({
            parentId: formDialog.id,
            metadata: metadata
        });

        formDialog.set("content", form);
        formDialog.show();
    },

    _saveMetadata: function(metadata) {
        console.log("Custom Widget Metadata:");
        console.dir(metadata);
    }
});
});
define(function() {
	/**
	 * Collapses all text nodes that only contain white space characters into empty string.
	 * Skips certain nodes where whitespace does not impact layout and would cause unnecessary processing.
	 * Similar to features that hopefully will appear in CSS3 via white-space-collapse
	 *
	 * @param {HTMLElement} element Element whose text nodes should be collapse
	 */
	var skip = {"SCRIPT":1, "STYLE":1},
		collapse = function(element) {
		for (var i = 0; i < element.childNodes.length; i++){
			var cn = element.childNodes[i];
			if (cn.nodeType == 3){    // Text node
				//FIXME: exclusion for SCRIPT, CSS content?
				cn.nodeValue = cn.data.replace(/^[\f\n\r\t\v\ ]+$/g,"");
			}else if (cn.nodeType == 1 && !skip[cn.nodeName]){ // Element node
				collapse(cn);
			}
		}
	};

	var handler = function() {
		if (document.body.getAttribute('data-maq-ws') == 'collapse') {
			collapse(document.body);
		}
	};

	//FIXME: do we want this to run when we load from the Workbench?
	if (document.addEventListener) {
		document.addEventListener("DOMContentLoaded", handler, false);
		window.addEventListener("load", handler, false);
	} else if (window.attachEvent) {
		window.attachEvent("onload", handler);
	}
});
define(["dojo/_base/connect", "dojo/dom-style", "dojo/dom", "dojo/_base/html", "dojo/_base/window", "dojo/_base/array", "dojo/parser", "require", "dojo/json", "dojo/_base/lang"],
function(connect, domStyle, dom, dhtml, dwindow, darray, dparser, require, JSON, lang){ // needed for IE9 compat view mode

var States = function(){};
States.prototype = {

	NORMAL: "Normal",
	DELTAS_ATTRIBUTE: "data-maq-deltas",
	DELTAS_ATTRIBUTE_P6: "dvStates",	// Attribute name used in Preview6 or earlier
	APPSTATES_ATTRIBUTE: "data-maq-appstates",
	APPSTATES_ATTRIBUTE_P6: "dvStates",	// Attribute name used in Preview6 or earlier
	reImportant: /^(.*)(!\ *important)(.*)/,

	/**
	 * Returns true if the given node has application states (i.e., node._maqAppStates has a value)
	 */
	isStateContainer: function(node){
		return !!(node && node._maqAppStates);
	},

	/**
	 * Returns an array of all ancestor nodes that are state containers (due to having a _maqAppStates property)
	 * @param node
	 * @returns {Array[Element]}  an array of Elements for all ancestor state containers.
	 *      If this node is a state container, it is included in the list.
	 *      First element in array should be the BODY element.


s

Status: Last call for comments

The following steps form the <dfn id="html-fragment-serialization-algorithm">HTML fragment serialization
  algorithm</dfn>. The algorithm takes as input a DOM
  Element or Document, referred to as <var title="">the node</var>, and either returns a string or raises an
  exception.

This algorithm serializes the children of
  the node being serialized, not the node itself.

Let <var title="">s</var> be a string, and initialize it to
   the empty string.

For each child node of <var title="">the node</var>, in
    tree order, run the following steps:

Let <var title="">current node</var> be the child node
     being processed.

Append the appropriate string from the following list to
      <var title="">s</var>:

If <var title="">current node</var> is an Element

Append a U+003C LESS-THAN SIGN character character (<),
        followed by the element's tag name. (For nodes created by the
        HTML parser or Document.createElement(), the tag name will be
        lowercase.)

For each attribute that the element has, append a U+0020
        SPACE character, the attribute's name (which, for attributes
        set by the HTML parser or by Element.setAttributeNode() or Element.setAttribute(), will be lowercase), a
        U+003D EQUALS SIGN character (=), a U+0022 QUOTATION MARK
        character ("), the attribute's value, escaped as described below in
        attribute mode, and a second U+0022 QUOTATION MARK
        character (").

While the exact order of attributes is UA-defined, and may
        depend on factors such as the order that the attributes were
        given in the original markup, the sort order must be stable,
        such that consecutive invocations of this algorithm serialize an
        element's attributes in the same order.

Append a U+003E GREATER-THAN SIGN character (>).

If <var title="">current node</var> is an
        area, base, basefont,
        bgsound, br, col,
        embed, frame,


v::Op = 92;
        pub const Op_OpImageSampleProjDrefImplicitLod: root::spv::Op = 93;
        pub const Op_OpImageSampleProjDrefExplicitLod: root::spv::Op = 94;
        pub const Op_OpImageFetch: root::spv::Op = 95;
        pub const Op_OpImageGather: root::spv::Op = 96;
        pub const Op_OpImageDrefGather: root::spv::Op = 97;
        pub const Op_OpImageRead: root::spv::Op = 98;
        pub const Op_OpImageWrite: root::spv::Op = 99;
        pub const Op_OpImage: root::spv::Op = 100;
        pub const Op_OpImageQueryFormat: root::spv::Op = 101;
        pub const Op_OpImageQueryOrder: root::spv::Op = 102;
        pub const Op_OpImageQuerySizeLod: root::spv::Op = 103;
        pub const Op_OpImageQuerySize: root::spv::Op = 104;
        pub const Op_OpImageQueryLod: root::spv::Op = 105;
        pub const Op_OpImageQueryLevels: root::spv::Op = 106;
        pub const Op_OpImageQuerySamples: root::spv::Op = 107;
        pub const Op_OpConvertFToU: root::spv::Op = 109;
        pub const Op_OpConvertFToS: root::spv::Op = 110;
        pub const Op_OpConvertSToF: root::spv::Op = 111;
        pub const Op_OpConvertUToF: root::spv::Op = 112;
        pub const Op_OpUConvert: root::spv::Op = 113;
        pub const Op_OpSConvert: root::spv::Op = 114;
        pub const Op_OpFConvert: root::spv::Op = 115;
        pub const Op_OpQuantizeToF16: root::spv::Op = 116;
        pub const Op_OpConvertPtrToU: root::spv::Op = 117;
        pub const Op_OpSatConvertSToU: root::spv::Op = 118;
        pub const Op_OpSatConvertUToS: root::spv::Op = 119;
        pub const Op_OpConvertUToPtr: root::spv::Op = 120;
        pub const Op_OpPtrCastToGeneric: root::spv::Op = 121;
        pub const Op_OpGenericCastToPtr: root::spv::Op = 122;
        pub const Op_OpGenericCastToPtrExplicit: root::spv::Op = 123;
        pub const Op_OpBitcast: root::spv::Op = 124;
        pub const Op_OpSNegate: root::spv::Op = 126;
        pub const Op_OpFNegate: root::spv::Op = 127;
        pub const Op_OpIAdd: root::spv::Op = 128;
        pub const Op_OpFAdd: root::spv::Op = 129;
        pub const Op_OpISub: root::spv::Op = 130;
        pub const Op_OpFSub: root::spv::Op = 131;
        pub const Op_OpIMul: root::spv::Op = 132;
        pub const Op_OpFMul: root::spv::Op = 133;
        pub const Op_OpUDiv: root::spv::Op = 134;
        pub const Op_OpSDiv: root::spv::Op = 135;
        pub const Op_OpFDiv: root::spv::Op = 136;
        pub const Op_OpUMod: root::spv::Op = 137;
        pub const Op_OpSRem: root::spv::Op = 138;
        pub const Op_OpSMod: root::spv::Op = 139;
        pub const Op_OpFRem: root::spv::Op = 140;
        pub const Op_OpFMod: root::spv::Op = 141;
        pub const Op_OpVectorTimesScalar: root::spv::Op = 142;
        pub const Op_OpMatrixTimesScalar: root::spv::Op = 143;
        pub const Op_OpVectorTimesMatrix: root::spv::Op = 144;
        pub const Op_OpMatrixTimes


    GLuint a_distort_position;
    GLuint a_distort_uv_red_low_res;
    GLuint a_distort_uv_green_low_res;
    GLuint a_distort_uv_blue_low_res;
    GLuint a_distort_uv_red_high_res;
    GLuint a_distort_uv_green_high_res;
    GLuint a_distort_uv_blue_high_res;
    GLuint u_distort_layer_index;
    GLuint u_distort_framebuffer;

    // Cube shader
    GLuint program_cube;
    GLuint a_cube_position;
    GLuint a_cube_normal;
    GLuint u_cube_projection;
    GLuint u_cube_view;
    GLuint u_cube_model;

    // Geometry
    GLuint vao;
    GLuint vbo_cube;
    GLuint warp_mesh[Num_Eyes];

    HMDConfig hmd;
    Framebuffer fb;
};

void gl_check(const char *msg);
void app_initialize(App *app);
void app_update_and_render(App *app);

/////////////////////////////////////
// Convenience macros

#define GL_CHECK(x)                                                                              \
    x;                                                                                \
    {                                                                                \
        GLenum glError = glGetError();                                                           \
        if(glError != GL_NO_ERROR) {                                                             \
            LOGE("glGetError() = %i (0x%.8x) at %s:%i\n", glError, glError, __FILE__, __LINE__); \
            exit(1);                                                                             \
        }                                                                                \
    }

#define get_attrib_location(prog, name) \
    app->a_##prog##_##name = GL_CHECK(glGetAttribLocation(app->program_##prog, #name)); \
    if (app->a_##prog##_##name < 0) { \
        LOGE("Invalid or unused attribute %s\n", #name); \
    }

#define get_uniform_location(prog, name) \
    app->u_##prog##_##name = GL_CHECK(glGetUniformLocation(app->program_##prog, #name)); \
    if (app->u_##prog##_##name < 0) { \
        LOGE("Invalid or unused uniform %s\n", #name); \
    }

#define attribfv(prog, name, n, stride, offset) \
    GL_CHECK(glEnableVertexAttribArray(app->a_##prog##_##name)); \
    GL_CHECK(glVertexAttribPointer(app->a_##prog##_##name, n, GL_FLOAT, GL_FALSE, \
                          stride * sizeof(GLfloat), (void*)(offset * sizeof(GLfloat))));

#define attribiv(prog, name, n, stride, offset) \
    GL_CHECK(glEnableVertexAttribArray(app->a_##prog##_##name)); \
    GL_CHECK(glVertexAttribPointer(app->a_##prog##_##name, n, GL_INT, GL_FALSE, \
                          stride * sizeof(GLint), (void*)(offset * sizeof(GLint)) ));

#define uniform1f(prog, name, value)  GL_CHECK(glUniform1f(app->u_##prog##_##name, value));
#define uniform2f(prog, name, x, y)   GL_CHECK(glUniform2f(app->u_##prog##_##name, x, y));
#define uniform2fv(prog, name, value) GL_CHECK(glUniform2fv(app->u_##prog##_##name, 1, &value[0]));
#define uniform3fv(prog, name, value) GL_CHECK(glUniform3fv(app->u_##prog##_##name, 1, &value[0]));
#define uniform1i(prog, name, value)  GL_CHECK(glUniform1i(app->u_##prog##_##name, value));
#define uniformm4(prog, name, value)  GL_CHECK(glUniformMatrix4fv(app->u_##prog##_##name, 1, GL_FALSE, value.value_ptr()));
#define uniformm4array(prog, name, value, arraySize)  GL_CHECK(glUniformMatrix4fv(app->u_##prog##_##name, arraySize, GL_FALSE, value.value_ptr()));

#endif


been deprecated. Use <color> instead.
     *

     *
     *
     *
     */
    @XmlElement(defaultValue = "ffffffff")

    protected String color;
    /**
     * <draworder>
     *

     * This element defines the stacking order for the images in overlapping overlays.
     * Overlays with higher <drawOrder> values are drawn on top of overlays with lower
     * <drawOrder> values.
     *

     *
     *
     *
     */
    @XmlElement(defaultValue = "0")
    protected int drawOrder;
    /**
     * <icon> see also <icon>.
     *

     * <Icon> <href>Sunset.jpg</href> </Icon>
     *

     *

     * A custom Icon. In <IconStyle>, the only child element of <Icon> is <href>: <href>:
     * An HTTP address or a local file specification used to load an icon.
     *

     *

     * Defines an image associated with an Icon style or overlay. <Icon> has the same child
     * elements as <Link>. The required <href> child element defines the location of the
     * image to be used as the overlay or as the icon for the placemark. This location
     * can either be on a local file system or a remote web server.
     *

     *

     * Defines the image associated with the Overlay. The <href> element defines the location
     * of the image to be used as the Overlay. This location can be either on a local file
     * system or on a web server. If this element is omitted or contains no <href>, a rectangle
     * is drawn using the color and size defined by the ground or screen overlay. <Icon>
     * <href>icon.jpg</href> </Icon>
     *

     *
     * Syntax:
     *
<Icon id="ID">
     *   <!-- specific to Icon -->
     *   <href>...</href>                      <!-- anyURI -->
     *   <refreshMode>onChange</refreshMode>
     *     <!-- kml:refreshModeEnum: onChange, onInterval, or onExpire -->
     *   <refreshInterval>4</refreshInterval>  <!-- float -->
     *   <viewRefreshMode>never</viewRefreshMode>
     *     <!-- kml:viewRefreshModeEnum: never, onStop, onRequest, onRegion -->
     *   <viewRefreshTime>4</viewRefreshTime>  <!-- float -->
     *   <viewBoundScale>1</viewBoundScale>    <!-- float -->
     *   <viewFormat>...</viewFormat>          <!-- string -->
     *   <httpQuery>...</httpQuery>            <!-- string -->
     *   </Icon>

     *
     * Contained By:
     * @see: <GroundOverlay>
     * @see: <IconStyle>
     * @see: <ScreenOverlay>
     *
     *
     *
     */
    @XmlElement(name = "Icon")
    protected Icon icon;
    @XmlElement(name = "AbstractOverlaySimpleExtensionGroup")
    @XmlSchemaType(name = "anySimpleType")
    protected List<Object> overlaySimpleExtension;
    /**
     * <Object>
     *


private List<Actor> GetTypesOf<T>()
	{
		var type = typeof(T);
		if (!tracked.TryGetValue(type, out var list))
		{
			tracked[type] = list = new();
			foreach (var actor in Actors)
				if (actor is T)
					list.Add(actor);
			trackedTypes.Add(type);
		}
		return list;
	}

	private void ResolveChanges()
	{
		// resolve adding/removing actors
		while (adding.Count > 0 || destroying.Count > 0)
		{
			// first add group to world
			int addCount = adding.Count;
			for (int i = 0; i < addCount; i ++)
			{
				// sort into buckets
				var type = adding[i].GetType();

				// add to important tracked types
				foreach (var other in trackedTypes)
					if (type.IsAssignableTo(other))
						tracked[other].Add(adding[i]);

				// add it to the world
				Actors.Add(adding[i]);
			}

			// notify they're being added
			for (int i = 0; i < addCount; i ++)
				adding[i].Added();
			adding.RemoveRange(0, addCount);

			for (int i = 0; i < destroying.Count; i ++)
			{
				var it = destroying[i];
				it.Destroyed();

				// remove from buckets
				var type = it.GetType();
				foreach (var other in trackedTypes)
					if (type.IsAssignableTo(other))
						tracked[other].Remove(it);

				// remove from the world
				Actors.Remove(it);
				it.SetWorld(null);

				// recycled type
				if (it is IRecycle)
				{
					if (!recycled.TryGetValue(type, out var list))
						recycled[type] = list = new();
					list.Enqueue(it);
				}
			}
			destroying.Clear();
		}
	}

	public override void Update()
	{
		debugUpdTimer.Restart();

		// update audio
		Audio.SetListener(Camera);

		// increment playtime (if not in the ending area)
		if (!IsInEndingArea)
		{
			Save.CurrentRecord.Time += TimeSpan.FromSeconds(Time.Delta);
			Game.Instance.Music.Set("at_baddy", 0);
		}
		else
		{
			Game.Instance.Music.Set("at_baddy", 1);
		}

		// handle strawb counter
		{
			// wiggle when gained
			if (strawbCounterWas != Save.CurrentRecord.Strawberries.Count)
			{
				strawbCounterCooldown = 4.0f;
				strawbCounterWiggle = 1.0f;
				strawbCounterWas = Save.CurrentRecord.Strawberries.Count;
			}
			else
				Calc.Approach(ref strawbCounterWiggle, 0, Time.Delta / .6f);

			// hold stawb for a while
			if ((Get<Player>()?.IsStrawberryCounterVisible ?? false))
				strawbCounterCooldown = 2.0f;
			else
				strawbCounterCooldown -= Time.Delta;

			// ease strawb in/out
			if (IsInEndingArea || Paused || strawbCounterCooldown > 0 || (Get<Player>()?.IsStrawberryCounterVisible ?? false))
				strawbCounterEase = Calc.Approach(strawbCounterEase, 1, Time.Delta * 6.0f);
			else
				strawbCounterEase = Calc.Approach(strawbCounterEase, 0, Time.Delta * 6.0f);
		}

		// toggle debug draw
		if (Input.Keyboard.Pressed(Keys.F1))
			DebugDraw = !DebugDraw;

		// normal game loop
		if (!Paused)
		{
			// start pause menu
			if (Controls.Pause.ConsumePress() && IsPauseEnabled)
			{
				SetPaused(true);
				return;
			}

			// ONLY update the


e
import modulecheck.utils.lazy.LazySet
import modulecheck.utils.lazy.dataSource
import modulecheck.utils.lazy.emptyLazySet
import modulecheck.utils.lazy.lazySet
import modulecheck.utils.lazy.toLazySet

data class AndroidResourceReferences(
  private val delegate: SafeCache<SourceSetName, LazySet<ReferenceName>>,
  private val project: McProject
) : ProjectContext.Element {

  override val key: ProjectContext.Key<AndroidResourceReferences>
    get() = Key

  suspend fun get(sourceSetName: SourceSetName): LazySet<ReferenceName> {
    return delegate.getOrPut(sourceSetName) { fetchNewReferences(sourceSetName) }
  }

  private suspend fun fetchNewReferences(sourceSetName: SourceSetName): LazySet<ReferenceName> {

    if (!project.isAndroid()) return emptyLazySet()

    val jvm = project.jvmFilesForSourceSetName(sourceSetName)
      .map { jvmFile ->

        dataSource {
          jvmFile.references
            .filterIsInstance<AndroidResourceReferenceName>()
            .toSet()
        }
      }
      .toList()
      .toLazySet()

    val layout = project.layoutFilesForSourceSetName(sourceSetName)
      .map { it.references }

    val styles = project.androidStylesFilesForSourceSetName(sourceSetName)
      .map { it.references }

    val manifest = project.manifestFileForSourceSetName(sourceSetName)
      ?.references

    val all = if (manifest != null) {
      layout + styles + manifest + jvm
    } else {
      layout + styles + jvm
    }

    return lazySet(all)
  }

  companion object Key : ProjectContext.Key<AndroidResourceReferences> {
    override suspend operator fun invoke(project: McProject): AndroidResourceReferences {

      return AndroidResourceReferences(
        SafeCache(listOf(project.projectPath, AndroidResourceReferences::class)),
        project
      )
    }
  }
}

suspend fun ProjectContext.androidResourceReferencesForSourceSetName(
  sourceSetName: SourceSetName
): LazySet<ReferenceName> = get(AndroidResourceReferences).get(sourceSetName)
/*
 * Copyright (C) 2021-2023 Rick Busarow
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package modulecheck.api.context

import modulecheck.model.sourceset.SourceSetName
import modulecheck.parsing.android.XmlFile
import modulecheck.parsing.android.XmlFile.LayoutFile
import modulecheck.project.McProject
import modulecheck.project.ProjectContext
import modulecheck.utils.cache.SafeCache

data class LayoutFiles(
  private val delegate: SafeCache<SourceSetName, Set<LayoutFile>>,
  private val project: McProject
) : ProjectContext.Element {

  override val key: ProjectContext.Key<LayoutFiles>
    get() = Key

  suspend fun all(): Map<SourceSetName, Set<LayoutFile>> {
    return project.sourceSets
      .mapValues { (sourceSetName, _) ->
        get(sourceSetName)
      }
  }

  suspend fun get(sourceSetName: SourceSetName): Set<LayoutFile> {

    return delegate.getOrPut(sourceSetName) {

      val sourceSet = project.sourceSets[sourceSetName] ?: return@getOrPut emptySet()
      sourceSet
        .layoutFiles
        .map { XmlFile.LayoutFile(it) }
        .toSet()
    }
  }

  companion object Key : ProjectContext.Key<LayoutFiles>


2228&chksm=fc781175cb0f986392b4c78112dcd01bf5c71e7d6bdc292f0d8a556cc27e6bd8ebc54278165d&scene=21#wechat_redirect)

[内网渗透（二） | MSF 和 CobaltStrike 联动](http://mp.weixin.qq.com/s?__biz=MzU2MTQwMzMxNA==&mid=2247488905&idx=2&sn=6e15c9c5dd126a607e7a90100b6148d6&chksm=fc781154cb0f98421e25a36ddbb222f3378edcda5d23f329a69a253a9240f1de502a00ee983b&scene=21#wechat_redirect)

[内网渗透 | 域内认证之 Kerberos 协议详解](http://mp.weixin.qq.com/s?__biz=MzU2MTQwMzMxNA==&mid=2247488900&idx=3&sn=dc2689efec7757f7b432e1fb38b599d4&chksm=fc781159cb0f984f1a44668d9e77d373e4b3bfa25e5fcb1512251e699d17d2b0da55348a2210&scene=21#wechat_redirect)

[内网渗透（一） | 搭建域环境](http://mp.weixin.qq.com/s?__biz=MzU2MTQwMzMxNA==&mid=2247488866&idx=2&sn=89f9ca5dec033f01e07d85352eec7387&chksm=fc7811bfcb0f98a9c2e5a73444678020b173364c402f770076580556a053f7a63af51acf3adc&scene=21#wechat_redirect)<meta name="referrer" content="no-referrer"/>
> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码， 原文地址 [mp.weixin.qq.com](https://mp.weixin.qq.com/s/Kn4ppLlG5BpxMheNOj2usw)

渗透攻击红队

一个专注于红队攻击的公众号

![](https://mmbiz.qpic.cn/sz_mmbiz_jpg/dzeEUCA16LKwvIuOmsoicpffk7N0cVibfDoZibS8XU01CtEtSbwM3VGr3qskOmA1VkccY0mwKTCq6u2ia1xYRwBn3A/640?wx_fmt=jpeg)

大家好，这里是 **渗透攻击红队** 的第 **51** 篇文章，本公众号会记录一些红队攻击的笔记（由浅到深），不定时更新

![](https://mmbiz.qpic.cn/mmbiz_gif/7QRTvkK2qC4T65TNkYZsPg2BJ2VwibZicuBhV9DGqxlsxwG0n2ibhLuBsiamU7S0SqvAp6p33ucxPkuiaDiaKD6ibJGaQ/640?wx_fmt=gif)

痕迹清理

在我们做完一系列的内网渗透操作后，必然会留下一些蛛丝马迹，因此我们需要给自己” 擦屁股 “。本篇只介绍如何清除系统日志、修改文件时间戳。

**痕迹清理**

**Powershell 修改文件时间戳**

有时候我们在登陆目标桌面后，根据需求可能会动用目标主机上的文件或


�봉을 사용하여 암흑 비밀결사의 소환 의식을 중단시킨 다음 용암 지대에 있는 파르쉬아에게 가야 합니다."}},
[10809] = {"현상 수배: 늑대조련사 크루쉬", nil, {"늑대조련사 크루쉬를 처치한 후 해골망치 초소에 있는 대장 다크하울에게 그 증거를 가져가야 합니다."}},
[10810] = {"손상된 복면", nil, {"칼날 산맥의 영원의 숲에 있는 오맬리 잽내버에게 손상된 복면을 전달해야 합니다."}},
[10811] = {"넬타라쿠 찾기", nil, {"황천날개 용군단의 지도자인 넬타라쿠를 찾아야 합니다."}},
[10812] = {"수수께끼의 복면", nil, {"칼날 산맥의 영원의 숲에 있는 야생의 군주 안텔라리온에게 수수께끼의 복면을 전달해야 합니다."}},
[10813] = {"그릴록의 눈", nil, {"제자크의 결정을 사용하여 그릴록의 눈을 잡은 다음 제자크의 가마솥으로 가서 빼내야 합니다. 눈이 제거되면 제자크의 결정을 제자크에게 돌려줘야 합니다."}},
[10814] = {"넬타라쿠의 이야기", nil, {"넬타라쿠와 대화해서 그의 이야기를 들어야 합니다."}},
[10816] = {"성스러운 대지 탈환", nil, {"구원자 알루멘이 어둠달 학살자 8명, 어둠달 정예병 8명, 어둠달 흑마술사 4명을 처치해 달라고 했습니다.\n\n알도르 사제회를 위한 퀘스트를 완수하면 점술가 길드에 대한 평판은 떨어질 것입니다."}},
[10817] = {"통쾌한 복수", nil, {"투쟁자 바렌이 어둠달 학살자 8명, 어둠달 정예병 8명, 어둠달 흑마술사 4명을 처치해 달라고 했습니다