{}'", op_trait), item.ident.span(), errors)
                .to_compile_error();
        }
    };
    let type_ident = &item.ident;

    // We always have other since the ops vec-vec
    let ParsedGenerics { type_generics, .. } = &parsed_generics;
    let other_tokens = quote! {#other #type_generics};

    impl_vec_op_tokens(
        &item.data,
        type_ident,
        other_tokens,
        output,
        parsed_generics,
        trait_info,
    )
}
mod test;

use std::{env, fs};
use std::collections::HashMap;
use std::fmt::{Debug, Formatter};

fn parse_lines(input: &str) -> Vec<i32> {
    input
        .split(",")
        .map(|x|x.parse::<i32>().unwrap())
        .collect::<Vec<_>>()
}

fn part_one(input_file: &str) -> i32 {
    let contents = fs::read_to_string(input_file).unwrap();
    let mut pos = parse_lines(&contents);
    println!("len(pos)={}", pos.len());
    let mut common: HashMap<i32, i8> = HashMap::new();
    for i in &pos {
        let zero = 0;
        let c = common.get(&i).unwrap_or(&zero);
        common.insert(*i, c + 1);
    }
    pos.sort();

    let mid_point = pos.len() / 2;
    let mean = pos.get(mid_point).unwrap();

    // Fuel = distance from mean
    let fuel = pos.iter().map(|x| (x-mean).abs()).sum();
    return fuel
}

fn part_two(input_file: &str) -> i32 {
    let contents = fs::read_to_string(input_file).unwrap();
    let mut pos = parse_lines(&contents);
    let mut common: HashMap<i32, i8> = HashMap::new();
    for i in &pos {
        let zero = 0;
        let c = common.get(&i).unwrap_or(&zero);
        common.insert(*i, c + 1);
    }
    pos.sort();

    let max_pos = pos.iter().max().unwrap();
    let mut prev_fuel = -1;
    for i in 0..max_pos+1 {
        let current_fuel : i32 = pos.iter().map(|x| val_at_x(*x, i)).sum();
        if prev_fuel == -1 {
            // Ignore
        } else if current_fuel > prev_fuel  {
            return prev_fuel;
        }
        prev_fuel = current_fuel;
    }
    return -1;
}

fn val_at_x(x: i32, i: i32) -> i32 {
    let n = (x-i).abs();
    return (n * (n+1))/2;
}

fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() != 2 {
        eprintln!(
            "Invalid arguments provided: please use {} input|sample",
            args[0]
        );
        std::process::exit(1);
    }

    let path = (match args[1].as_str() {
        "sample" => Ok("input/sample.txt"),
        "input" => Ok("input/input.txt"),
        _ => Err("invalid choice"),
    }).unwrap();

    println!("Part 1: {}", part_one(path));
    println!("Part 2: {}", part_two(path));
}
use serde::{Deserialize, Serialize};

use crate::base_card;
use crate::base_card::BaseCard;
use crate::dbconfig::MySqlPooledConnection;
use crate::dto::PlayerDto;
use crate::schema::players;

mod dao;
pub mod handle


htNegativeChannel = 1U;
    }
    else if ((rightRecordChannel & (uint32_t)kWM8904_RecordChannelDifferentialNegative3) != 0U)
    {
        rightNegativeChannel = 2U;
    }
    else
    {
        rightNegativeChannel = rightPositiveChannel;
    }

    regLeftValue  = (((uint16_t)leftNegativeChannel & 3U) << 4U) | (((uint16_t)leftPositiveChannel & 3U) << 2U);
    regRightValue = (((uint16_t)rightNegativeChannel & 3U) << 4U) | (((uint16_t)rightPositiveChannel & 3U) << 2U);
    regBitMask    = 0x3CU;

    ret = WM8904_ModifyRegister(handle, regLeftAddr, regBitMask, regLeftValue);

    if (ret == kStatus_Success)
    {
        return WM8904_ModifyRegister(handle, regRightAddr, regBitMask, regRightValue);
    }

    return kStatus_Success;
}

/*!
 * brief SET the WM8904 play source.
 *
 * param handle WM8904 handle structure.
 * param playSource play source , can be a value of kWM8904_PlaySourcePGA/kWM8904_PlaySourceDAC.
 *
 * return kStatus_WM8904_Success if successful, different code otherwise..
 */
status_t WM8904_SetPlay(wm8904_handle_t *handle, uint32_t playSource)
{
    uint16_t regValue = 0U, regBitMask = 0xFU;

    /* source form PGA*/
    if (playSource == (uint32_t)kWM8904_PlaySourcePGA)
    {
        regValue |= (3U << 2U) | 3U;
    }
    /* source from DAC*/
    if (playSource == (uint32_t)kWM8904_PlaySourceDAC)
    {
        regValue &= (uint16_t) ~((3U << 2U) | 3U);
    }

    return WM8904_ModifyRegister(handle, WM8904_ANALOG_OUT12_ZC, regBitMask, regValue);
}


ri-ui-corner .esri-component.esri-widget--panel-height-only{max-height:420px}.esri-view-height-xsmall .esri-ui-corner .esri-component.esri-widget--panel,.esri-view-height-xsmall .esri-ui-corner .esri-component.esri-widget--panel-height-only{max-height:240px}.esri-ui-bottom-right .esri-menu,.esri-ui-bottom-left .esri-menu{margin-top:0;margin-bottom:2px;top:auto;bottom:100%}[dir=rtl] .esri-widget__table th{text-align:right;border-left:3px solid #0000000d;border-right:none}[dir=rtl] .esri-select{background-position:0}[dir=rtl] .esri-menu__list-item{border-left:none;border-right:3px solid #0000}[dir=rtl] .esri-menu__list-item [class^=esri-icon-],[dir=rtl] .esri-menu__list-item [class*=\ esri-icon-]{padding-left:2px;padding-right:0}[dir=rtl] .esri-menu__list-item--active{border-right-color:#0079c1}.esri-icon-font-fallback-text{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.esri-rotating{animation:1.25s linear infinite esri-rotate;transform:translateZ(0)}.esri-clearfix:before,.esri-clearfix:after{content:" ";display:table}.esri-clearfix:after{clear:both}.esri-interactive{cursor:pointer}.esri-hidden{display:none!important}.esri-invisible{visibility:hidden!important}.esri-offscreen{position:absolute;top:-999em;left:-999em}.esri-match-height{flex-direction:column;flex:auto;display:flex;overflow:hidden}@keyframes esri-fade-in{0%{opacity:0}25%{opacity:0}to{opacity:1}}.esri-attachments__progress-bar:before,.esri-attachments__progress-bar:after{opacity:1;content:"";height:1px;transition:opacity .5s ease-in-out;position:absolute;top:0}.esri-attachments__progress-bar:before{z-index:0;background-color:#6e6e6e4d;width:100%}.esri-attachments__progress-bar:after{z-index:0;background-color:#6e6e6e;width:20%;animation:1.5s linear infinite looping-progresss-bar-ani}.esri-attachments{background-color:#0000;width:100%}.esri-attachments__loader-container{justify-content:center;align-items:center;height:150px;padding:0;display:flex}.esri-attachments__loader{background:url("../themes/base/images/loading-throb.gif") 50% no-repeat;width:100%;height:64px}.esri-attachments__actions{flex-flow:wrap;padding:6px 7px;display:flex}.esri-attachments__item-add-icon{padding:0 7px}.esri-attachments__delete-button{color:#8c2907;width:auto;margin-right:auto}.esri-attachments .esri-attachments__items{width:100%;margin:0;padding:0;display:flex}.esri-attachments .esri-attachments__item{margin:0;line-height:1.2em;list-style-type:none}.esri-attachments__item-button{outline-offset:-4px;cursor:pointer;text-align:unset;color:#6e6e6e;background-color:#fff;border:1px solid #0000;border-radius:2px;align-items:center;width:100%;margin:0 0 6px;padding:6px 7px;text-


ild: Icon(
                      Icons.tune,
                      color: colorScheme.onPrimary,
                      size: 24,
                    ),
                  ),
                  const SizedBox(width: 16),
                  Expanded(
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: [
                        Text(
                          '个性化设置',
                          style: theme.textTheme.titleMedium?.copyWith(
                            fontWeight: FontWeight.bold,
                            color: colorScheme.onPrimaryContainer,
                          ),
                        ),
                        const SizedBox(height: 4),
                        Text(
                          '根据您的使用习惯调整应用行为',
                          style: theme.textTheme.bodyMedium?.copyWith(
                            color: colorScheme.onPrimaryContainer
                                .withValues(alpha: 0.8),
                          ),
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            ),

            const SizedBox(height: 24),

            // 常用偏好
            _buildSectionHeader(context, '常用偏好', Icons.settings_outlined),
            const SizedBox(height: 12),
            _buildPreferenceCard(
              context,
              children: [
                _buildSwitchTile(
                  context: context,
                  title: '剪贴板监控',
                  subtitle: '自动检测剪贴板内容并提示添加笔记',
                  icon: Icons.content_paste_outlined,
                  value: clipboard.enableClipboardMonitoring,
                  onChanged: (v) => clipboard.setEnableClipboardMonitoring(v),
                ),
                _buildDivider(),
                _buildSwitchTile(
                  context: context,
                  title: '显示喜爱按钮',
                  subtitle: '在笔记卡片上显示心形按钮',
                  icon: Icons.favorite_outline,
                  value: settings.showFavoriteButton,
                  onChanged: (v) => settings.setShowFavoriteButton(v),
                ),
                _buildDivider(),
                _buildSwitchTile(
                  context: context,
                  title: '优先显示加粗内容',
                  subtitle: '折叠时优先显示加粗文字',
                  icon: Icons.format_bold,
                  value: settings.prioritizeBoldContentInCollapse,
                  onChanged: (v) =>
                      settings.setPrioritizeBoldContentInCollapse(v),
                ),
                _buildDivider(),
                _buildSwitchTile(
                  context: context,
                  title: '仅使用本地笔记',
                  subtitle: '关闭后，无网络时自动使用本地记录',
                  icon: Icons.offline_bolt_outlined,
                  value: settings.useLocalQuotesOnly,
                  onChanged: (v) => settings.setUseLocalQuotesOnly(v),
                ),
              ],
            ),

            const SizedBox(height: 24),

            // AI 快捷开关
            _buildSectionHeader(
                context, 'AI 智能功能', Icons.auto_awesome_outlined),
            const SizedBox(height: 12),
            _buildPreferenceCard(
              context,
              children: [
                _buildSwitchTile(
                  context: context,
                  title: 'AI生成每日提示',
                  subtitle: '主页每日提示使用AI生成',
                  icon: Icons.lightbulb_outline,
                  value: settings.todayThoughtsUseAI,
                  onChanged: (v) async => settings.setTodayThoughtsUseAI(v),
                ),
                _buildDivider(),
                _buildSwitchTile(
                  context: context,
                  title: '周期报告AI洞察',
                  subtitle: '每周/月报告生


;

    test('2001-02-03T04:05+06:30', () => {
      const result = parseIsoDate('2001-02-03T04:05+06:30');
      const expected = Date.UTC(2001, 1, 3, 4, 5, 0, 0) - sixHoursThirty;
      expect(result).toBe(expected);
    });
    test('2001-02-03T04:05:06+06:30', () => {
      const result = parseIsoDate('2001-02-03T04:05:06+06:30');
      const expected = Date.UTC(2001, 1, 3, 4, 5, 6, 0) - sixHoursThirty;
      expect(result).toBe(expected);
    });
    test('2001-02-03T04:05:06.007+06:30', () => {
      const result = parseIsoDate('2001-02-03T04:05:06.007+06:30');
      const expected = Date.UTC(2001, 1, 3, 4, 5, 6, 7) - sixHoursThirty;
      expect(result).toBe(expected);
    });
  });

  describe('incomplete dates', () => {
    test('2001T04:05:06.007', () => {
      const result = parseIsoDate('2001T04:05:06.007');
      const expected = new Date(2001, 0, 1, 4, 5, 6, 7).valueOf();
      expect(result).toBe(expected);
    });
    test('2001-02T04:05:06.007', () => {
      const result = parseIsoDate('2001-02T04:05:06.007');
      const expected = new Date(2001, 1, 1, 4, 5, 6, 7).valueOf();
      expect(result).toBe(expected);
    });

    test('-010000T04:05', () => {
      const result = parseIsoDate('-010000T04:05');
      const expected = new Date(-10000, 0, 1, 4, 5, 0, 0).valueOf();
      expect(result).toBe(expected);
    });
    test('-010000-02T04:05', () => {
      const result = parseIsoDate('-010000-02T04:05');
      const expected = new Date(-10000, 1, 1, 4, 5, 0, 0).valueOf();
      expect(result).toBe(expected);
    });
    test('-010000-02-03T04:05', () => {
      const result = parseIsoDate('-010000-02-03T04:05');
      const expected = new Date(-10000, 1, 3, 4, 5, 0, 0).valueOf();
      expect(result).toBe(expected);
    });
  });

  describe('invalid date-times', () => {
    test('missing T', () => {
      expect(parseIsoDate('1970-01-01 00:00:00')).toBe(epochLocalTime);
    });
    test('too many characters in millisecond part', () => {
      expect(parseIsoDate('1970-01-01T00:00:00.000000')).toBe(epochLocalTime);
    });
    test('comma instead of dot', () => {
      expect(parseIsoDate('1970-01-01T00:00:00,000')).toBe(epochLocalTime);
    });
    test('missing colon in timezone part', () => {
      const subject = '1970-01-01T00:00:00+0630';
      expect(parseIsoDate(subject)).toBe(Date.parse(subject));
    });
    test('missing colon in time part', () => {
      expect(parseIsoDate('1970-01-01T0000')).toBe(epochLocalTime);
    });
    test('msec with missing seconds', () => {
      expect(parseIsoDate('1970-01-01T00:00.000')).toBeNaN();
    });
  });
});


4

	SUBQ	$16, SP
	CALL	runtime·errstr(SB)
	MOVQ	SP, SI
	ADDQ	$16, SP
	JMP	copyresult4

ok4:
	LEAQ	runtime·emptystring(SB), SI

copyresult4:
	LEAQ	err+80(SP), DI

	CLD
	MOVSQ
	MOVSQ

	CALL	runtime·exitsyscall(SB)
	RET

TEXT ·RawSyscall(SB),NOSPLIT,$0-56
	MOVQ	8(SP), BP	// syscall entry
	// slide args down on top of system call number
	LEAQ		16(SP), SI
	LEAQ		8(SP), DI
	CLD
	MOVSQ
	MOVSQ
	MOVSQ
	SYSCALL
	MOVQ	AX, r1+40(SP)
	MOVQ	AX, r2+48(SP)
	MOVQ	AX, err+56(SP)
	RET

TEXT	·RawSyscall6(SB),NOSPLIT,$0-80
	MOVQ	8(SP), BP	// syscall entry
	// slide args down on top of system call number
	LEAQ		16(SP), SI
	LEAQ		8(SP), DI
	CLD
	MOVSQ
	MOVSQ
	MOVSQ
	MOVSQ
	MOVSQ
	MOVSQ
	SYSCALL
	MOVQ	AX, r1+64(SP)
	MOVQ	AX, r2+72(SP)
	MOVQ	AX, err+80(SP)
	RET

#define SYS_SEEK 39	/* from zsysnum_plan9_amd64.go */

//func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string)
TEXT ·seek(SB),NOSPLIT,$0-56
	LEAQ	newoffset+40(SP), AX
	MOVQ	AX, placeholder+8(SP)

	MOVQ	$SYS_SEEK, BP	// syscall entry
	SYSCALL

	CMPL	AX, $-1
	JNE	ok6
	MOVQ	$-1, newoffset+40(SP)

	SUBQ	$16, SP
	CALL	syscall·errstr(SB)
	MOVQ	SP, SI
	ADDQ	$16, SP
	JMP	copyresult6

ok6:
	LEAQ	runtime·emptystring(SB), SI

copyresult6:
	LEAQ	err+48(SP), DI

	CLD
	MOVSQ
	MOVSQ
	RET

//func exit(code int)
// Import runtime·exit for cleanly exiting.
TEXT ·exit(SB),NOSPLIT,$8-8
	NO_LOCAL_POINTERS
	MOVQ	code+0(FP), AX
	MOVQ	AX, 0(SP)
	CALL	runtime·exit(SB)
	RET


on.models.v0042_stats_msg_rpc_type import V0042StatsMsgRpcType
from slurmrest_python.models.v0042_stats_msg_rpc_user import V0042StatsMsgRpcUser
from slurmrest_python.models.v0042_stats_rec import V0042StatsRec
from slurmrest_python.models.v0042_stats_rpc import V0042StatsRpc
from slurmrest_python.models.v0042_stats_user import V0042StatsUser
from slurmrest_python.models.v0042_step import V0042Step
from slurmrest_python.models.v0042_step_cpu import V0042StepCPU
from slurmrest_python.models.v0042_step_cpu_requested_frequency import V0042StepCPURequestedFrequency
from slurmrest_python.models.v0042_step_nodes import V0042StepNodes
from slurmrest_python.models.v0042_step_statistics import V0042StepStatistics
from slurmrest_python.models.v0042_step_statistics_energy import V0042StepStatisticsEnergy
from slurmrest_python.models.v0042_step_time import V0042StepTime
from slurmrest_python.models.v0042_step_tres import V0042StepTres
from slurmrest_python.models.v0042_step_tres_consumed import V0042StepTresConsumed
from slurmrest_python.models.v0042_step_tres_requested import V0042StepTresRequested
from slurmrest_python.models.v0042_tres import V0042Tres
from slurmrest_python.models.v0042_uint16_no_val_struct import V0042Uint16NoValStruct
from slurmrest_python.models.v0042_uint32_no_val_struct import V0042Uint32NoValStruct
from slurmrest_python.models.v0042_uint64_no_val_struct import V0042Uint64NoValStruct
from slurmrest_python.models.v0042_update_node_msg import V0042UpdateNodeMsg
from slurmrest_python.models.v0042_user import V0042User
from slurmrest_python.models.v0042_user_default import V0042UserDefault
from slurmrest_python.models.v0042_user_short import V0042UserShort
from slurmrest_python.models.v0042_users_add_cond import V0042UsersAddCond
from slurmrest_python.models.v0042_wckey import V0042Wckey
from slurmrest_python.models.v0042_wckey_tag_struct import V0042WckeyTagStruct


    },
    #[structopt(name = "add")]
    /// Add a container to another container on the network
    Add {
        /// Desired container name
        #[structopt(long = "name")]
        name: String,
        /// Location to add into the container
        #[structopt(long = "link")]
        link: String,
    },
    #[structopt(name = "edit")]
    /// Edit files to the network
    Edit {
        /// The key to edit
        #[structopt(short = "k", long = "key")]
        key: String,
        /// The value to edit
        #[structopt(short = "d", long = "value")]
        value: bool,
    },
}
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

mod abs_moniker;
mod child_moniker;
mod error;
mod extended_moniker;
mod partial_child_moniker;
mod relative_moniker;

pub use self::{
    abs_moniker::{AbsoluteMoniker, AbsoluteMonikerBase, PartialAbsoluteMoniker},
    child_moniker::{ChildMoniker, ChildMonikerBase, InstanceId},
    error::MonikerError,
    extended_moniker::ExtendedMoniker,
    partial_child_moniker::PartialChildMoniker,
    relative_moniker::{PartialRelativeMoniker, RelativeMoniker, RelativeMonikerBase},
};
use crate::entity::cardpool::{CardPool,PooledCardData};
use crate::entity::{Dispatch, TagKey, TagVal, Trigger};
use crate::game::player::Player;
use crate::game::script::{Script, ScriptManager};
use crate::utils::vecmap::IndexKey;
use std::collections::HashMap;
use std::fmt;

pub type CardKey = IndexKey;

//#[derive(Clone, Default, PartialEq)]
pub struct Card {
    //key: CardKey,
    name: String,
    text: String,
    tags: HashMap<TagKey, TagVal>,
    script: Script,
}

impl fmt::Debug for Card {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(
            f,
            "Card {{name: {}, tags.len(): {}}}",
            self.name,
            self.tags.len(),
        )
    }
}
impl fmt::Display for Card {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(
            f,
            "{}#{:04} ({} tags)",
            self.name(),
            0,//self.key(),
            self.tags_len()
        )
    }
}

impl Card {
    /// Creates a known card using data from the cardpool.
    pub fn from_pool(key: CardKey, data: &PooledCardData) -> Card {
        Card {
            name: (String::from(data.name())),
            text: (String::from(data.text())),
            tags: (data.clone_tags()),
            script: ScriptManager::get(data.script()),
        }
    }
    pub fn new(key: CardKey, name: &str) -> Card {
        if let Some(data) = CardPool::lookup_name(name) {
            Card::from_pool(key, data)
        } else {
            Card {
                name: (String::from("Unknown Card")),
                text: (String::from("")),
                tags: HashMap::new(),
                script: ScriptManager::get("none"),
            }
        }
    }

    #[inline]
    pub fn name(&self) -> &str {
        &self.name
    }
    #[inline]
    pub fn text(&self) -> &str {
        &self.text
    }
    #[inline]
    pub fn tags_len(&self) -> usize {
        self.tags.len()
    }

    pub fn g


());
}

// hobeta header crc = ((105 + 257 * std::accumulate(data, data + 15, 0u)) & 0xffff))

void SetupWin::diskToHobeta() {
	QModelIndexList idx = ui.disklist->selectionModel()->selectedRows();
	if (idx.size() == 0) return;
	QString dir = QFileDialog::getExistingDirectory(this,"Save file(s) to...","",QFileDialog::DontUseNativeDialog | QFileDialog::ShowDirsOnly);
	if (dir == "") return;
	Computer* comp = conf.prof.cur->zx;
	std::string sdir = std::string(dir.toLocal8Bit().data()) + SLASH;
	Floppy* flp = comp->dif->fdc->flop[ui.disktabs->currentIndex()];		// selected floppy
	int savedFiles = 0;
	for (int i=0; i<idx.size(); i++) {
		if (saveHobetaFile(flp,idx[i].row(),sdir.c_str()) == ERR_OK) savedFiles++;
	}
	std::string msg = std::string(int2str(savedFiles)) + " of " + int2str(idx.size()) + " files saved";
	showInfo(msg.c_str());
}

void SetupWin::diskToRaw() {
	QModelIndexList idx = ui.disklist->selectionModel()->selectedRows();
	if (idx.size() == 0) return;
	QString dir = QFileDialog::getExistingDirectory(this,"Save file(s) to...","",QFileDialog::DontUseNativeDialog | QFileDialog::ShowDirsOnly);
	if (dir == "") return;
	Computer* comp = conf.prof.cur->zx;
	std::string sdir = std::string(dir.toLocal8Bit().data()) + SLASH;
	Floppy* flp = comp->dif->fdc->flop[ui.disktabs->currentIndex()];
	int savedFiles = 0;
	for (int i=0; i<idx.size(); i++) {
		if (saveRawFile(flp,idx[i].row(),sdir.c_str()) == ERR_OK) savedFiles++;
	}
	std::string msg = std::string(int2str(savedFiles)) + " of " + int2str(idx.size()) + " files saved";
	showInfo(msg.c_str());
}

TRFile getHeadInfo(Tape* tape, int blk) {
	TRFile res;
	TapeBlockInfo inf = tapGetBlockInfo(tape,blk,TFRM_ZX);
	unsigned char* dt = (unsigned char*)malloc(inf.size + 2);
	tapGetBlockData(tape,blk,dt,inf.size+2);
	for (int i=0; i<8; i++) res.name[i] = dt[i+2];
	switch (dt[1]) {
		case 0:
			res.ext = 'B';
			res.lst = dt[12]; res.hst = dt[13];
			res.llen = dt[16]; res.hlen = dt[17];
			// autostart?
			break;
		case 3:
			res.ext = 'C';
			res.llen = dt[12]; res.hlen = dt[13];
			res.lst = dt[14]; res.hst = dt[15];
			break;
		default:
			res.ext = 0x00;
	}
	res.slen = res.hlen;
	if (res.llen != 0) res.slen++;
	free(dt);
	return res;
}

void SetupWin::copyToDisk() {
	unsigned char* dt;
	unsigned char buf[256];
	int pos;	// skip block type mark
	TapeBlockInfo inf;
	TRFile dsc;

	QModelIndexList idl = ui.tapelist->selecti


pub const GSStatsReceived_t_k_iCallback: GSStatsReceived_t__bindgen_ty_1 =
	GSStatsReceived_t__bindgen_ty_1::k_iCallback;
#[repr(i32)]
#[non_exhaustive]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum GSStatsReceived_t__bindgen_ty_1 {
	k_iCallback = 1800,
}
#[test]
fn bindgen_test_layout_GSStatsReceived_t() {
	assert_eq!(
		::std::mem::size_of::<GSStatsReceived_t>(),
		12usize,
		concat!("Size of: ", stringify!(GSStatsReceived_t))
	);
	assert_eq!(
		::std::mem::align_of::<GSStatsReceived_t>(),
		4usize,
		concat!("Alignment of ", stringify!(GSStatsReceived_t))
	);
	assert_eq!(
		unsafe { &(*(::std::ptr::null::<GSStatsReceived_t>())).m_eResult as *const _ as usize },
		0usize,
		concat!(
			"Offset of field: ",
			stringify!(GSStatsReceived_t),
			"::",
			stringify!(m_eResult)
		)
	);
	assert_eq!(
		unsafe { &(*(::std::ptr::null::<GSStatsReceived_t>())).m_steamIDUser as *const _ as usize },
		4usize,
		concat!(
			"Offset of field: ",
			stringify!(GSStatsReceived_t),
			"::",
			stringify!(m_steamIDUser)
		)
	);
}
#[repr(C)]
#[derive(Copy, Clone)]
pub struct GSStatsStored_t {
	pub m_eResult: EResult,
	pub m_steamIDUser: CSteamID,
}
pub const GSStatsStored_t_k_iCallback: GSStatsStored_t__bindgen_ty_1 =
	GSStatsStored_t__bindgen_ty_1::k_iCallback;
#[repr(i32)]
#[non_exhaustive]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum GSStatsStored_t__bindgen_ty_1 {
	k_iCallback = 1801,
}
#[test]
fn bindgen_test_layout_GSStatsStored_t() {
	assert_eq!(
		::std::mem::size_of::<GSStatsStored_t>(),
		12usize,
		concat!("Size of: ", stringify!(GSStatsStored_t))
	);
	assert_eq!(
		::std::mem::align_of::<GSStatsStored_t>(),
		4usize,
		concat!("Alignment of ", stringify!(GSStatsStored_t))
	);
	assert_eq!(
		unsafe { &(*(::std::ptr::null::<GSStatsStored_t>())).m_eResult as *const _ as usize },
		0usize,
		concat!(
			"Offset of field: ",
			stringify!(GSStatsStored_t),
			"::",
			stringify!(m_eResult)
		)
	);
	assert_eq!(
		unsafe { &(*(::std::ptr::null::<GSStatsStored_t>())).m_steamIDUser as *const _ as usize },
		4usize,
		concat!(
			"Offset of field: ",
			stringify!(GSStatsStored_t),
			"::",
			stringify!(m_steamIDUser)
		)
	);
}
#[repr(C)]
#[derive(Copy, Clone)]
pub struct GSStatsUnloaded_t {
	pub m_steamIDUser: CSteamID,
}
pub const GSStatsUnloaded_t_k_iCallback: GSStatsUnloaded_t__bindgen_ty_1 =
	GSStatsUnloaded_t__bindgen_ty_1::k_iCallback;
#[repr(i32)]
#[non_exhaustive]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum GSStatsUnloaded_t__bindgen_ty_1 {
	k_iCallback = 110


                    Python 中的@property装饰器

                    Python 中的assert语句

                    Python 中的垃圾收集

                    Python 浅和深复制

            Published with GitBook

        Python 中的assert语句

Python 中的assert语句

原文：https://www.studytonight.com/python/python-assert

在编程中，断言用于验证指定条件是否为真。例如，如果我们有一个函数将两个数字相加，在使用+运算符将用户提供的两个数字相加之前，我们可以使用一个断言来检查输入的值是否只是数字，而不是字母或特殊字符。

Assert 语句包含一个布尔表达式，用于检查条件的真实性，如果发现有效，则返回 true，否则返回 false。

当在程序中使用断言时，在肯定断言的情况下，程序将继续正常执行，而在否定断言的情况下，程序将停止执行并抛出一个错误。

Python assert语句

在 python 中，有一个内置的 assert 语句，可以用来在程序中实现断言。python 中的 assert 语句将一个条件或表达式作为参数，并期望它为真，以便程序继续执行。如果条件/表达式为假，assert 语句将抛出一个 AssertionError ，从而中断程序的正常执行。

python 中的断言是将条件应用于验证的 python 方式，通常使用if...else条件。

让我们举一个简单的例子来理解何时何地使用 assert 语句。如果您有一个程序将用户输入的密码作为输入，则应检查输入是否为强密码，如果发现强密码，则应存储该密码，否则应要求用户重新输入密码。在这种情况下，我们可以使用 assert 语句对输入的


<p>Username:<input type=text name=username size=32 maxlength=32>
        <p>Password:<input type=password name=password size=32 maxlength=32>
        <p><input type=reset value="RESET">
        <p><input type=submit name="submitit" value="SUBMIT">
    </form>
  </body>
</html>

Note the 'type=password' attribute & value for the input element named 'password'.  One can use common utilities such as procmon or regshot to see IEInternet Explorer interact with the 'Storage2' registry key.

Within the aforementioned registry keys, Internet Explorer creates REG_BINARY entries which correspond to visited URLs.  The Value Name of a REG_BINARY value is the hex representation of a combination of the hex representation of the 20 byte SHA1 has of the URL, along with a "checksum" byte.  The value name is crafted via:

For a given URL, which is in lowercase (unknown what that would actually mean for a non-western alphabet) and encoded as a NULL terminated, UTF-16 LE string, calculate the SHA-1 hash of the URL.  This will yield a twenty byte value.

For each byte of the twenty bytes of the URL's hash, add them together modulo 256 (i.e., store a running tally of the bytes of the hash in an unsigned char)

Form a string which consists of the concatenation of the hex representation of the hash and the hex representation of the checksum byte's value.

For an example, consult the following Python (2.7.x) session/code:

>>> import hashlib
>>> url = "http://192.168.146.128:8080/creds_form_savepass.html" + "\x00"
>>> url_utf_16_le = url.encode("utf-16-le")
>>> sha1obj = hashlib.sha1(url_utf_16_le)
>>> urldigest = sha1obj.digest()
>>> checksum = 0
>>> len(urldigest)
20
>>> for abyte in urldigest:
...   checksum = (checksum + (ord(abyte))) & 0xFF
...
>>> hash = sha1obj.hexdigest().upper()
>>> cksum = "%02X" % checksum
>>> reg_value_name = "%s%s" % (hash, cksum)
>>> print reg_value_name
263E55A1AC93C5F70F2F3CAB9F1DCEE4A899B2E9C4

the resultant reg_value_name is the value name which will be found in the registry under one of the aforementioned registry keys.

IE10+

Autocomplete Form Data and Passwords

TBPosted.  Until more info is posted here, please feel free to browse some of the listed references such as (6) and (10)

Chrome

Firefox

References

(1) Law, E., Why Won't IEIn


                    dialog.showDialog();
            }
        }
    }

    /*
    static Intent getIntentForStartupSource(Context context, int startupSource) {
        Intent intentLaunch;

        switch (startupSource) {
            case PPApplication.STARTUP_SOURCE_NOTIFICATION:
                if (ApplicationPreferences.applicationNotificationLauncher.equals(StringConstants.EXTRA_ACTIVATOR))
                    intentLaunch = new Intent(context.getApplicationContext(), ActivatorActivity.class);
                else
                    intentLaunch = new Intent(context.getApplicationContext(), EditorActivity.class);
                break;
            case PPApplication.STARTUP_SOURCE_WIDGET:
                if (ApplicationPreferences.applicationWidgetLauncher.equals(StringConstants.EXTRA_ACTIVATOR))
                    intentLaunch = new Intent(context.getApplicationContext(), ActivatorActivity.class);
                else
                    intentLaunch = new Intent(context.getApplicationContext(), EditorActivity.class);
                break;
//            case PPApplication.STARTUP_SOURCE_EDITOR_WIDGET_HEADER:
//                intentLaunch = new Intent(context.getApplicationContext(), EditorActivity.class);
//                //startupSource = PPApplication.STARTUP_SOURCE_WIDGET;
//                break;
            default:
                //if (ApplicationPreferences.applicationHomeLauncher.equals("activator"))
                    intentLaunch = new Intent(context.getApplicationContext(), ActivatorActivity.class);
                //else
                //    intentLaunch = new Intent(context.getApplicationContext(), EditorActivity.class);
                break;
        }
        return intentLaunch;
    }
    */

    /*
     * Converts an HSL color value to RGB. Conversion formula
     * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
     * Assumes h, s, and l are contained in the set [0, 1] and
     * returns r, g, and b in the set [0, 255].
     *
     * @param h       The hue
     * @param s       The saturation
     * @param l       The lightness
     * @return int array, the RGB representation
     * @noinspection JavadocLinkAsPlainText
    static int[] hslToRgb(float h, float s, float l){
        float r, g, b;

        if (s == 0f) {
            r = g = b = l; // achromatic
        } else {
            float q = l < 0.5f ? l * (1 + s) : l + s - l * s;
            float p = 2 * l - q;
            r = hueToRgb(p, q, h + 1f/3f);
            g = hueToRgb(p, q, h);
            b = hueToRgb(p, q, h - 1f/3f);
        }
        //noinspection UnnecessaryLocalVariable
        int[] rgb = {to255(r), to255(g), to255(b)};
        return rgb;
    }
    static int to255(float v) {
        return (int)Math.min(255,256*v);
    }
    */

    /* Helper method that converts hue to rgb
    static float hueToRgb(float p, float q, float t) {
        if (t < 0f)
            t += 1f;
        if (t > 1f)
            t -= 1f;
        if (t < 1f/6f)
            return p + (q - p) * 6f * t;
        if (t < 1f/2f)
            return q;
        if (t < 2f/3f)
            return p + (q - p) * (2f/3f - t) * 6f;
        return p;
    }
    */

    /*
     * Converts an RGB color value to HSL. Conversion formula
     * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
     * Assumes pR, pG, and bpBare contained in the


-NEXT:    br label [[COND_END1338]]
// SIMD-ONLY0:       cond.end1338:
// SIMD-ONLY0-NEXT:    [[COND1339:%.*]] = phi i32 [ [[CONV1335]], [[COND_TRUE1334]] ], [ [[CONV1337]], [[COND_FALSE1336]] ]
// SIMD-ONLY0-NEXT:    [[CONV1340:%.*]] = trunc i32 [[COND1339]] to i16
// SIMD-ONLY0-NEXT:    store i16 [[CONV1340]], ptr [[USX]], align 2
// SIMD-ONLY0-NEXT:    [[TMP554:%.*]] = load i16, ptr [[USE]], align 2
// SIMD-ONLY0-NEXT:    [[CONV1341:%.*]] = zext i16 [[TMP554]] to i32
// SIMD-ONLY0-NEXT:    [[TMP555:%.*]] = load i16, ptr [[USX]], align 2
// SIMD-ONLY0-NEXT:    [[CONV1342:%.*]] = zext i16 [[TMP555]] to i32
// SIMD-ONLY0-NEXT:    [[CMP1343:%.*]] = icmp sgt i32 [[CONV1341]], [[CONV1342]]
// SIMD-ONLY0-NEXT:    br i1 [[CMP1343]], label [[COND_TRUE1345:%.*]], label [[COND_FALSE1347:%.*]]
// SIMD-ONLY0:       cond.true1345:
// SIMD-ONLY0-NEXT:    [[TMP556:%.*]] = load i16, ptr [[USE]], align 2
// SIMD-ONLY0-NEXT:    [[CONV1346:%.*]] = zext i16 [[TMP556]] to i32
// SIMD-ONLY0-NEXT:    br label [[COND_END1349:%.*]]
// SIMD-ONLY0:       cond.false1347:
// SIMD-ONLY0-NEXT:    [[TMP557:%.*]] = load i16, ptr [[USX]], align 2
// SIMD-ONLY0-NEXT:    [[CONV1348:%.*]] = zext i16 [[TMP557]] to i32
// SIMD-ONLY0-NEXT:    br label [[COND_END1349]]
// SIMD-ONLY0:       cond.end1349:
// SIMD-ONLY0-NEXT:    [[COND1350:%.*]] = phi i32 [ [[CONV1346]], [[COND_TRUE1345]] ], [ [[CONV1348]], [[COND_FALSE1347]] ]
// SIMD-ONLY0-NEXT:    [[CONV1351:%.*]] = trunc i32 [[COND1350]] to i16
// SIMD-ONLY0-NEXT:    store i16 [[CONV1351]], ptr [[USX]], align 2
// SIMD-ONLY0-NEXT:    [[TMP558:%.*]] = load i16, ptr [[USE]], align 2
// SIMD-ONLY0-NEXT:    [[CONV1352:%.*]] = zext i16 [[TMP558]] to i32
// SIMD-ONLY0-NEXT:    [[TMP559:%.*]] = load i16, ptr [[USX]], align 2
// SIMD-ONLY0-NEXT:    [[CONV1353:%.*]] = zext i16 [[TMP559]] to i32
// SIMD-ONLY0-NEXT:    [[CMP1354:%.*]] = icmp slt i32 [[CONV1352]], [[CONV1353]]
// SIMD-ONLY0-NEXT:    br i1 [[CMP1354]], label [[COND_TRUE1356:%.*]], label [[COND_FALSE1358:%.*]]
// SIMD-ONLY0:       cond.true1356:
// SIMD-ONLY0-NEXT:    [[TMP560:%.*]] = load i16, ptr [[USE]], align 2
// SIMD-ONLY0-NEXT:    [[CONV1357:%.*]] = zext i16 [[TMP560]] to i32
// SIMD-ONLY0-NEXT:    br label [[COND_END1360:%.*]]
// SIMD-ONLY0:       cond.false1358:
// SIMD-ONL


ry-content");
                    entryContentDiv.style.display = 'none'; // Start hidden

                    dateHeader.appendChild(dateIcon);
                    dateHeader.appendChild(dateSpan);
                    dateItem.appendChild(dateHeader);
                    dateItem.appendChild(entryContentDiv);
                    pageSection.appendChild(dateItem);
                }

                // Create a clickable link
                const videoEntryLink = document.createElement("a");
                videoEntryLink.href = `../video_player/index.html?type=${encodeURIComponent(videoType)}&index=${encodeURIComponent(i)}`;
                videoEntryLink.classList.add("video-entry");

                // Include time, thumbnail, duration in left
                const leftVideoInfoContainer = document.createElement("div");
                leftVideoInfoContainer.classList.add("left-container");

                const timeDivElement = document.createElement("div");
                timeDivElement.classList.add("time");
                const hmsParts = entry.timestamp.split("_")[1].split('-');
                timeDivElement.textContent = `${hmsParts[0]}:${hmsParts[1]}`;  // 只显示时分
                leftVideoInfoContainer.appendChild(timeDivElement);

                const videoThumbnailDiv = document.createElement("div");
                videoThumbnailDiv.classList.add("video-thumbnail");

                const img = document.createElement("img");
                img.alt = "Video Thumbnail";
                if (!entry.thumbPath || entry.thumbPath.trim() === '') {
                    img.src = "default_thumbnail.svg";  // 设置默认缩略图
                } else {
                    img.src = entry.thumbPath; // 使用实际的缩略图路径
                }

                const durationDivElement = document.createElement("div");
                durationDivElement.classList.add("video-duration");
                durationDivElement.textContent = formatDuration(entry.duration);

                videoThumbnailDiv.appendChild(img);
                videoThumbnailDiv.appendChild(durationDivElement);

                if (entry.city && entry.city.trim() != '') {
                    const cityDivElement = document.createElement("div");
                    cityDivElement.classList.add("city");
                    cityDivElement.textContent = entry.city;
                    videoThumbnailDiv.appendChild(cityDivElement);
                }

                leftVideoInfoContainer.appendChild(videoThumbnailDiv);

                const rightVideoActionContainer = document.createElement("div");
                rightVideoActionContainer.classList.add("right-container");

                const openFolderButton = document.createElement("button");
                openFolderButton.innerHTML = '';
                openFolderButton.classList.add("tool-bar-button");
                openFolderButton.onclick = (event) => {
                    event.preventDefault(); // Prevent link navigation
                    openVideoFolder(entry);
                };
                rightVideoActionContainer.appendChild(openFolderButton);

                const deleteButton = document.createElement("button");
                deleteButton.innerHTML = '';
                deleteButton.classList.add("tool-bar-button");
                deleteButton.onclick = (event) => {
                    event.preventDefault(); // Prevent link navigation
                    deleteVideoEntry(videoType, entry, i);
                };
                rightVideoActionContainer.appendChild(deleteButton);

                videoEntryLink.appendChild(leftVideoInfoContainer);
                videoEntryLink.appendChild(rightVideoActionContainer);
                entryContentDiv.appendChild(videoEntryLink); // Add video entry to current entry content
            }
        }

        function showSection(sectionId) {
            // Hide all pages
            const pages = document.querySelectorAll('.page');
            pages.forEach(


= ["cuan"],
        ['躀'] = ["guan"],
        ['躁'] = ["zao"],
        ['躂'] = ["da"],
        ['躃'] = ["bi"],
        ['躄'] = ["bi"],
        ['躅'] = ["zhu", "zhuo"],
        ['躆'] = ["ju"],
        ['躇'] = ["chu"],
        ['躈'] = ["qiao"],
        ['躉'] = ["dun"],
        ['躊'] = ["chou"],
        ['躋'] = ["ji"],
        ['躌'] = ["wu"],
        ['躍'] = ["yue"],
        ['躎'] = ["nian"],
        ['躏'] = ["lin"],
        ['躐'] = ["lie"],
        ['躑'] = ["zhi"],
        ['躒'] = ["li", "luo"],
        ['躓'] = ["zhi"],
        ['躔'] = ["chan"],
        ['躕'] = ["chu"],
        ['躖'] = ["duan"],
        ['躗'] = ["wei"],
        ['躘'] = ["long"],
        ['躙'] = ["lin"],
        ['躚'] = ["xian"],
        ['躛'] = ["wei"],
        ['躜'] = ["zuan"],
        ['躝'] = ["lan"],
        ['躞'] = ["xie"],
        ['躟'] = ["rang"],
        ['躠'] = ["sa", "xie"],
        ['躡'] = ["nie"],
        ['躢'] = ["ta"],
        ['躣'] = ["qu"],
        ['躤'] = ["ji"],
        ['躥'] = ["cuan"],
        ['躦'] = ["zuan"],
        ['躧'] = ["xi"],
        ['躨'] = ["kui"],
        ['躩'] = ["jue"],
        ['躪'] = ["lin"],
        ['身'] = ["shen"],
        ['躬'] = ["gong"],
        ['躭'] = ["dan"],
        ['躯'] = ["qu"],
        ['躰'] = ["ti"],
        ['躱'] = ["duo"],
        ['躲'] = ["duo"],
        ['躳'] = ["gong"],
        ['躴'] = ["lang"],
        ['躶'] = ["luo"],
        ['躷'] = ["ai"],
        ['躸'] = ["ji"],
        ['躹'] = ["ju"],
        ['躺'] = ["tang"],
        ['躼'] = ["lao"],
        ['躽'] = ["yan"],
        ['躿'] = ["kang"],
        ['軀'] = ["qu"],
        ['軁'] = ["lou"],
        ['軂'] = ["lao"],
        ['軃'] = ["duo"],
        ['軄'] = ["zhi"],
        ['軅'] = ["yan"],
        ['軆'] = ["ti"],
        ['軇'] = ["dao"],
        ['軉'] = ["yu"],
        ['車'] = ["che", "ju"],
        ['軋'] = ["ga", "ya", "zha"],
        ['軌'] = ["gui"],
        ['軍'] = ["jun"],
        ['軎'] = ["wei"],
        ['軏'] = ["yue"],
        ['軐'] = ["xian", "xin"],
        ['軑'] = ["dai"],
        ['軒'] = ["xuan"],
        ['軓'] = ["fan", "gui"],
        ['軔'] = ["ren"],
        ['軕'] = ["shan"],
        ['軖'] = ["kuang"],
        ['軗'] = ["shu"],
        ['軘'] = ["tun"],
        ['軙'] = ["chen"],
        ['軚'] = ["dai"],
        ['軛'] = ["e"],
        ['軜'] = ["na"],
        ['軝'] = ["qi"],
        ['軞'] = ["mao"],
        ['軟'] = ["ruan"],
        ['軠'] = ["kuang"],
        ['軡'] = ["q


NT,
	LG_TRAMPLE,
	LG_SHIELDPRESS,
	LG_REFLECTDAMAGE,
	LG_PINPOINTATTACK,
	LG_FORCEOFVANGUARD,
	LG_RAGEBURST,
	LG_SHIELDSPELL,
	LG_EXEEDBREAK,
	LG_OVERBRAND,
	LG_PRESTIGE,
	LG_BANDING,
	LG_MOONSLASHER,
	LG_RAYOFGENESIS,
	LG_PIETY,
	LG_EARTHDRIVE,
	LG_HESPERUSLIT,
	LG_INSPIRATION,

	SR_DRAGONCOMBO,
	SR_SKYNETBLOW,
	SR_EARTHSHAKER,
	SR_FALLENEMPIRE,
	SR_TIGERCANNON,
	SR_HELLGATE,
	SR_RAMPAGEBLASTER,
	SR_CRESCENTELBOW,
	SR_CURSEDCIRCLE,
	SR_LIGHTNINGWALK,
	SR_KNUCKLEARROW,
	SR_WINDMILL,
	SR_RAISINGDRAGON,
	SR_GENTLETOUCH,
	SR_ASSIMILATEPOWER,
	SR_POWERVELOCITY,
	SR_CRESCENTELBOW_AUTOSPELL,
	SR_GATEOFHELL,
	SR_GENTLETOUCH_QUIET,
	SR_GENTLETOUCH_CURE,
	SR_GENTLETOUCH_ENERGYGAIN,
	SR_GENTLETOUCH_CHANGE,
	SR_GENTLETOUCH_REVITALIZE,

	WA_SWING_DANCE = 2350,
	WA_SYMPHONY_OF_LOVER,
	WA_MOONLIT_SERENADE,

	MI_RUSH_WINDMILL = 2381,
	MI_ECHOSONG,
	MI_HARMONIZE,

	WM_LESSON = 2412,
	WM_METALICSOUND,
	WM_REVERBERATION,
	WM_REVERBERATION_MELEE,
	WM_REVERBERATION_MAGIC,
	WM_DOMINION_IMPULSE,
	WM_SEVERE_RAINSTORM,
	WM_POEMOFNETHERWORLD,
	WM_VOICEOFSIREN,
	WM_DEADHILLHERE,
	WM_LULLABY_DEEPSLEEP,
	WM_SIRCLEOFNATURE,
	WM_RANDOMIZESPELL,
	WM_GLOOMYDAY,
	WM_GREAT_ECHO,
	WM_SONG_OF_MANA,
	WM_DANCE_WITH_WUG,
	WM_SOUND_OF_DESTRUCTION,
	WM_SATURDAY_NIGHT_FEVER,
	WM_LERADS_DEW,
	WM_MELODYOFSINK,
	WM_BEYOND_OF_WARCRY,
	WM_UNLIMITED_HUMMING_VOICE,

	SO_FIREWALK = 2443,
	SO_ELECTRICWALK,
	SO_SPELLFIST,
	SO_EARTHGRAVE,
	SO_DIAMONDDUST,
	SO_POISON_BUSTER,
	SO_PSYCHIC_WAVE,
	SO_CLOUD_KILL,
	SO_STRIKING,
	SO_WARMER,
	SO_VACUUM_EXTREME,
	SO_VARETYR_SPEAR,
	SO_ARRULLO,
	SO_EL_CONTROL,
	SO_SUMMON_AGNI,
	SO_SUMMON_AQUA,
	SO_SUMMON_VENTUS,
	SO_SUMMON_TERA,
	SO_EL_ACTION,
	SO_EL_ANALYSIS,
	SO_EL_SYMPATHY,
	SO_EL_CURE,
	SO


�制的内容

然后点击```Covert```转换格式

![c](images/incus20.png)

然后就会自动刷新页面出现需要自己用vim或者vi命令修改```/etc/network/interfaces```文件增加的内容了，或者修改以下命令新增

```
tee -a /etc/network/interfaces <<EOF
# 这里修改一下
EOF
```

然后你就需要重启一下系统，或者执行

```
apt-get install net-tools iproute2 -y
systemctl restart networking
```

保证环境无问题再进行别的操作了

## 转移不同服务器之间的IPV6子网

相关仓库：[https://github.com/oneclickvirt/6in4](https://github.com/oneclickvirt/6in4)

该方法将提供一种方式，将A上的IPV6网段拆分一个子ipv6网段的出来，附加到B上使用

你需要在B所在的服务器上使用本套脚本给容器一键配置IPV6地址

### 功能

- 自建sit/gre/ipip协议的IPv6隧道
- 支持自定义要切分出来的IPV6子网大小，将自动计算出合适的CIDR格式的IPV6子网信息
- 自动识别服务端的IPV6子网大小
- 将自动设置隧道服务端并打印客户端需要执行的命令
- 设置IPV6隧道的方法简单易懂，易于删除

### 环境准备

| VPS(A)                    | VPS(B)                    |
| ------------------------- | ------------------------- |
| 一个IPV4地址(server_ipv4) | 一个IPV4地址(clinet_ipv4) |
| 一个IPV6子网              | 无IPV6地址                |
| 以下称之为服务端          | 以下称之为客户端          |

### 使用方法

下载脚本

```
curl -L https://raw.githubusercontent.com/oneclickvirt/6in4/main/6in4.sh -o 6in4.sh && chmod +x 6in4.sh
```

执行命令

```
./6in4.sh client_ipv4 <mode_type> <subnet_size>
```

| 选项          | 可选的选项1 | 可选的选项2 | 可选的选项3 |
| ------------- | ----------- | ----------- | ----------- |
| <mode_type>   | gre         | sit         | ipip        |
| <subnet_size> | 64          | 80          | 112         |

```<mode_type>```暂时只支持那三种协议，越靠前的越推荐，不填则默认为```sit```协议

```<subnet_size>```只要比原系统子网掩码大就行，且是8的倍数，不填则默认为```80```

记得```client_ipv4```替换为需要附加IPV6的机器的IPV4地址，执行完毕后会回传你需要在客户端执行的命令，详见执行后的说明即可

为防止忘记复制命令，命令本


Id as a message that was deleted. The mbox may not be
altered in any way other than deleting from beginning of the mbox
or appending new messages to the end (unless you rebuild the
archive from scratch using a complete mbox).

mbox_shortened = 0

ietf_mbox = [ 0 | 1 ]

Setting this variable to 1 will tell hypermail that the mbox is
formatted according to the IETF mbox convention: all lines, except
for the envelope, are prefixed with a > char.

ietf_mbox = 0

discard_dup_msgids = [ 0 | 1 ]

Set this to 0 to accept messages with a Message-ID matching
that of a message already in this archive. By default such messages
are discarded.

discard_dup_msgids = 1

require_msgids = [ 0 | 1 ]

Set this to 0 to accept messages without a Message-ID
header.

Set this to 1 to discard messages without a Message-ID header.

By default such messages are discarded.

require_msgids = 1

Message Filtering

Regular expression support is provided by the PCRE  library package, which is
open source software, written by Philip Hazel, and copyright by the
University of Cambridge, England.

The full body searches can be slow, and do not match multi-line
strings in message bodies. A string that spans multiple lines of a
header can be matched.

filter_out = expression

Delete from the html archives any message having a header line
which matches any of these expressions. Uses the same rules for
deletion as the expires option. The expressions use the same syntax
as Perl regular expressions.

The following examples should reject messages Cc'd to more than
3 addresses or from any address at spammers.com. This option is
disabled by default.

filter_out=Cc:([^,]*,){3}

filter_out=From:.+@spammers.com

filter_require = expression

Delete from the html archives any message not having header
lines which match each of these expressions. Uses the same rules
for deletion as the expires option. The expressions use the same
syntax as Perl regular expressions.

filter_require =

filter_out_full_body = expression

Delete from the html archives any message having a line which
matches any of these expressions. Uses the same rules for deletion
as the expires option. The expressions use the same syntax as Perl
regular expressions.

filter_out_full_body =

filter_require_full_body = expression

Delete from the html archives any messag


# WARNING: Please don't edit this file. It was generated by Python/WinRT v0.9.210202.1

import typing, winrt

_ns_module = winrt._import_ns_module("Windows.ApplicationModel.LockScreen")

try:
    import winrt.windows.foundation
except:
    pass

try:
    import winrt.windows.foundation.collections
except:
    pass

try:
    import winrt.windows.storage.streams
except:
    pass

LockApplicationHost = _ns_module.LockApplicationHost
LockScreenBadge = _ns_module.LockScreenBadge
LockScreenInfo = _ns_module.LockScreenInfo
LockScreenUnlockingDeferral = _ns_module.LockScreenUnlockingDeferral
LockScreenUnlockingEventArgs = _ns_module.LockScreenUnlockingEventArgs


ed */
   requiredredcost = cutoffbound - lpobjval;

   SCIPdebugMsg(scip, "lpobjval <%g>, cutoffbound <%g>, max reduced <%g>, propgate binary %u, use implics %u\n",
      lpobjval, cutoffbound, propdata->maxredcost, propbinvars, propdata->usefullimplics);

   /* check reduced costs for non-basic columns */
   for( c = 0; c < ncols && !cutoff; ++c )
   {
      SCIP_VAR* var;

      var = SCIPcolGetVar(cols[c]);

      /* skip continuous variables in case the corresponding parameter is set */
      if( !propdata->continuous && !SCIPvarIsIntegral(var) )
         continue;

      if( SCIPvarIsBinary(var) )
      {
         if( propbinvars )
         {
            if( SCIPgetDepth(scip) == 0 )
            {
               SCIP_CALL( propagateRootRedcostBinvar(scip, propdata, var, cols[c], cutoffbound, &nchgbds) );
            }
            else
            {
               SCIP_CALL( propagateRedcostBinvar(scip, propdata, var, cols[c], requiredredcost, &nchgbds, &cutoff) );
            }
         }
      }
      else
      {
         SCIP_CALL( propagateRedcostVar(scip, var, cols[c], lpobjval, cutoffbound, &nchgbds) );
      }
   }

   if( cutoff )
   {
      *result = SCIP_CUTOFF;

      SCIPdebugMsg(scip, "node %" SCIP_LONGINT_FORMAT ": detected cutoff\n",
         SCIPnodeGetNumber(SCIPgetCurrentNode(scip)));
   }
   else if( nchgbds > 0 )
   {
      *result = SCIP_REDUCEDDOM;

      SCIPdebugMsg(scip, "node %" SCIP_LONGINT_FORMAT ": %d bound changes (max redcost <%g>)\n",
         SCIPnodeGetNumber(SCIPgetCurrentNode(scip)) , nchgbds, propdata->maxredcost);
   }

   return SCIP_OKAY;
}

/**@} */

/** creates the redcost propagator and includes it in SCIP */
SCIP_RETCODE SCIPincludePropRedcost(
   SCIP*                 scip                /**< SCIP data structure */
   )
{
   SCIP_PROPDATA* propdata;
   SCIP_PROP* prop;

   /* create redcost propagator data */
   SCIP_CALL( SCIPallocBlockMemory(scip, &propdata) );

   /* include propagator */
   SCIP_CALL( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING,
         propExecRedcost, propdata) );

   assert(prop != NULL);

   /* set optional callbacks via setter functions */
   SCIP_CALL( SCIPsetPropCopy(scip, prop, propCopyRedcost) );
   SCIP_CALL( SCIPsetPropInitsol(scip, prop, propInitsolRedcost) );
   SCIP_CALL( SCIPsetPropFree(scip, prop, propFreeRedcost) );

   /* add redcost propagator parameters */
   SCIP_CALL( SCIPaddBoolParam(scip,
         "propagating/" PROP_NAME "/continuous",
         "should reduced cost fixing be also applied to continuous variables?",
         &propdata->continuous, FALSE, DEFAULT_CONTINUOUS, NULL, NULL) );
   SCIP_CALL( SCIPaddBoolParam(scip,
         "propagating/" PROP_NAME "/useimplics",
         "should implications be used to strength the reduced cost for binary variables?",
         &propdata->useimplics, FALSE, DEFAULT_USEIMPLICS, NULL, NULL) );
   SCIP_CALL( SCIPaddBoolParam(scip,
         "propagating/" PROP_NAME "/force",
         "should the propagator be forced even if active pricer are present?",
         &propdata->force, TRUE, DEFAULT_FORCE, NULL, NULL) );

   return SCIP_OKAY;
}


len();
        schema.push(NP_Parsed_Schema::Map {
            val: NP_Value_Kind::Pointer,
            i: NP_TypeKeys::Map,
            sortable: false,
            value: of_addr + 1
        });
        let (_sortable, schema) = NP_Schema::from_bytes(schema, address + 1, bytes);
        (false, schema)
    }
}

#[test]
fn schema_parsing_works_idl() -> Result<(), NP_Error> {
    let schema = r#"map({value: string()})"#;
    let factory = crate::NP_Factory::new(schema)?;
    assert_eq!(schema, factory.schema.to_idl()?);
    let factory2 = crate::NP_Factory::new_bytes(factory.export_schema_bytes())?;
    assert_eq!(schema, factory2.schema.to_idl()?);
    Ok(())
}

#[test]
fn schema_parsing_works() -> Result<(), NP_Error> {
    let schema = r#"{"type":"map","value":{"type":"string"}}"#;
    let factory = crate::NP_Factory::new_json(schema)?;
    assert_eq!(schema, factory.schema.to_json()?.stringify());
    let factory2 = crate::NP_Factory::new_bytes(factory.export_schema_bytes())?;
    assert_eq!(schema, factory2.schema.to_json()?.stringify());
    Ok(())
}

#[test]
fn set_clear_value_and_compaction_works() -> Result<(), NP_Error> {
    let schema = r#"{"type":"map","value":{"type":"string"}}"#;
    let factory = crate::NP_Factory::new_json(schema)?;

    // compaction works
    let mut buffer = factory.new_buffer(None);
    buffer.set(&["name"], "hello, world")?;
    assert_eq!(buffer.get::<&str>(&["name"])?, Some("hello, world"));
    assert_eq!(buffer.calc_bytes()?.after_compaction, buffer.calc_bytes()?.current_buffer);
    assert_eq!(buffer.calc_bytes()?.current_buffer, 29usize);
    buffer.del(&[])?;
    buffer.compact(None)?;
    assert_eq!(buffer.calc_bytes()?.current_buffer, 4usize);

    // values are preserved through compaction
    let mut buffer = factory.new_buffer(None);
    buffer.set(&["name"], "hello, world")?;
    buffer.set(&["name2"], "hello, world2")?;
    assert_eq!(buffer.get::<&str>(&["name"])?, Some("hello, world"));
    assert_eq!(buffer.get::<&str>(&["name2"])?, Some("hello, world2"));
    assert_eq!(buffer.calc_bytes()?.current_buffer, 56usize);
    buffer.compact(None)?;
    assert_eq!(buffer.get::<&str>(&["name"])?, Some("hello, world"));
    assert_eq!(buffer.get::<&str>(&["name2"])?, Some("hello, world2"));
    assert_eq!(buffer.calc_bytes()?.current_buffer, 56usize);

    buffer.set_with_json(&[], r#"{"value": {"foo": "bar", "foo2": "bar2"}}"#)?;
    assert_eq!(buffer.get::<&str>(&["foo"])?, Some("bar"));
    assert_eq!(buffer.get::<&str>(&["foo2"])?, Some("bar2"));

    Ok(())
}use sodiumoxide::crypto::{hash::sha256, sign};
use std::{
    fmt::{self, Debug, Formatter},
    ops::Deref,
};

pub mod error;
pub mod key;
pub mod script_hash;
pub mod sigpair;

pub use self::error::*;
pub use self::key::*;
pub use self::script_hash::*;
pub use self::sigpair::*;

macro_rules! impl_wrapper {
    ($name:ident, $wrapper:


й на горе Хиджал, а затем поговорите с Йорданом Олафсоном."}},
[25619] = {"Повторный захват", nil, {"Убейте 10 квалдирских защитников в Руинах Вайш'ира.\n\nЭто задание из цикла \"Видения воительницы Леди Наз'жар\". Чтобы вернуться к видению, воспользуйтесь в нужном месте клинком воительницы Леди Наз'жар."}},
[25620] = {"Моя прекрасная леди", nil, {"Поговорите с Леди Наз'жар в северной части садов Кель'Дормир.\n\nЭто задание из цикла \"Видения воительницы Леди Наз'жар\". Чтобы вернуться к видению, в нужном месте воспользуйтесь клинком воительницы Леди Наз'жар."}},
[25621] = {"Полевые испытания: ГНМ-передатчик", nil, {"Ступайте в Когтистые горы и идите по Тропе Когтя, пока не наткнетесь на гоблинскую сверлильную машину."}},
[25622] = {"Гори-гори ясно!", nil, {"Добудьте огнемет Песни Войны у кром'гарских поджигателей и с его помощью сожгите 8 схронов Песни Войны."}},
[25626] = {"Видения прошлого: подъем из глубин", nil, {"Воспользуйтесь сломанным клинком Воительницы в храме Кель'Дормир и посмотрите заключительную часть истории."}},
[25627] = {"Убрать Тони Два Клыка", nil, {"Раздобудьте ржавый ключ от клетки."}},
[25628] = {"Убрать Тони Два Клыка", nil, {"Раздобудьте ржавый ключ от клетки."}},
[25629] = {"Указание госпожи", nil, {"Найдите на поле боя 8 отважных стражей Леди Наз'жар, победите их противников и передайте им новые приказы.\n\nЭто задание из цикла \"Видения воительницы Леди Наз'жар\". Чтобы вернуться к видению, в нужном месте воспользуйтесь клинком воительницы Леди Наз'жар."}},
[25630] = {"Хиджал в огне", nil, {"Поговорите с Лайной Ночное Небо возле Рощи Эссины на горе Хиджал."}},
[25637] = {"Зов Повелителя глубин", nil, {"Убейте 16 квалдиров на террасе Нар'шолы.\n\nЭто задание из цикла \"Видения воительницы Леди Наз'жар\". Чтобы вернуться к видению, в нужный момент воспользуйтесь клинком воительницы Леди Наз'жар.


uciente del demosaurio",
[105354] = "Mandiletes de aliento agostador de Montak",
[105355] = "Togas empapadas de ácido de Akolik",
[105356] = "Glóbulo primordial ulceroso",
[105357] = "Sello de los dinománticos",
[105358] = "Diente con marcas de ácido de Thok",
[105359] = "Peto de sangre helada",
[105360] = "Punta de la cola de Thok",
[105361] = "Pica dentada de Britomart",
[105362] = "Sortija de colmillo demoníaco",
[105363] = "Detonador de ébano que hace tic-tac",
[105364] = "Guantes de chisporroteo",
[105365] = "Palanca del aparato megalítico",
[105366] = "Churumbele dismórfico de discontinuidad",
[105367] = "Reloj de pulsera ennegrecido de bombardero",
[105368] = "Brazales de tuberías infinitas",
[105369] = "Botines totémicos manchados de pólvora",
[105370] = "Rompehojas de cálice",
[105371] = "Sello de sangre de Asgorath",
[105372] = "Martillo de forja del asediador",
[105373] = "Cable detonador de Mechanegra",
[105374] = "Arco largo de reserva de Hisek",
[105375] = "Sortija de ascendencia de Kil'ruk",
[105376] = "Media luna carmesí de Korven",
[105377] = "Brazales de proyección sónica",
[105378] = "Escalpelo sangriento de Rik'kal",
[105379] = "Sello hereditario de Iyyokuk",
[105380] = "Sobrevesta de párasito de ámbar",
[105381] = "Coselete de inyecciones tóxicas",
[105382] = "Guanteletes de cálculos descabellados",
[105383] = "Dije empapado de sangre de Skeer",
[105384] = "Hoja furiosa de Kil'ruk",
[105385] = "Aguja de supremacía Kor'kron",
[105386] = "Cordón de sueños oscuros",
[105387] = "Máscara de calavera de élite Kor'kron",
[105388] = "Coselete de tiranía implacable",
[105389] = "Mirada penetrante de Y'Shaarj",
[105390] = "Guardahombros de poder deseado",
[105391] = "Quijotes de conflicto inconsciente",
[105392] = "Bufas del Jefe de Guerra caído",
[105393] = "Colmillos de Mannoroth",
[105394] = "Gran yelmo del Jefe de Guerra",
[105395] = "Xal'atoh, imagen profanada de aullavísceras",
[105396] = "Maldición de soberbia",
[105397] = "Cinturón del pacto roto",
[105398] = "Caperuza de ritual de ébano",
[105399] = "Sangre negra de Y'Shaarj",
[105400] = "Maza con cuernos de los Antiguos",
[105401] = "Revelaciones de Y'Shaarj",
[105402] = "Sello de retorno kármico",
[105403] = "Bufas de brillo de esperanza",
[105404] = "Capucha de los sueños vaporosos",
[105405] = "Peto de pasión decadente",
[105406] = "Manto de oscuridad amenazante",
[105407] =


: bold;}
.cm-s-ipython span.cm-meta {color: #AA22FF;}
.cm-s-ipython span.cm-comment {color: #408080; font-style: italic;}
.cm-s-ipython span.cm-string {color: #BA2121;}
.cm-s-ipython span.cm-error {color: #f00;}
.cm-s-ipython span.cm-builtin {color: #008000;}
.cm-s-ipython span.cm-variable {color: #000000;}

div.CodeMirror { font-family:"Consolas", monospace; }
div.CodeMirror span.CodeMirror-matchingbracket {background-color: #99CCFF; color: inherit; }
div.CodeMirror span.CodeMirror-nonmatchingbracket {background-color: #FFDCDC; color: inherit;}

/* These classes are not currently used in the python.js mode */

/*.cm-s-ipython span.cm-atom {color: #219;}*/
/*.cm-s-ipython span.cm-def {color: #00f;}*/
/*.cm-s-ipython span.cm-variable-2 {color: #05a;}*/
/*.cm-s-ipython span.cm-variable-3 {color: #0a5;}*/
/*.cm-s-ipython span.cm-property {color: black;}*/
/*.cm-s-ipython span.cm-qualifier {color: #555;}*/
/*.cm-s-ipython span.cm-bracket {color: #cc7;}*/
/*.cm-s-ipython span.cm-tag {color: #170;}*/
/*.cm-s-ipython span.cm-attribute {color: #00c;}*/

/* These are the old styles for our pre-themed version */

/*span.py-delimiter {color: #666666;}*/
/*span.py-special {color: #666666;}*/
/*span.py-operator {color: #AA22FF; font-weight: bold;}*/
/*span.py-keyword {color: #008000; font-weight: bold;}*/
/*span.py-number {color: #666666;}*/
/*span.py-identifier {color: #000000;}*/
/*span.py-func {color: #000000;}*/
/*span.py-type {color: #008000;}*/
/*span.py-decorator {color: #AA22FF;}*/
/*span.py-comment {color: #408080; font-style: italic;}*/
/*span.py-string {color: #BA2121;}*/
/*span.py-bytes {color: #BA2121;}*/
/*span.py-raw {color: #BA2121;}*/
/*span.py-unicode {color: #BA2121;}*/

div.CodeMirror-selected { background: #E6E6E6; }
.CodeMirror-focused div.CodeMirror-selected { background: #90cfe4; }.cm-s-cobalt { background: #002240; color: white; }
.cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; }
.cm-s-cobalt .CodeMirror-gutter { background: #002240; border-right: 1px solid #aaa; }
.cm-s-cobalt .CodeMirror-gutter-text { color: #d0d0d0; }
.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; }

.cm-s-cobalt span.cm-comment { color: #08f; }
.cm-s-cobalt span.cm-atom { color: #845dc4; }
.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { colo


 starting with
			// token policies, and add identity policies right after this
			// conditional
			tok, _ := c.DecodeSSCToken(req.InboundSSCToken)
			if resp.Auth.ClientToken == tok {
				resp.Auth.ClientToken = req.InboundSSCToken
			}
			resp.Auth.Policies = policyutil.SanitizePolicies(resp.Auth.TokenPolicies, policyutil.DoNotAddDefaultPolicy)
		} else {
			resp.Auth.TokenPolicies = policyutil.SanitizePolicies(resp.Auth.Policies, policyutil.DoNotAddDefaultPolicy)

			switch resp.Auth.TokenType {
			case logical.TokenTypeBatch:
			case logical.TokenTypeService:
				registeredTokenEntry := &logical.TokenEntry{
					TTL:         auth.TTL,
					Policies:    auth.TokenPolicies,
					Path:        resp.Auth.CreationPath,
					NamespaceID: ns.ID,
				}

				// Only logins apply to role based quotas, so we can omit the role here, as we are not logging in.
				if err := c.expiration.RegisterAuth(ctx, registeredTokenEntry, resp.Auth, "", true /* persist */); err != nil {
					// Best-effort clean up on error, so we log the cleanup error as
					// a warning but still return as internal error.
					if err := c.tokenStore.revokeOrphan(ctx, resp.Auth.ClientToken); err != nil {
						c.logger.Warn("failed to clean up token lease during auth/token/ request", "request_path", req.Path, "error", err)
					}
					c.logger.Error("failed to register token lease during auth/token/ request", "request_path", req.Path, "error", err)
					retErr = multierror.Append(retErr, ErrInternalError)
					return nil, auth, retErr
				}
				if registeredTokenEntry.ExternalID != "" {
					resp.Auth.ClientToken = registeredTokenEntry.ExternalID
				}
			}
		}

		// We do these later since it's not meaningful for backends/expmgr to
		// have what is purely a snapshot of current identity policies, and
		// plugins can be confused if they are checking contents of
		// Auth.Policies instead of Auth.TokenPolicies
		resp.Auth.Policies = policyutil.SanitizePolicies(append(resp.Auth.Policies, identityPolicies[te.NamespaceID]...), policyutil.DoNotAddDefaultPolicy)
		resp.Auth.IdentityPolicies = policyutil.SanitizePolicies(identityPolicies[te.NamespaceID], policyutil.DoNotAddDefaultPolicy)
		delete(identityPolicies, te.NamespaceID)
		resp.Auth.ExternalNamespacePolicies = identityPolicies
	}

	if resp != nil &&
		req.Path == "cubbyhole/response" &&
		len(te.Policies) == 1 &&
		te.Policies[0] == responseWrappingPolicyName {
		resp.AddWarning("Reading from 'cubbyhole/response' is deprecated. Please use sys/wrapping/unwrap to unwrap responses, as it provides additional security checks and other benefits.")
	}

	// Return the response and error
	if routeErr != nil {
		retErr = multierror.Append(retErr, routeErr)
	}

	return resp, auth, retErr
}

// handleLoginRequest is used to handle a login request, which is an
// unauthenticated request to the backend.
func (c *Core) handleLoginRequest(ctx context.Context, req *logical.Request) (retResp *logical.Response, retAuth *logical.Auth, retErr error) {
	defer metrics.MeasureSince([]string{"core", "handle_login_request"}, time.Now())

	req.Unauthenticated = true

	var nonHMACReqDataKeys []string
	entry := c.router.MatchingMountEn


summary>
        [DomName("validationMessage")]
        String ValidationMessage { get; }

        /// <summary>
        /// Checks the validity of the current element.
        /// </summary>
        /// <returns>True if the object is valid, otherwise false.</returns>
        [DomName("checkValidity")]
        Boolean CheckValidity();

        /// <summary>
        /// Sets a custom validation error. If this is not the empty string,
        /// then the element is suffering from a custom validation error.
        /// </summary>
        /// <param name="error">The error message to use.</param>
        [DomName("setCustomValidity")]
        void SetCustomValidity(String error);
    }
}


linx.coroutines.Dispatchers.Main]
     */
    const val DISPATCHER_MAIN = "dispatcher_main"

    /**
     * @see [kotlinx.coroutines.Dispatchers.Unconfined]
     */
    const val DISPATCHER_UNCONFINED = "dispatcher_unconfined"

    const val SENDER = "sender"

    const val OPTIONS_VIDEO_HW_ACCEL = "options_video_hw_accel"

    const val LIB_WEBRTC_INITIALIZATION = "lib_webrtc_initialization"

    const val LOCAL_AUDIO_RECORD_SAMPLES_DISPATCHER = "local_audio_record_samples_dispatcher"
    const val LOCAL_AUDIO_BUFFER_CALLBACK_DISPATCHER = "local_audio_record_samples_dispatcher"

    // Overrides
    const val OVERRIDE_OKHTTP = "override_okhttp"
    const val OVERRIDE_AUDIO_DEVICE_MODULE = "override_audio_device_module"
    const val OVERRIDE_AUDIO_PROCESSOR_OPTIONS = "override_audio_processor_options"
    const val OVERRIDE_JAVA_AUDIO_DEVICE_MODULE_CUSTOMIZER = "override_java_audio_device_module_customizer"
    const val OVERRIDE_VIDEO_ENCODER_FACTORY = "override_video_encoder_factory"
    const val OVERRIDE_VIDEO_DECODER_FACTORY = "override_video_decoder_factory"
    const val OVERRIDE_AUDIO_HANDLER = "override_audio_handler"
    const val OVERRIDE_AUDIO_OUTPUT_TYPE = "override_audio_output_type"
    const val OVERRIDE_DISABLE_COMMUNICATION_WORKAROUND = "override_disable_communication_workaround"
    const val OVERRIDE_EGL_BASE = "override_egl_base"
    const val OVERRIDE_PEER_CONNECTION_FACTORY_OPTIONS = "override_peer_connection_factory_options"
}
/*
 * Copyright 2025 LiveKit, Inc.
 *
 * 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 io.livekit.android.audio

import livekit.org.webrtc.audio.JavaAudioDeviceModule

/**
 * @suppress
 */
interface AudioRecordPrewarmer {
    fun prewarm()
    fun stop()
}

/**
 * @suppress
 */
class NoAudioRecordPrewarmer : AudioRecordPrewarmer {
    override fun prewarm() {
        // nothing to do.
    }

    override fun stop() {
        // nothing to do.
    }
}

/**
 * @suppress
 */
class JavaAudioRecordPrewarmer(private val audioDeviceModule: JavaAudioDeviceModule) : AudioRecordPrewarmer {
    override fun prewarm() {
        audioDeviceModule.prewarmRecording()
    }

    override fun stop() {
        audioDeviceModule.requestStopRecording()
    }
}
/*
 * Copyright 2023-2024 LiveKit, Inc.
 *
 * 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 io.livekit.android.webrtc

import livekit.org.webrtc.EglBase
import livekit.org.webrtc.SoftwareVid


>

A device supporting interrupts has an output pin used for signalling an Interrupt ReQuest. IRQ
pins are connected to a device named Programmable Interrupt Controller (PIC) which is connected
to CPU's INTR pin.

A PIC usually has a set of ports used to exchange information with the CPU. When a device
connected to one of the PIC's IRQ lines needs CPU attention the following flow happens:

device raises an interrupt on the corresponding IRQn pin

PIC converts the IRQ into a vector number and writes it to a port for CPU to read

PIC raises an interrupt on CPU INTR pin

PIC waits for CPU to acknowledge an interrupt before raising another interrupt

CPU acknowledges the interrupt then it starts handling the interrupt

Will see later how the CPU handles the interrupt. Notice that by
design PIC won't raise another interrupt until the CPU acknowledged
the current interrupt.

Note

Once the interrupt is acknowledge by the CPU the interrupt
controller can request another interrupt, regardless if the CPU
finished handled the previous interrupt or not. Thus, depending on
how the OS controlls the CPU it is possible to have nested
interrupts.

The interrupt controller allows each IRQ line to be individually
disabled. This allows simplifying design by making sure that interrupt
handlers are always executed serially.

Interrupt controllers in SMP systems¶

In SMP systems we may have multiple interrupt controllers in the
systems.

For example, on the x86 architecture each core has a local APIC used
to process interrupts from locally connected devices like timers or
thermals sensors. Then there is an I/O APIC is used to distribute IRQ
from external devices to CPU cores.

Interrupt Control¶

In order to synchronize access to shared data between the interrupt handler
and other potential concurrent activities such as driver initialization or
driver data processing, it is often required to enable and disable interrupts in
a controlled fashion.

This can be accomplished at several levels:

at the device level

by programming the device control registers

at the PIC level

PIC can be programmed to disable a given IRQ line

at the CPU level; for example, on x86 one can use the following
instructions:

cli (CLear Interrupt flag)

sti (SeT Interrupt flag)

<div class="


().substringAfter("=")
            when (testDB) {
                in TestDB.ALL_MYSQL_LIKE -> assertTrue(jsonString.startsWith('{') && jsonString.endsWith('}'))
                else -> assertTrue(jsonString.startsWith('[') && jsonString.endsWith(']'))
            }

            // test multiple options only
            if (testDB in TestDB.ALL_POSTGRES) {
                explain(options = "VERBOSE TRUE, COSTS FALSE") { query }.toList()
            }

            // test analyze + options
            val analyze = testDB != TestDB.MYSQL_V5
            val combinedOption = if (testDB == TestDB.MYSQL_V8) "FORMAT=TREE" else formatOption
            explain(analyze, combinedOption) { query }.toList()
        }
    }

    @Test
    fun testExplainWithInvalidStatements() {
        withTables(excludeSettings = explainUnsupportedDb, Countries) {
            debug = true
            statementCount = 0

            // only the last statement will be executed with explain
            explain {
                Countries.deleteAll()
                Countries.selectAll()
            }.toList()

            assertEquals(1, statementCount)
            val executed = statementStats.keys.single()
            assertTrue(executed.startsWith("EXPLAIN ") && "SELECT " in executed && "DELETE " !in executed)

            debug = false
        }
    }
}
package org.jetbrains.exposed.v1.tests.shared.dml

import org.jetbrains.exposed.v1.core.alias
import org.jetbrains.exposed.v1.core.and
import org.jetbrains.exposed.v1.core.eq
import org.jetbrains.exposed.v1.core.greater
import org.jetbrains.exposed.v1.core.inList
import org.jetbrains.exposed.v1.core.plus
import org.jetbrains.exposed.v1.core.stringLiteral
import org.jetbrains.exposed.v1.core.times
import org.jetbrains.exposed.v1.jdbc.mergeFrom
import org.jetbrains.exposed.v1.jdbc.selectAll
import org.jetbrains.exposed.v1.tests.TestDB
import org.jetbrains.exposed.v1.tests.shared.assertEquals
import org.junit.Test
import kotlin.test.assertNotNull
import kotlin.test.assertNull

class MergeSelectTest : MergeBaseTest() {

    private val sourceQuery = Source.selectAll().alias("sub")

    private fun defaultOnCondition() = Dest.key eq sourceQuery[Source.key]

    @Test
    fun testInsert() {
        withMergeTestTablesAndDefaultData { dest, source ->
            dest.mergeFrom(
                sourceQuery,
                on = { defaultOnCondition() },
            ) {
                whenNotMatchedInsert {
                    it[dest.key] = sourceQuery[source.key]
                    it[dest.value] = sourceQuery[source.value] * 2
                    it[dest.optional] = stringLiteral("optional::") + sourceQuery[source.key]
                }
            }

            val destRow = dest.getByKey("only-in-source-1")
            assertEquals(2, destRow[dest.value])
            assertEquals("optional::only-in-source-1", destRow[dest.optional])
            assertEquals(TEST_DEFAULT_DATE_TIME, destRow[dest.at])
        }
    }

    @Test
    fun testInsertByAlias() {
        withMergeTestTablesAndDefaultData { dest, source ->
            val destAlias = dest.alias("dest_alias")

            destAlias.mergeFrom(
                sourceQuery,
                on = { sourceQuery[source.key] eq destAlias[dest.key] },
            ) {
                whenNotMatchedInsert {
                    it[dest.key] = sourceQuery[source.key]
                    it[dest.value] = sourceQuery[source.value] * 2
                }
            }

            val destRow = dest.getByKey("only-in-source-1")
            assertEq


s */
        url('../../../public/fonts/rubik-v14-latin-600italic.ttf') format('truetype'),
        /* Safari, Android, iOS */
        url('../../../public/fonts/rubik-v14-latin-600italic.svg#Rubik') format('svg');
    /* Legacy iOS */
}

/* rubik-700italic - latin */
@font-face {
    font-family: 'Rubik';
    font-style: italic;
    font-weight: 700;
    src: url('../../../public/fonts/rubik-v14-latin-700italic.eot');
    /* IE9 Compat Modes */
    src: local(''),
        url('../../../public/fonts/rubik-v14-latin-700italic.eot?#iefix') format('embedded-opentype'),
        /* IE6-IE8 */
        url('../../../public/fonts/rubik-v14-latin-700italic.woff2') format('woff2'),
        /* Super Modern Browsers */
        url('../../../public/fonts/rubik-v14-latin-700italic.woff') format('woff'),
        /* Modern Browsers */
        url('../../../public/fonts/rubik-v14-latin-700italic.ttf') format('truetype'),
        /* Safari, Android, iOS */
        url('../../../public/fonts/rubik-v14-latin-700italic.svg#Rubik') format('svg');
    /* Legacy iOS */
}

/* rubik-800italic - latin */
@font-face {
    font-family: 'Rubik';
    font-style: italic;
    font-weight: 800;
    src: url('../../../public/fonts/rubik-v14-latin-800italic.eot');
    /* IE9 Compat Modes */
    src: local(''),
        url('../../../public/fonts/rubik-v14-latin-800italic.eot?#iefix') format('embedded-opentype'),
        /* IE6-IE8 */
        url('../../../public/fonts/rubik-v14-latin-800italic.woff2') format('woff2'),
        /* Super Modern Browsers */
        url('../../../public/fonts/rubik-v14-latin-800italic.woff') format('woff'),
        /* Modern Browsers */
        url('../../../public/fonts/rubik-v14-latin-800italic.ttf') format('truetype'),
        /* Safari, Android, iOS */
        url('../../../public/fonts/rubik-v14-latin-800italic.svg#Rubik') format('svg');
    /* Legacy iOS */
}

/* rubik-900italic - latin */
@font-face {
    font-family: 'Rubik';
    font-style: italic;
    font-weight: 900;
    src: url('../../../public/fonts/rubik-v14-latin-900italic.eot');
    /* IE9 Compat Modes */
    src: local(''),
        url('../../../public/fonts/rubik-v14-latin-900italic.eot?#iefix') format('embedded-opentype'),
        /* IE6-IE8 */
        url('../../../public/fonts/rubik-v14-latin-900italic.woff2') format('woff2'),
        /* Super Modern Browsers */
        url('../../../public/fonts/rubik-v14-latin-900italic.woff') format('woff'),
        /* Modern Browsers */
        url('../../../public/fonts/rubik-v14-latin-900italic.ttf') format('truetype'),
        /* Safari, Android, iOS */
        url('../../../public/fonts/rubik-v14-latin-900italic.svg#Rubik') format('svg');
    /* Legacy iOS */
}@layer components {
  .drawer {
    @apply invisible


d científica.$B$BAyúdame, $N, y te regalaré una muestra del polvo.$B$BPara crear una muestra estable, voy a necesitar 3 pinzas de scorpok, 2 mollejas de buitre y 1 pulmón de jabalí maldito.",
    ["O"] = "Llévale 3 pinzas de scorpok, 2 mollejas de buitre y 1 pulmón de jabalí maldito al mago sangriento Drazial.",
    ["T"] = "El golpe decisivo",
  },
  [2586] = {
    ["D"] = "¡Estás $gvivo:viva;! Esto sí que es una buena noticia. Supongo que has vuelto a por más polvo de scorpok, ¿no?$B$BMuy bien, $n, vuelve al páramo y no regreses hasta que hayas recolectado 3 pinzas de scorpok, 2 mollejas de buitre y 1 pulmón de jabalí maldito.",
    ["O"] = "Llévale 3 pinzas de scorpok, 2 mollejas de buitre y 1 pulmón de jabalí maldito al mago sangriento Drazial.",
    ["T"] = "La sal del Scorpok",
  },
  [2601] = {
    ["D"] = "Estos páramos están plagados de basiliscos Rocarroja, $n. Estos basiliscos se han adaptado y se han multiplicado más que cualquier otra especie de la región.$B$BLos he observado a cierta distancia cuando cazan y en sus actividades cotidianas; esas bestias muestran un comportamiento reflexivo más complejo incluso que el de ciertos humanoides.$B$B¡Debo estudiar sus cerebros!$B$BConsígueme 10 cerebros, $n. Aunque el preparado no estará completo si no tengo además 2 mollejas de buitre para crear la base de la solución.",
    ["O"] = "Llévale 10 cerebros de basilisco y 2 mollejas de buitre al mago sangriento Lynnore.",
    ["T"] = "El bocado de basilisco",
  },
  [2602] = {
    ["D"] = "¿Ya has perdido la concentración? ¡Debo seguir investigando!$B$BAh, sí, el precio sigue siendo el mismo, $N. Adéntrate en Las Tierras Devastadas y tráeme 10 cerebros de basilisco Rocarroja y 2 mollejas de buitre.",
    ["O"] = "Llévale 10 cerebros de basilisco y 2 mollejas de buitre al mago sangriento Lynnore.",
    ["T"] = "La mente infalible",
  },
  [2603] = {
    ["D"] = "La muerte tiene alas en estas tierras malditas, $r. Yo he visto a esos negros asesinos y carroñeros dándose festines con los cadáveres de muchos exploradores... alimentándose incluso de los cadáveres más viles y enfermos. Es un milagro que sus organismos hayan sobrevivido a la pestilencia que reclama estas tierras.$B$B¡Ayúdame con mis estudios, $N! ¡Necesito mollejas! También necesitaré dos papadas de hiena para el brebaje.$B$BSerás doblemente recompensado por tus esfuerzos.",
    ["O"] = "Llévale 10 mollejas de buitre y 2 papadas de hiena risita al mago sangriento Lynnore.",
    ["T"] = "El vigor del buitre",
  },
  [2604] = {
    ["D"] = "Veo que el fuego interno ha menguado. ¿Dirías que la euforia espiritual ha durado una hora?$B$BSi más resina de mollejas quieres, más mollejas neces


oolLite on construction and
 * destroys it on destruction.
 *
 * A ScopedMemoryPoolLite can be used anywhere a MemoryPoolLite can be.
 **/
class ScopedMemoryPoolLite :
    boost::noncopyable
{
public:
    /**
     * Constructs memory pool.
     *
     * @throw ealloc on failure.
     **/
    ScopedMemoryPoolLite();
    /**
     * Destroy associated pool.
     **/
    ~ScopedMemoryPoolLite();

    //! Implicit conversion to MemoryPoolLite.
    // Intentionally inlined.
    operator MemoryPoolLite() const
    {
        return m_pool;
    }

private:
    MemoryPoolLite m_pool;
};

//! Ostream output for MemoryPool.
std::ostream& operator<<(std::ostream& o, const ConstMemoryPoolLite& pool);

// Template Definition
template <typename T>
T* MemoryPoolLite::allocate(size_t number) const
{
    return static_cast<T*>(alloc(number * sizeof(T)));
}

};

#endif
/*****************************************************************************
 * Licensed to Qualys, Inc. (QUALYS) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * QUALYS licenses this file to You 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.
 ****************************************************************************/

/**
 * @file
 * @brief IronBee++ --- ParsedRequestLine
 *
 * This file defines (Const)ParsedRequestLine, a wrapper for
 * ib_parsed_req_line_t.
 *
 * @remark Developers should be familiar with @ref ironbeepp to understand
 * aspects of this code, e.g., the public/non-virtual inheritance.
 *
 * @author Christopher Alfeld <calfeld@qualys.com>
 */

#ifndef __IBPP__PARSED_REQUEST_LINE__
#define __IBPP__PARSED_REQUEST_LINE__

#include <ironbeepp/abi_compatibility.hpp>
#include <ironbeepp/common_semantics.hpp>

#include <ostream>

// IronBee C Type
typedef struct ib_parsed_req_line_t ib_parsed_req_line_t;

namespace IronBee {

class MemoryManager;
class ByteString;

/**
 * Const ParsedRequestLine; equivalent to a const pointer to
 * ib_parsed_req_line_t.
 *
 * Provides operators ==, !=, <, >, <=, >= and evaluation as a boolean for
 * singularity via CommonSemantics.
 *
 * See ParsedRequestLine for discussion of Parsed RequestLine
 *
 * @sa ParsedRequestLine
 * @sa ironbeepp
 * @sa ib_parsed_req_line_t
 * @nosubgrouping
 **/
class ConstParsedRequestLine :
    public CommonSemantics<ConstParsedRequestLine>
{
public:
    //! C Type.
    typedef const ib_parsed_req_line_t* ib_type;

    /**
     * Construct singular ConstParsedRequestLine.
     *
     * All behavior of a singular ConstParsedRequestLine is undefined except
     * for assignment, copying, comparison, and evaluate-as-bool.
     **/
    ConstParsedRequestLine();

    /**
     * @name C Interoperability
     * Methods to access underlying C types.
     **/
    ///@{

    //! const ib_parsed_req_line_t accessor.
    // Intentionally inlined.
    ib_


.online.awayOrSnooze
  .nOdcT-MoOaXGePXLyPe0H,
.GamepadMode
  .favoriteElement.gpfocus
  .labelHolder.online.awayOrSnooze
  ._2Ri005Wg_uXDTa71kdRbcN {
  color: #4cb4ff;
  text-shadow: 1px 1px 0 #0e141b;
}
.friend.gpfocus
  .labelHolder.GamepadMode.ingame.awayOrSnooze
  .nOdcT-MoOaXGePXLyPe0H,
.friend.gpfocus .labelHolder.GamepadMode.ingame ._2Ri005Wg_uXDTa71kdRbcN,
.GamepadMode
  .friend.gpfocus
  .labelHolder.ingame.awayOrSnooze
  .nOdcT-MoOaXGePXLyPe0H,
.GamepadMode .friend.gpfocus .labelHolder.ingame ._2Ri005Wg_uXDTa71kdRbcN,
.favoriteElement.gpfocus
  .labelHolder.GamepadMode.ingame.awayOrSnooze
  .nOdcT-MoOaXGePXLyPe0H,
.favoriteElement.gpfocus
  .labelHolder.GamepadMode.ingame
  ._2Ri005Wg_uXDTa71kdRbcN,
.GamepadMode
  .favoriteElement.gpfocus
  .labelHolder.ingame.awayOrSnooze
  .nOdcT-MoOaXGePXLyPe0H,
.GamepadMode
  .favoriteElement.gpfocus
  .labelHolder.ingame
  ._2Ri005Wg_uXDTa71kdRbcN {
  color: #59bf40;
  text-shadow: 1px 1px 0 #0e141b;
}
.awayOrSnooze .nOdcT-MoOaXGePXLyPe0H.GamepadMode,
.GamepadMode .awayOrSnooze .nOdcT-MoOaXGePXLyPe0H {
  color: #59bf40;
}
.watchingbroadcast .nOdcT-MoOaXGePXLyPe0H {
  color: #c9bdf7;
}
.watchingbroadcast ._2Ri005Wg_uXDTa71kdRbcN,
.watchingbroadcast ._1cB0qtF0paHWWyj1XNcnbG._2Ri005Wg_uXDTa71kdRbcN a,
.watchingbroadcast ._1cB0qtF0paHWWyj1XNcnbG._2Ri005Wg_uXDTa71kdRbcN a:hover,
.watchingbroadcast ._1cB0qtF0paHWWyj1XNcnbG._2Ri005Wg_uXDTa71kdRbcN a:active,
.watchingbroadcast ._1cB0qtF0paHWWyj1XNcnbG._2Ri005Wg_uXDTa71kdRbcN a:visited {
  color: #8277b1;
}
.awayOrSnooze.online .nOdcT-MoOaXGePXLyPe0H.GamepadMode,
.GamepadMode .awayOrSnooze.online .nOdcT-MoOaXGePXLyPe0H {
  color: #4cb4ff;
}
.awayOrSnooze.online ._2Ri005Wg_uXDTa71kdRbcN.GamepadMode,


 THE
 * POSSIBILITY OF SUCH DAMAGE.
 ******************************************************************************/

part of box2d;

class ChainAndCircleContact extends Contact {
  ChainAndCircleContact(IWorldPool argPool) : super(argPool);

  void init(Fixture fA, int indexA, Fixture fB, int indexB) {
    super.init(fA, indexA, fB, indexB);
    assert(_fixtureA.getType() == ShapeType.CHAIN);
    assert(_fixtureB.getType() == ShapeType.CIRCLE);
  }

  final EdgeShape _edge = new EdgeShape();

  void evaluate(Manifold manifold, Transform xfA, Transform xfB) {
    final chain = _fixtureA.getShape() as ChainShape;
    chain.getChildEdge(_edge, _indexA);
    _pool.getCollision().collideEdgeAndCircle(
        manifold, _edge, xfA, _fixtureB.getShape() as CircleShape, xfB);
  }
}
/*******************************************************************************
 * Copyright (c) 2015, Daniel Murphy, Google
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *  * Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *  * 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.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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.
 ******************************************************************************/
part of box2d;

/**
 * The class manages contact between two shapes. A contact exists for each overlapping AABB in the
 * broad-phase (except if filtered). Therefore a contact object may exist that has no contact
 * points.
 *
 */
abstract class Contact {
  // Flags stored in _flags
  // Used when crawling contact graph when forming islands.
  static final int ISLAND_FLAG = 0x0001;
  // Set when the shapes are touching.
  static final int TOUCHING_FLAG = 0x0002;
  // This contact can be disabled (by user)
  static final int ENABLED_FLAG = 0x0004;
  // This contact needs filtering because a fixture filter was changed.
  static final int FILTER_FLAG = 0x0008;
  // This bullet contact had a TOI event
  static final int BULLET_HIT_FLAG = 0x0010;

  static final int TOI_FLAG = 0x0020;

  int _flags = 0;

  // World pool and list pointers.
  Contact _prev;
  Contact _next;

  // Nodes for connecting bodies.
  ContactEdge _nodeA = new ContactEdge();
  ContactEdge _nodeB = new ContactEdge();

  Fixture _fixtureA;
  Fix


hrase(sfx, lastSfx, SFX_HOSPITAL_MALE_VOICE_1_GUN_PANIC_1, 4);
		break;
	case SOUND_PED_ATTACK:
		GetPhrase(sfx, lastSfx, SFX_HOSPITAL_MALE_VOICE_1_FIGHT_1, 4);
		break;
	case SOUND_PED_EVADE:
		GetPhrase(sfx, lastSfx, SFX_HOSPITAL_MALE_VOICE_1_DODGE_1, 4);
		break;
	case SOUND_PED_ANNOYED_DRIVER:
		GetPhrase(sfx, lastSfx, SFX_HOSPITAL_MALE_VOICE_1_DRIVER_ABUSE_1, 5);
		break;
	case SOUND_PED_CHAT:
		GetPhrase(sfx, lastSfx, SFX_HOSPITAL_MALE_VOICE_1_CHAT_1, 5);
		break;
	default:
		return GetGenericMaleTalkSfx(sound);
	}
	return sfx;
}

uint32
cAudioManager::GetHospitalFemaleTalkSfx(int16 sound)
{
	uint32 sfx;
	static uint32 lastSfx = NO_SAMPLE;

	switch (sound) {
	case SOUND_PED_EVADE:
		GetPhrase(sfx, lastSfx, SFX_HOSPITAL_FEMALE_VOICE_1_DODGE_1, 5);
		break;
	case SOUND_PED_ANNOYED_DRIVER:
		GetPhrase(sfx, lastSfx, SFX_HOSPITAL_FEMALE_VOICE_1_DRIVER_ABUSE_1, 6);
		break;
	case SOUND_PED_CHAT:
		GetPhrase(sfx, lastSfx, SFX_HOSPITAL_FEMALE_VOICE_1_CHAT_1, 6);
		break;
	default:
		return GetGenericFemaleTalkSfx(sound);
	}
	return sfx;
}

uint32
cAudioManager::GetWhiteConstructionWorkerTalkSfx(int16 sound)
{
	uint32 sfx;
	static uint32 lastSfx = NO_SAMPLE;

	switch (sound) {
	case SOUND_PED_HANDS_COWER:
		GetPhrase(sfx, lastSfx, SFX_WHITE_MALE_CONSTRUCTION_VOICE_1_GUN_PANIC_1, 3);
		break;
	case SOUND_PED_CAR_JACKED:
		sfx = SFX_WHITE_MALE_CONSTRUCTION_VOICE_1_CARJACKED_1;
		break;
	case SOUND_PED_ATTACK:
		GetPhrase(sfx, lastSfx, SFX_WHITE_MALE_CONSTRUCTION_VOICE_1_FIGHT_1, 5);
		break;
	case SOUND_PED_EVADE:
		GetPhrase(sfx, lastSfx, SFX_WHITE_MALE_CONSTRUCTION_VOICE_1_DODGE_1, 5);
		break;
	case SOUND_PED_ANNOYED_DRIVER:
		GetPhrase(sfx, lastSfx, SFX_WHITE_MALE_CONSTRUCTION_VOICE_1_DRIVER_ABUSE_1, 4);
		break;
	case SOUND_PED_CHAT_SEXY:
		GetPhrase(sfx, lastSfx, SFX_WHITE_MALE_CONSTRUCTION_VOICE_1_EYING_1, 3);
		break;
	case SOUND_PED_CHAT:
		GetPhrase(sfx, lastSfx, SFX_WHITE_MALE_CONSTRUCTION_VOICE_1_CHAT_1, 7);
		break;
	default:
		return GetGenericMaleTalkSfx(sound);
	}
	return sfx;
}

uint32
cAudioManager::


RZ3OutroK->sfxWarp, false, 255);
    }

    if (host->timer == 60) {
        foreach_active(Player, player) { RSDK.SetSpriteAnimation(player->aniFrames, ANI_SPRING_TWIRL, &player->animator, false, 3); }
    }

    int32 x = teleporter->position.x;
    int32 y = teleporter->position.y - 0x740000;

    if (host->timer >= 30) {
        int32 angle = 255 * (host->timer - 30) / 60;

        foreach_active(Player, player)
        {
            if (angle <= 0) {
                player->position.x = self->playerPos[player->playerID].x;
                player->position.y = self->playerPos[player->playerID].y;
            }
            else {
                if (angle < 0x100) {
                    player->position.x = self->playerPos[player->playerID].x;
                    player->position.y = self->playerPos[player->playerID].y;
                    player->position.x += ((RSDK.Sin512(angle + 0x180) >> 2) + 0x80) * ((x - self->playerPos[player->playerID].x) >> 8);
                    player->position.y += ((RSDK.Sin512(angle + 0x180) >> 2) + 0x80) * ((y - self->playerPos[player->playerID].y) >> 8);
                }
                else {
                    player->position.x = x;
                    player->position.y = y;
                }
            }

            player->position.x &= 0xFFFF0000;
            player->position.y &= 0xFFFF0000;
        }

        if (teleporter->timer < 64)
            teleporter->timer += 2;
    }

    if (host->timer == 90) {
        foreach_active(Player, player)
        {
            player->position.x = x;
            player->position.y = y;
        }

        return true;
    }

    return false;
}

bool32 LRZ3OutroK_Cutscene_TeleporterActivated(EntityCutsceneSeq *host)
{
    if (host->timer >= 60) {
        if (host->timer == 60)
            RSDK.PlaySfx(LRZ3OutroK->sfxWarp, false, 255);

        if (LRZ3OutroK->fxRuby->fadeWhite >= 512) {
            if (LRZ3OutroK->fxRuby->fadeBlack < 512)
                LRZ3OutroK->fxRuby->fadeBlack += 16;
        }
        else {
            LRZ3OutroK->fxRuby->fadeWhite += 16;
        }

        if (host->timer == 180) {
            RSDK.LoadScene();
            return true;
        }
    }

    return false;
}

#if GAME_INCLUDE_EDITOR
void LRZ3OutroK_EditorDraw(void)
{
    RSDK_THIS(LRZ3OutroK);

    CutsceneRules_DrawCutsceneBounds(self, &self->size);
}

void LRZ3OutroK_EditorLoad(void) {}
#endif

void LRZ3OutroK_Serialize(void) { RSDK_EDITABLE_VAR(LRZ3OutroK, VAR_VECTOR2, size); }


erwritten below, we will have to push it
    # on the stack and pop it back.
    VLD1.32 {d22[], d23[]}, [r12]

    VSTR d22, [sp, #-16]
    VSTR d23, [sp, #-24]

    .p2align 3
0:
    # Load input stride
    # - r3 = input_stride
    LDR r3, [sp, 104]

    # Load c:
    # - r0 = c = channels
    LDR r0, [sp, #-8]

    # Load i0, i1, i2, i3, i4, i5, i6, i7, i8
    # - r4 = i0
    # - r5 = i1
    # - r6 = i2
    # - r7 = i3
    # - r8 = i4
    # - r9 = i5
    # - r10 = i6
    # - r11 = i7
    # - r12 = i8
    LDM r2, {r4, r5, r6, r7, r8, r9, r10, r11, r12}

    # Pre-decrement c
    SUBS r0, r0, 8

    # Increment input by input stride
    # - input = r2 := input + input_stride
    ADD r2, r2, r3

    # Load w:
    # - r3 = w = weights
    LDR r3, [sp, #-4]

    BLO 2f

    .p2align 4
1:
    VLDM r3!, {d0-d3}

    VLD1.8 {d4}, [r4]!
    VLD1.8 {d6}, [r3]!

    VLD1.8 {d8}, [r5]!
    VLD1.8 {d10}, [r3]!

    SUB_ZERO_POINT q2, d4, d30
    VSUBL.U8 q3, d6, d31

    VLD1.8 {d12}, [r6]!
    VLD1.8 {d14}, [r3]!

    SUB_ZERO_POINT q4, d8, d30
    VSUBL.U8 q5, d10, d31

    VMLAL.S16 q0, d4, d6
    VMLAL.S16 q1, d5, d7

    VLD1.8 {d4}, [r7]!
    VLD1.8 {d6}, [r3]!

    SUB_ZERO_POINT q6, d12, d30
    VSUBL.U8 q7, d14, d31

    VMLAL.S16 q0, d8, d10
    VMLAL.S16 q1, d9, d11

    VLD1.8 {d8}, [r8]!
    VLD1.8 {d10}, [r3]!

    SUB_ZERO_POINT q2, d4, d30
    VSUBL.U8 q3, d6, d31

    VMLAL.S16 q0, d12, d14
    VMLAL.S16 q1, d13, d15

    VLD1.8 {d12}, [r9]!
    VLD1.8 {d14}, [r3]!

    SUB_ZERO_POINT q4, d8, d30
    VSUBL.U8 q5, d10, d31

    VMLAL.S16 q0, d4, d6
    VMLAL.S16 q1, d5, d7

    VLD1.8 {d4}, [r10]!
    VLD1.8 {d6}, [r3]!

    SUB_ZERO_POINT q6, d12, d30
    VSUBL.U8 q7, d14, d31

    VMLAL.S16 q0, d8, d10
    VMLAL.S16 q1, d9, d11

    VLD1.8 {d8}, [r11]!
    VLD1.8 {d10}, [r3]!

    SUB_ZERO_POINT q2, d4, d30
    VSUBL.U8 q3, d6, d31

    VMLAL.S16 q0, d12, d14
    VMLAL.S16 q1, d13, d15

    VLD1.8 {d12}, [r12]!
    VLD1.8 {d14}, [r3]!

    SUB_ZERO_POINT q4, d8, d30
    VSUBL.U8 q5, d10, d31

    VMLAL.S16 q0, d4, d6
    VMLAL.S16 q1, d5, d7

    SUB_ZERO_POINT q6,


(),
      )
    }

    val response = SchemaReflector(schema, includeDependencies = true)
      .process(ServerReflectionRequest(file_containing_symbol = ".A"))
    assertThat(
      response.file_descriptor_response!!.file_descriptor_proto.map {
        DescriptorProtos.FileDescriptorProto.parseFrom(it.toByteArray())
      }.map { it.name },
    ).containsExactly("a.proto", "b.proto", "c.proto")
  }

  @Test
  fun `transitive dependencies included ordered`() {
    val schema = buildSchema {
      add(
        "a.proto".toPath(),
        """
        |import "b.proto";
        |import "c.proto";
        |message A {
        |  optional B b = 1;
        |  optional C c = 2;
        |}
        |
        """.trimMargin(),
      )
      add(
        "b.proto".toPath(),
        """
        |import "c.proto";
        |message B {
        |  optional C c = 1;
        | }
        |
        """.trimMargin(),
      )
      add(
        "c.proto".toPath(),
        """
        |message C { }
        |
        """.trimMargin(),
      )
    }

    val response = SchemaReflector(schema, includeDependencies = true)
      .process(ServerReflectionRequest(file_containing_symbol = ".A"))
    assertThat(
      response.file_descriptor_response!!.file_descriptor_proto.map {
        DescriptorProtos.FileDescriptorProto.parseFrom(it.toByteArray())
      }.map { it.name },
    ).containsExactly("a.proto", "b.proto", "c.proto")
  }

  @Test
  fun `transitive dependencies with public import`() {
    val schema = buildSchema {
      add(
        "a.proto".toPath(),
        """
        |import "b.proto";
        |message A {
        |  optional B b = 1;
        |}
        |
        """.trimMargin(),
      )
      add(
        "b.proto".toPath(),
        """
        |import public "b-new.proto";
        |
        """.trimMargin(),
      )
      add(
        "b-new.proto".toPath(),
        """
        |import "c.proto";
        |message B {
        |  optional C c = 1;
        | }
        |
        """.trimMargin(),
      )
      add(
        "c.proto".toPath(),
        """
        |message C { }
        |
        """.trimMargin(),
      )
    }

    val response = SchemaReflector(schema, includeDependencies = true)
      .process(ServerReflectionRequest(file_containing_symbol = ".A"))
    assertThat(
      response.file_descriptor_response!!.file_descriptor_proto.map {
        DescriptorProtos.FileDescriptorProto.parseFrom(it.toByteArray())
      }.map { it.name },
    ).containsExactly("a.proto", "b.proto", "b-new.proto", "c.proto")
  }
}
/*
 * Copyright (C) 2013 Square, Inc.
 *
 * 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
 *
 *      https://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.
 */
@file:Suppress("UsePropertyAccessSyntax")

package com.squareup.wire

import assertk.assertThat
import assertk.assertions.contains
import assertk.assertions.containsExactly
import assertk.assertions.isEqualTo
import assertk.assertions.isNotEmpty
import assertk.assertions.size
import com.square


/*
 *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_INCLUDE_AUDIO_ENCODER_CNG_H_
#define WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_INCLUDE_AUDIO_ENCODER_CNG_H_

#include <vector>

#include "webrtc/base/scoped_ptr.h"
#include "webrtc/common_audio/vad/include/vad.h"
#include "webrtc/modules/audio_coding/codecs/audio_encoder.h"
#include "webrtc/modules/audio_coding/codecs/cng/include/webrtc_cng.h"

namespace webrtc {

class Vad;

class AudioEncoderCng final : public AudioEncoder {
 public:
  struct Config {
    Config();
    bool IsOk() const;

    int num_channels;
    int payload_type;
    // Caller keeps ownership of the AudioEncoder object.
    AudioEncoder* speech_encoder;
    Vad::Aggressiveness vad_mode;
    int sid_frame_interval_ms;
    int num_cng_coefficients;
    // The Vad pointer is mainly for testing. If a NULL pointer is passed, the
    // AudioEncoderCng creates (and destroys) a Vad object internally. If an
    // object is passed, the AudioEncoderCng assumes ownership of the Vad
    // object.
    Vad* vad;
  };

  explicit AudioEncoderCng(const Config& config);

  ~AudioEncoderCng() override;

  int SampleRateHz() const override;
  int NumChannels() const override;
  size_t MaxEncodedBytes() const override;
  int RtpTimestampRateHz() const override;
  size_t Num10MsFramesInNextPacket() const override;
  size_t Max10MsFramesInAPacket() const override;
  int GetTargetBitrate() const override;
  void SetTargetBitrate(int bits_per_second) override;
  void SetProjectedPacketLossRate(double fraction) override;
  EncodedInfo EncodeInternal(uint32_t rtp_timestamp,
                             const int16_t* audio,
                             size_t max_encoded_bytes,
                             uint8_t* encoded) override;

 private:
  // Deleter for use with scoped_ptr. E.g., use as
  //   rtc::scoped_ptr<CNG_enc_inst, CngInstDeleter> cng_inst_;
  struct CngInstDeleter {
    inline void operator()(CNG_enc_inst* ptr) const { WebRtcCng_FreeEnc(ptr); }
  };

  EncodedInfo EncodePassive(size_t frames_to_encode,
                            size_t max_encoded_bytes,
                            uint8_t* encoded);
  EncodedInfo EncodeActive(size_t frames_to_encode,
                           size_t max_encoded_bytes,
                           uint8_t* encoded);
  size_t SamplesPer10msFrame() const;

  AudioEncoder* speech_encoder_;
  const int cng_payload_type_;
  const int num_cng_coefficients_;
  std::vector<int16_t> speech_buffer_;
  std::vector<uint32_t> rtp_timestamps_;
  bool last_frame_active_;
  rtc::scoped_ptr<Vad> vad_;
  rtc::scoped_ptr<CNG_enc_inst, CngInstDeleter> cng_inst_;
};

}  // namespace webrtc
#endif  // WEBRTC_MODULES_AUDIO_CODING_CODECS_CNG_INCLUDE_AUDIO_ENCODER_CNG_H_