.<anonymous> (LazySaveableStateHolder.kt:48)	9ms 244us 924ns	1
Choreographer#doFrame 11096706	9ms 219us 77ns	1
androidx.compose.material.Scaffold.<anonymous> (Scaffold.kt:178)	9ms 210us 770ns	1
Choreographer#scheduleVsyncLocked	9ms 87us 850ns	59
androidx.compose.ui.layout.SubcomposeLayout (SubcomposeLayout.kt:254)	8ms 968us 77ns	2
Choreographer#doFrame 11096740	8ms 954us 847ns	1
com.coldstar.compass_sample.ComposableSingletons.AppUIKt.lambda-1.<anonymous> (AppUI.kt:50)	8ms 936us 616ns	1
androidx.compose.material.TopAppBar.<anonymous> (AppBar.kt:92)	8ms 929us 462ns	1
Choreographer#doFrame 11096746	8ms 572us 924ns	1
Choreographer#doFrame 11096750	8ms 517us 231ns	1
androidx.compose.ui.layout.SubcomposeLayout (SubcomposeLayout.kt:310)	8ms 481us 539ns	2
Choreographer#doFrame 11096742	8ms 478us 154ns	1
MSG_INSETS_CONTROL_CHANGED	8ms 354us 693ns	2
com.coldstar.compass_sample.SplashPageUI (SplashUI.kt:14)	8ms 317us 462ns	1
Choreographer#doFrame 11096734	8ms 292us 924ns	1
androidx.compose.foundation.lazy.layout.LazyLayout.<anonymous> (LazyLayout.kt:60)	8ms 246us 232ns	1
androidx.compose.animation.core.createChildTransitionInternal (Transition.kt:794)	8ms 170us 691ns	10
com.coldstar.compass_sample.SampleSelectorUi.<anonymous>.<anonymous>.<anonymous>.<anonymous> (SampleSelectorUi.kt:110)	8ms 143us 309ns	1
Choreographer#doFrame 11096732	8ms 97us 616ns	1
Choreographer#doFrame 11096744	7ms 930us 693ns	1
androidx.compose.runtime.DisposableEffect (Effects.kt:151)	7ms 868us 766ns	110
Choreographer#doFrame 11096718	7ms 585us 847ns	1
Choreographer#doFrame 11096748	7ms 523us 385ns	1
Choreographer#doFrame 11096756	7ms 505us 924ns	1
androidx.compose.animation.core.Transition.animateTo (Transition.kt:425)	7ms 485us 924ns	8
Choreographer#doFrame 11096736	7ms 397us 462ns	1
Choreographer#doFrame 11096673	7ms 343us 693ns	1
Choreographer#doFrame 11096738	7ms 329us 154ns	1
Choreographer#doFrame 11096714	7ms 311us 78ns	1
com.coldstar.compass_sample.SampleSelectorUi.<anonymous>.<anonymous>.<anonymous>.<anonymous> (SampleSelectorUi.kt:62)	7ms 218us 462ns	1
Choreographer#doFrame 11096712	7ms 197us 1ns	1
Choreographer#doFrame 11096726	6ms 871us 77ns	1
Choreographer#doFrame 11096720	6ms 862us 693ns	1
Choreographer#doFrame 11096716	6ms 785us 923ns	1
Choreographer#doFrame 11096661	6ms 783us 155ns	1
Choreographer#doFrame 11096730	6ms 781us 1ns	1
androidx.compose.animation.AnimatedEnterExitImpl.<anonymous> (AnimatedVisibility.kt:739)	6ms 668us 846ns	20
Choreographer#doFrame 11096722	6ms 667us 693ns	1
Choreographer#doFrame 11096752	6ms 650us 770ns	1
Choreographer#doFrame 11096728	6ms 615us 1ns


�적인 보호",
[96927] = "영혼 방벽",
[96928] = "사방의 바지",
[96929] = "무력해진 장로의 장갑",
[96930] = "레이 션의 흔들림 없는 시선",
[96931] = "토랄 - 부서진 왕좌의 방망이",
[96932] = "레이 션의 영혼 프리즘",
[96933] = "번개 깃든 성배",
[96934] = "레이 션의 지휘의 보주",
[96935] = "저미는 전기의 손장갑",
[96936] = "맹렬한 강풍의 다리보호구",
[96937] = "레이 션의 접지 껍질갑옷",
[96938] = "번개에 휩싸인 제압자 가슴보호대",
[96939] = "번개에 휩싸인 정복자 가슴보호대",
[96940] = "번개에 휩싸인 수호자 가슴보호대",
[96971] = "번개에 휩싸인 제압자 건틀릿",
[96972] = "번개에 휩싸인 정복자 건틀릿",
[96973] = "번개에 휩싸인 수호자 건틀릿",
[96974] = "새벽의 기원",
[96975] = "미라코란 - 맹렬한 시위",
[96976] = "핀의 명멸하는 단검",
[96977] = "지그의 고대 술통파쇄기",
[96978] = "암흑숲 영혼지팡이",
[96979] = "불의 잃어버린 어깨보호구",
[96980] = "치유의 잃어버린 어깨보호구",
[96981] = "유동성의 잃어버린 어깨보호구",
[96982] = "나다가스트의 방혈검",
[96983] = "제르투드 - 구세주의 자비로운 손",
[96984] = "달의 잊혀진 어깨덧옷",
[96985] = "태양의 잊혀진 어깨덧옷",
[96986] = "쏜살의 버려진 어깨덮개",
[96987] = "소생의 버려진 어깨덮개",
[96988] = "복원된 성스러운 어깨


a\u0646',
			'\u0627\u0631\u062f\u064a\u0628\u0647\u0634\u062a',
			'\u062e\u0631\u062f\u0627\u062f',
			'\u062a\u064a\u0631',
			'\u0645\u0631\u062f\u0627\u062f',
			'\u0634\u0647\u0631\u064a\u0648\u0631',
			'\u0645\u0647\u0631',
			'\u0622\u0628\u0627\u0646',
			'\u0622\u0630\u0631',
			'\u062f\u06cc',
			'\u0628\u0647\u0645\u0646',
			'\u0627\u0633\u0641\u0646\u062f'
		],
		monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
		dayNames: [
			'\u064a\u06a9\u0634\u0646\u0628\u0647',
			'\u062f\u0648\u0634\u0646\u0628\u0647',
			'\u0633\u0647\u200c\u0634\u0646\u0628\u0647',
			'\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647',
			'\u067e\u0646\u062c\u0634\u0646\u0628\u0647',
			'\u062c\u0645\u0639\u0647',
			'\u0634\u0646\u0628\u0647'
		],
		dayNamesShort: [
			'\u06cc',
			'\u062f',
			'\u0633',
			'\u0686',
			'\u067e',
			'\u062c',
			'\u0634'
		],
		dayNamesMin: [
			'\u06cc',
			'\u062f',
			'\u0633',
			'\u0686',
			'\u067e',
			'\u062c',
			'\u0634'
		],
		weekHeader: '\u0647\u0641',
		dateFormat: 'yy/mm/dd',
		firstDay: 6,
		isRTL: true,
		showMonthAfterYear: false,
		yearSuffix: ''};
	$.datepicker.setDefaults($.datepicker.regional['fa']);
});
/* French initialisation for the jQuery UI date picker plugin. */
/* Written by Keith Wood (kbwood{at}iinet.com.au),
			  Stéphane Nahmani (sholby@sholby.net),
			  Stéphane Raimbault <stephane.raimbault@gmail.com> */
jQuery(function($){
	$.datepicker.regional['fr'] = {
		closeText: 'Fermer',
		prevText: 'Pr\u0026\u0023\u0032\u0033\u0033\u003bc\u0026\u0023\u0032\u0033\u0033\u003bdent',
		nextText: 'Suivant',
		currentText: 'Aujourd\'hui',
		monthNames: ['Janvier','F\u0026\u0023\u0032\u0033\u0033\u003bvrier','Mars','Avril','Mai','Juin',
		'Juillet','Ao\u0026\u0023\u0032\u0035\u0031\u003bt','Septembre','Octobre','Novembre','D\u0026\u0023\u0032\u0033\u0033\u003bcembre'],
		monthNamesShort: ['Janv.','F\u0026\u0023\u0032\u0033\u0033\u003bvr.','Mars','Avril','Mai','Juin',
		'Juil.','Ao\u0026\u0023\u0032\u0035\u0031\u003bt','Sept.','Oct.','Nov.','D\u0026\u0023\u0032\u0033\u0033\u003bc.'],
		dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
		dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
		dayNamesMin: ['D','L','M','M','J','V','S'],
		weekHeader: 'Sem.',
		dateFormat: 'dd/m


/*
 * Copyright (c) 2010-2013 Apple Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 *
 * This file contains Original Code and/or Modifications of Original Code
 * as defined in and that are subject to the Apple Public Source License
 * Version 2.0 (the 'License'). You may not use this file except in
 * compliance with the License. Please obtain a copy of the License at
 * http://www.opensource.apple.com/apsl/ and read it before using this
 * file.
 *
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 * Please see the License for the specific language governing rights and
 * limitations under the License.
 *
 * @APPLE_LICENSE_HEADER_END@
 */

# bool save_xxm = (*((uint32_t*)_COMM_PAGE_CPU_CAPABILITIES) & kHasAVX1_0) != 0;

.set RDI_SAVE_RBP,			-8
.set RSI_SAVE_RBP,			-16
.set RDX_SAVE_RBP,			-24
.set RCX_SAVE_RBP,			-32
.set RBX_SAVE_RBP,			-40
.set R8_SAVE_RBP, 			-48
.set R9_SAVE_RBP, 			-56
.set R10_SAVE_RBP,			-64
.set R11_SAVE_RBP,			-72
.set STATIC_STACK_SIZE,		256	# extra padding to allow it to be 64-byte aligned

.set XMM0_SAVE_RSP,			0x00
.set XMM1_SAVE_RSP,			0x10
.set XMM2_SAVE_RSP,			0x20
.set XMM3_SAVE_RSP,			0x30
.set XMM4_SAVE_RSP,			0x40
.set XMM5_SAVE_RSP,			0x50
.set XMM6_SAVE_RSP,			0x60
.set XMM7_SAVE_RSP,			0x70

# returns address of TLV in %rax, all other registers preserved
	.globl _tlv_bootstrap
_tlv_bootstrap:
#	movq	8(%rdi),%rax			# get key from descriptor
#	movq	%gs:0x0(,%rax,8),%rax	# get thread value
#	testq	%rax,%rax				# if NULL, lazily allocate
#	je		LlazyAllocate
#	addq	16(%rdi),%rax			# add offset from descriptor
#	ret
LlazyAllocate:
	pushq		%rbp
	movq		%rsp,%rbp
	subq		$STATIC_STACK_SIZE,%rsp
	movq		%rdi,RDI_SAVE_RBP(%rbp)	# save registers that might be used as parameters
	movq		%rsi,RSI_SAVE_RBP(%rbp)
	movq		%rdx,RDX_SAVE_RBP(%rbp)
	movq		%rcx,R


":835461,"uu":12067,"c5":"808857280190087168","buff_patch":15491},"M249 | Deep Relief (Field-Tested)":{"buff":835462,"uu":43510,"c5":"808799624245805056"},"Getaway Sally | The Professionals":{"buff":835463,"uu":44316,"c5":"808803044176429056"},"CZ75-Auto | Vendetta (Well-Worn)":{"buff":835464,"uu":34970,"c5":"808845082719158272"},"Bio-Haz Specialist | SWAT":{"buff":835465,"uu":44728,"c5":"808792884140834816"},"M249 | Deep Relief (Minimal Wear)":{"buff":835466,"uu":6873,"c5":"808779537713987584"},"SSG 08 | Threat Detected (Factory New)":{"buff":835467,"uu":43307,"c5":"808850189397655552"},"PP-Bizon | Death Rattle (Minimal Wear)":{"buff":835468,"uu":9805,"c5":"808823301502926848"},"Sticker | Ancient Protector":{"buff":835469,"uu":8379,"buff_sticker":15492,"c5":"808805650197118976"},"Cmdr. Mae \'Dead Cold\' Jamison | SWAT":{"buff":835470,"uu":44360,"c5":"808803559463452672"},"AWP | Exoskeleton (Field-Tested)":{"buff":835471,"uu":7070,"c5":"808796481313832960"},"CZ75-Auto | Vendetta (Minimal Wear)":{"buff":835472,"uu":43447,"c5":"808779044816683008"},"StatTrak\u2122 CZ75-Auto | Vendetta (Field-Tested)":{"buff":835473,"uu":43911,"c5":"808779536006905856"},"Dual Berettas | Heist (Factory New)":{"buff":835474,"uu":44991,"c5":"808811819455741952"},"MP5-SD | Condition Zero (Well-Worn)":{"buff":835475,"uu":9726,"c5":"808811822681161728"},"M249 | Deep Relief (Well-Worn)":{"buff":835476,"uu":12273,"c5":"808811825822695424"},"Dual Berettas | Dezastre (Battle-Scarred)":{"buff":835477,"uu":7663,"c5":"808869572440621056"},"MP7 | Vault Heist (Field-Tested)":{"buff":835478,"uu":10081,"c5":"808804454673678336"},"Sticker | Badge of Service":{"buff":835479,"uu":9826,"buff_sticker":15493,"c5":"808808931025354752"},"Sticker | Battle Scarred":{"buff":835480,"uu":7545,"buff_sticker":15494,"c5":"808843822351515648"},"P250 | Bengal Tiger (Field-Tested)":{"buff":835481,"uu":13136,"c5":"808818615121608704"},"Sticker | Ancient Beast (Foil)":{"buff":835482,"uu":13134,"buff_sticker":15495,"c5":"808863832686985216"},"Sticker | Broken Fang":{"buff":835483,"uu":7543,"buff_sticker":15496,"c5":"808822260867399680"},"Sticker | Stone Scales":{"buff":835484,"uu":8543,"buff_sticker":15497,"c5":"808805650054512640"},"Sticker | Coiled Strike (Holo)":{"buff":835485,"uu":8236,"buff_sticker":15498,"c5":"808808484829396992"},"Sticker | Ancient Marauder":{"buff":835486,"uu":7546,"buff_sticker":15499,"c5":"808822257939775488"},"Sticker | Broken Fang (Holo)":{"buff":835491,"uu":83


: 400;
}

.fa-firefox-browser {
  --fa: "\e007";
}

.fa-ideal {
  --fa: "\e013";
}

.fa-microblog {
  --fa: "\e01a";
}

.fa-square-pied-piper {
  --fa: "\e01e";
}

.fa-pied-piper-square {
  --fa: "\e01e";
}

.fa-unity {
  --fa: "\e049";
}

.fa-dailymotion {
  --fa: "\e052";
}

.fa-square-instagram {
  --fa: "\e055";
}

.fa-instagram-square {
  --fa: "\e055";
}

.fa-mixer {
  --fa: "\e056";
}

.fa-shopify {
  --fa: "\e057";
}

.fa-deezer {
  --fa: "\e077";
}

.fa-edge-legacy {
  --fa: "\e078";
}

.fa-google-pay {
  --fa: "\e079";
}

.fa-rust {
  --fa: "\e07a";
}

.fa-tiktok {
  --fa: "\e07b";
}

.fa-unsplash {
  --fa: "\e07c";
}

.fa-cloudflare {
  --fa: "\e07d";
}

.fa-guilded {
  --fa: "\e07e";
}

.fa-hive {
  --fa: "\e07f";
}

.fa-42-group {
  --fa: "\e080";
}

.fa-innosoft {
  --fa: "\e080";
}

.fa-instalod {
  --fa: "\e081";
}

.fa-octopus-deploy {
  --fa: "\e082";
}

.fa-perbyte {
  --fa: "\e083";
}

.fa-uncharted {
  --fa: "\e084";
}

.fa-watchman-monitoring {
  --fa: "\e087";
}

.fa-wodu {
  --fa: "\e088";
}

.fa-wirsindhandwerk {
  --fa: "\e2d0";
}

.fa-wsh {
  --fa: "\e2d0";
}

.fa-bots {
  --fa: "\e340";
}

.fa-cmplid {
  --fa: "\e360";
}

.fa-bilibili {
  --fa: "\e3d9";
}

.fa-golang {
  --fa: "\e40f";
}

.fa-pix {
  --fa: "\e43a";
}

.fa-sitrox {
  --fa: "\e44a";
}

.fa-hashnode {
  --fa: "\e499";
}

.fa-meta {
  --fa: "\e49b";
}

.fa-padlet {
  --fa: "\e4a0";
}

.fa-nfc-directional {
  --fa: "\e530";
}

.fa-nfc-symbol {
  --fa: "\e531";
}

.fa-screenpal {
  --fa: "\e570";
}

.fa-space-awesome {
  --fa: "\e5ac";
}

.fa-square-font-awesome {
  --fa: "\e5ad";
}

.fa-square-gitlab {
  --fa: "\e5ae";
}

.fa-gitlab-square {
  --fa: "\e5ae";
}

.fa-odysee {
  --fa: "\e5c6";
}

.fa-stubber {


 = "Сосиска в кукурузных сухариках",
[44941] = "Свежевыжатый лимеад",
[44943] = "Ледяная призма",
[44944] = "Формула чар для наручей - выносливость V",
[44946] = "Свиток чар для оружия - титановый страж",
[44947] = "Свиток чар для наручей - выносливость VI",
[44949] = "Нерушимые усилители исцеления",
[44950] = "Сигнальный огонь Релораза",
[44951] = "Ящик бомб",
[44953] = "Карпаччо из ворга",
[44954] = "Рецепт: карпаччо из ворга",
[44955] = "Символ чародейской вспышки",
[44956] = "Гоблинский учебник по выплавке элементия",
[44957] = "Великое начертание гладиатора",
[44958] = "Эфириальное масло",
[44963] = "Земляные накладки для поножей",
[44965] = "Росток Тельдрассила",
[44970] = "Дун-морогский медвежонок",
[44971] = "Тирисфальский нетопырь",
[44973] = "Дуротарский скорпион",
[44974] = "Элвиннский барашек",
[44977] = "Рецепт: похлебка из пещерной крысы",
[44978] = "Меч Драк'Мара",
[44980] = "Мулгорский долгоног",
[44981] = "Меч Ясеневого озера",
[44982] = "Чудесная метла",
[44983] = "Береговой краб",
[44984] = "Плеточник долины Аммен",
[44986] = "Губная помада \"Бородавки прочь\"",
[44987] = "Печать искателя славы",
[44990] = "Печать чемпиона",
[44998] = "Оруженосец Серебряного Авангарда",
[45000] = "Зимний гиацинт",
[45002] = "Механобип",
[45003] = "Клинок Зимы",
[45005] = "Жгучий уголь",
[45011] = "Знамя Штормграда",
[45013] = "Знамя Громового Утеса",
[45014] = "Знамя Оргриммара",
[45015] = "Сен'джинское знамя",
[45016] = "Знамя Подгорода",
[45017] = "Знамя Луносвета",
[45018] = "Знамя Стальгорна",
[45019] = "Знамя Гномрегана",
[45020] = "Знамя Экзодара",
[45021] = "Знамя Дарнаса",
[45022] = "Орчонок из Серебряного Авангарда",
[45037] = "Превосходная лиловая рубашка",
[45038] = "Осколок Вал'анира",
[45039] = "Расколотый


// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef PPAPI_PROXY_PPP_MOUSE_LOCK_PROXY_H_
#define PPAPI_PROXY_PPP_MOUSE_LOCK_PROXY_H_

#include "base/compiler_specific.h"
#include "ppapi/c/pp_instance.h"
#include "ppapi/c/ppp_mouse_lock.h"
#include "ppapi/proxy/interface_proxy.h"

namespace ppapi {
namespace proxy {

class PPP_MouseLock_Proxy : public InterfaceProxy {
 public:
  PPP_MouseLock_Proxy(Dispatcher* dispatcher);
  virtual ~PPP_MouseLock_Proxy();

  static const Info* GetInfo();

  // InterfaceProxy implementation.
  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;

 private:
  // Message handlers.
  void OnMsgMouseLockLost(PP_Instance instance);

  // When this proxy is in the plugin side, this value caches the interface
  // pointer so we don't have to retrieve it from the dispatcher each time.
  // In the host, this value is always NULL.
  const PPP_MouseLock* ppp_mouse_lock_impl_;

  DISALLOW_COPY_AND_ASSIGN(PPP_MouseLock_Proxy);
};

}  // namespace proxy
}  // namespace ppapi

#endif  // PPAPI_PROXY_PPP_MOUSE_LOCK_PROXY_H_


	target.trySetStatus('slp', this.effectData.source);
			},
		},
		name: "Tranquilizing Gas",
		rating: 4,
		num: 3012,
	},
	trashbeat: {
		shortDesc: "User's Sound moves taunt targets.",
		onModifyMove(move, pokemon) {
			if (move.flags['sound']) {
				for (const target of pokemon.side.foe.active) {
					target.addVolatile('taunt');
				}
			}
		},		volatileStatus: 'taunt',
		condition: {
			duration: 3,
			onStart(target) {
				if (target.activeTurns && !this.queue.willMove(target)) {
					this.effectData.duration++;
				}
				this.add('-start', target, 'move: Taunt');
			},
			onResidualOrder: 12,
			onEnd(target) {
				this.add('-end', target, 'move: Taunt');
			},
			onDisableMove(pokemon) {
				for (const moveSlot of pokemon.moveSlots) {
					const move = this.dex.getMove(moveSlot.id);
					if (move.category === 'Status' && move.id !== 'mefirst') {
						pokemon.disableMove(moveSlot.id);
					}
				}
			},
			onBeforeMovePriority: 5,
			onBeforeMove(attacker, defender, move) {
				if (!move.isZ && !move.isMax && move.category === 'Status' && move.id !== 'mefirst') {
					this.add('cant', attacker, 'move: Taunt', move);
					return false;
				}
			},
		},
		name: "Trash Beat",
		rating: 4,
		num: 3013,
	},
	dropheat: {
		shortDesc: "User is immune to recoil, lowers all stats of opponents using Sound moves.",
		onDamage(damage, target, source, effect) {
			if (effect.id === 'recoil') {
				if (!this.activeMove) throw new Error("Battle.activeMove is null");
				if (this.activeMove.id !== 'struggle') return null;
			}
		},
		onDamagingHit(damage, target, source, move) {
			if (move.flags['sound']) {
				this.add('-ability', target, 'Drop Heat');
				this.boost({atk: -1, def: -1, spa: -1, spd: -1, spe: -1}, source, target, null, true);
			}
		},
		name: "Drop Heat",
		rating: 3,
		num: 3014,
	},
	mentalnote: {
		shortDesc: "User forewarns a random move.",
		onStart(pokemon) {
			for (const target of pokemon.side.foe.active) {
				if (target.fainted) return;
				const temp = this.sample(target.moveSlots);
				//const move = target.moves.indexOf(temp.id);
				this.add('-message', pokemon.name + "'s Mental Note revealed the move " + temp.move + "!");
			}
		},
		name: "Mental Note",
		rating: 0.5,
		num: 3015,
	},
	mixitup: {
		shortDesc: "The user switches after using sound move.",
		onModifyMove(move, pokemon) {
			if (move.flags['sound']) {
				move.selfSwitch = true;
			}
		},
		name: "Mix it Up",
		rating: 4,
		num: 3016,
	},
	adaptation: {
		shortDesc: "On switch-in, user gains a type matching its first move.",
		onStart(pokemon) {
			const type = this.dex.getMove(pokemon.moveSlots[0].id).type;
			if (pokemon.hasType(type) || !pokemon.addType(type)) return false;
			this.add('-start', pokemon, 'typeadd', type);
		},
		name: "Adaptation",
		rating: 3.5,
		num: 3017,
	},
	vent: {


--- forked by https://raw.githubusercontent.com/pintsized/lua-resty-http/master/lib/resty/http_headers.lua
local rawget, rawset, setmetatable =
    rawget, rawset, setmetatable

local str_lower = string.lower

local _M = {
    _VERSION = '0.11',
}

-- Returns an empty headers table with internalised case normalisation.
function _M.new()
    local mt = {
        normalised = {},
    }

    mt.__index = function(t, k)
        return rawget(t, mt.normalised[str_lower(k)])
    end

    mt.__newindex = function(t, k, v)
        local k_normalised = str_lower(k)

        -- First time seeing this header field?
        if not


ye_of_tyr" )
            active_dot.eye_of_tyr = active_enemies

            if talent.lights_guidance.enabled then
                applyBuff( "hammer_of_light_ready", nil, 1 + set_bonus.tww3 >=4 and 1 or 0 )
            end

            if talent.undisputed_ruling.enabled then gain( 3, "holy_power" ) end
        end,

        bind = "hammer_of_light"
    },

    -- Quickly heal a friendly target for $?$c1&$?a134735[${$s1*1}][$s1].
    flash_of_light = {
        id = 19750,
        cast = 1.5,
        cooldown = 0,
        gcd = "spell",
        school = "holy",

        spend = 0.10,
        spendType = "mana",

        startsCombat = false,

        handler = function ()
            gain( 1.67 * 1.68 * ( 1 + stat.versatility_atk_mod ) * stat.spell_power, "health" )
        end,
    },

    -- Talent: Empowers you with the spirit of ancient kings, reducing all damage you take by 50% for 8 sec.
    guardian_of_ancient_kings = {
        id = function() return QueenGlyphed( 212641 ) and 212641 or 86659 end,
        cast = 0,
        cooldown = function () return 300 - ( conduit.royal_decree.mod * 0.001 ) end,
        gcd = "off",
        school = "holy",

        talent = "guardian_of_ancient_kings",
        startsCombat = false,
        nopvptalent = "guardian_of_the_forgotten_queen",

        toggle = "defensives",

        handler = function ()
            applyBuff( "guardian_of_ancient_kings" )
            if conduit.royal_decree.enabled then applyBuff( "royal_decree" ) end
        end,

        copy = { 86659, 212641 }
    },

    -- Empowers the friendly target with the spirit of the forgotten queen, causing the target to be immune to all damage for 10 sec.
    guardian_of_the_forgotten_queen = {
        id = 228049,
        cast = 0,
        cooldown = 300,
        gcd = "spell",
        school = "holy",

        pvptalent = "guardian_of_the_forgotten_queen",
        startsCombat = false,

        toggle = "defensives",

        handler = function ()
            applyBuff( "guardian_of_the_forgotten_queen" )
        end,
    },

    -- Stuns the target for 6 sec.
    hammer_of_justice = {
        id = 853,
        cast = 0,
        cooldown = function() return 45 - ( 15 * talent.fist_of_justice.rank ) end,
        gcd = "spell",
        school = "holy",

        spend = 0.035,
        spendType = "mana",

        startsCombat = false,

        handler = function ()
            applyDebuff( "target", "hammer_of_justice" )
        end,
    },

        -- Hammer down your enemy with the power of the Light, dealing $429826s1 Holy damage and ${$429826s1/2} Holy damage up to 4 nearby enemies. ; Additionally, calls down Empyrean Hammers from the sky to strike $427445s2 nearby enemies for $431398s1 Holy damage each.;
        hammer_of_light = {
            id = 427453,
            known = 387174,
            flash = 387174,
            cast = 0.0,
            cooldown = 0.0,
            gcd = "spell",

            spend = function()
                if buff.divine_purpose.up or buff.hammer_of_light_free.up then return 0 end
                return 3
            end,
            spendType = "holy_power",

            startsCombat = true,
            buff = function() return buff


px Minecrafter";
            this.scoreDisplay.text = "Score: 0";
            this.scoreDisplay.x = Constants.SCREEN_WIDTH;
            this.scoreDisplay.y = Constants.SCREEN_HEIGHT - 32;
            this.scoreDisplay.textBaseline = "middle";
            this.scoreDisplay.textAlign = "right";
            this.scoreDisplay.name = "Score Display";
            this.screenObjects.push(this.scoreDisplay);
        }

        // Sets internal reference to player object
        setPlayer(player: GameObjects.Player): void {
            this.player = player;
        }

        // Resets the game play screen back to initial state
        reset(): void {
            this.killDisplay.text = "Kill Count: 0";
            this.scoreDisplay.text = "Score: 0";
            this.playerHealth = this.player.getHealth();

            var i;
            for (i = 0; i < this.healthSprites.length; i++) {
                this.healthSprites[i].visible = true;
            }
            for (i = 0; i < this.inventorySprites.length; i++) {
                this.inventorySprites[i].visible = false;
            }
        }

        // Updates the player's health display and kill count
        update() {
            var health = this.player.getHealth();

            if ((health < this.playerHealth) && (health >= 0)) {
                for (var i = (this.playerHealth - 1); i >= health; i--) {
                    this.healthSprites[i].visible = false;
                }
                this.playerHealth = health;
            } else if ((health > this.playerHealth) && (this.playerHealth > 0)) {
                for (var i = (this.playerHealth - 1); i < health; i++) {
                    this.healthSprites[i].visible = true;
                }
                this.playerHealth = health;
            }

            if (this.lastKillCount != this.player.getKillCount()) {
                this.lastKillCount = this.player.getKillCount();
                this.killDisplay.text = "Kill Count: " + this.lastKillCount;
            }

            if (this.lastScore != this.player.getScore()) {
                this.lastScore = this.player.getScore();
                this.scoreDisplay.text = "Score: " + this.lastScore;
            }

            for (var i = 0; i < this.inventorySprites.length; i++) {
                if ((!this.inventorySprites[i].visible) && (this.player.inventory[i] !== Constants.ITEM.EMPTY)) {
                    this.changeInventory(i, this.player.inventory[i]);
                }
            }
        }

        // When the player is hit, flash the screen with a red overlay for 100ms
        playerHit(): void {
            var hitShape = this.hitShape;
            hitShape.visible = true;
            setTimeout(function () {
                hitShape.visible = false;
            }, 100);
        }

        /**
         * Changes the sprite of the inventory and displays the inventory item
         * @param slot The inventory slot to change
         * @param item The item to set the specific slot to
         */
        changeInventory(slot: number, item: number): void {
            if (slot > this.inventorySprites.length) {
                return;
            }

            if (item === Constants.ITEM.EMPTY) {
                this.inventorySprites[slot].visible = false;
            } else {
                switch (item) {
                    case Constants.ITEM.FOOD:
                        this.inventorySprites[slot].gotoAndStop("FullFood");
                        break;
                }
                this.inventorySprites[slot].visible = true;
            }
        }
    }
} import Quill from 'quill';
const Inline = Quill.import('blots/inline');

interface


时重新计算mid = (start +end) / 2 = (4+ 6)/2 = 5, arr[mid] = arr[5] = 6, 因为7>arr[mid] = arr[5] = 6,所以还是需要将start移动到mid右边 一个位置，即start = mid + 1 = 5 + 1 = 6, 此时重新计算mid = (start +end) / 2 = (6 + 6) / 2 = 6.arr[6] = 7, 此时arr[mid] = arr[6] = 7,刚好等于待查找数字7，说明成功找到数字"7"所 在的位置.

【d】假设查找"0", 因为 0 < arr[mid] = arr[3] = 4, 所以需要将end移动到mid左边一个位 置，即end = mid – 1 = 3 – 1 = 2,此时重新计算mid = (start +end) / 2 = (0 + 2) / 2 = 1,arr[mid] = arr[1] = 2, 因为0 < arr[mid] = arr[1] = 2,所以需要将end移动到mid左边一个 位置，即end = mid – 1 = 1 – 1 = 0, 此时mid = (start +end) / 2 = (0 + 0) / 2 = 0,arr[mid] = arr[0] = 1,因为0 end，即start 已经大于end结束 位置，说明没有找到相应的元素0。

**算法实现

```
public class BinarySearchUtils {

    /
     * 根据指定值查找在数组中的位置

     * @param arr   待查找有序数组
     * @param value 指定值
     * @return 返回值在数组中对应的下标位置
     */
    public static int binarySearch(int[] arr, int value) {
        //起始位置
        int start = 0;
        //结束位置
        int end = arr.length - 1;

        while (true) {
            //计算中间位置下标
            int mid = (start + end) / 2;
            //中间值
            int midValue = arr[mid];

            if (value == midValue) {
                return mid;
            } else {
                //待查找数值比中间值小,需要将
                if (midValue > value) {
                    end = mid - 1;
                } else {
                    //待查找数值比中间值大,需要将
                    start = mid + 1 start = mid + 1;
                }
            }


.073-.138.11-.316.11-.532 0-.423-.12-.727-.358-.908-.24-.182-.556-.273-.95-.273h-1.983v2.27h1.947zm-.104-3.508c.324 0 .59-.076.8-.231.208-.155.312-.404.312-.753a.954.954 0 0 0-.104-.474.761.761 0 0 0-.278-.29 1.165 1.165 0 0 0-.4-.144 2.63 2.63 0 0 0-.47-.041h-1.703v1.933h1.843zm.233-3.345c.394 0 .754.035 1.078.104.324.07.602.183.834.341.231.159.411.369.539.631.126.263.19.588.19.973 0 .417-.094.765-.284 1.041-.189.28-.468.506-.84.684.51.147.891.403 1.142.77.25.366.376.808.376 1.326 0 .416-.08.776-.242 1.082a2.12 2.12 0 0 1-.656.746 2.897 2.897 0 0 1-.938.43 4.255 4.255 0 0 1-1.083.137h-4.01V4.537h3.894zm3.486 0h2.04l1.934 3.265 1.923-3.265h2.028L76.03 9.63v3.172h-1.819V9.584z" fill="#656E78"/><path d="M102.992.404V12.81h2.79v-2.233l.96-.913 1.9 3.146h3.617l-3.487-5.004 3.346-3.268h-3.989l-1.604 1.89-.744.929V.404zM92.934 4.536l-1.05 5.649-1.375-5.65H87.3l-1.353 5.65-1.056-5.65H81.98l2.15 8.272h3.737l1.047-4.292 1.047 4.292H93.7l2.155-8.271zm32.036 5.173c-.355.463-.912.772-1.64.772-.834 0-1.5-.54-1.5-1.824 0-1.283.666-1.824 1.5-1.824.728 0 1.285.31 1.64.773V9.71zm2.784-2.767l.155-2.406h-2.546l-.192.906c-.587-.617-1.316-1.128-2.598-1.128-2.322 0-3.59 1.5-3.59 4.343 0 2.844 1.268 4.343 3.59 4.343 1.282 0 2.011-.51 2.598-1.128l.2.936h2.538l-.155-2.435V6.942zM98.83.45a1.594 1.594 0 1 0-.001 3.187A1.594 1.594 0 0 0 98.83.45m2.402 5.83V4.536h-3.996v8.272h3.996v-1.735h-1.253V6.28zM114.4 2.043a1.595 1.595 0 0 0 3.19 0 1.595 1.595 0 1 0-3.19 0m.445 4.237v4.793h-1.252v1.735h3.997V4.536h-3.997V6.28z" fill="#092344"/></g> </symbol> <symbol id="wds-company-logo-wikia" viewbox="0 0 64 23"> <path fill-rule="evenodd" d="M28.82 19.085v-17h3.827v9.526l1.02-1.27 2.2-2.59h5.47l-4.588 4.48 4.78 6.


 {
      let current = this.head
      let previous
      let index = -1
      if (position === 0) {
        this.head = current.next
      } else {
        while (++index < position) {
          previous = current
          current = previous.next
        }
        previous.next = current.next
      }
      this.length--
      return current.element
    }
    return null
  } // 移除单向链表中某个位置的元素

  getHead() {
    return this.head
  } // 获取单向链表的头部

  isAmpty() {
    return !this.length
  } // 检查单向链表是否为空，为空则返回true

  toString() {
    let str = ''
    let current = this.head
    while (current) {
      str += current.element
      current = current.next
    }
    return current
  } // 将链表所有内容以字符串输出

  size() {
    return this.length
  } // 返回单向链表长度
}

class DoublyEnode {
  constructor(public element: any, public next: any = null, public prev: any = null) {}
}
class DoublyLinkedList {
  public length = 0
  public head: DoublyEnode | null = null
  public tail: DoublyEnode | null = null
  append(element: any) {
    let node = new DoublyEnode(element)
    if (!this.head) {
      this.head = node
    } else {
      let current = this.head
      while (current.next) {
        current = current.next
      }
      current.next = node
      node.prev = current
    }
    this.tail = node
    this.length++
    return node
  } // 添加元素到双向链表尾部

  insert(position: number, element: any) {
    if (position > -1 && position < this.length) {
      let node = new DoublyEnode(element)
      if (position === 0) {
        if (this.head) {
          node.next = this.head
          this.head = node.prev = node
        } else {
          this.head = this.tail = node
        }
      } else if (position === this.length) {
        let current = this.tail as DoublyEnode
        current.next = node
        node.prev = current
        this.tail = node
      } else {
        let index = 0
        let current = this.head as DoublyEnode
        let previous: DoublyEnode = current
        while (index++ < position) {
          previous = current
          current = current.next
        }
        previous.next = node
        node.prev = previous
        node.next = current
        current.prev = node
      }
      this.length++
      return true
    } else {
      return false
    }
  } // 向双向链表中某个位置插入元素

  removeAt(position: number) {
    if (position < 0 && position < this.length) {
      let current = this.head as DoublyEnode
      if (position === 0) {
        this.head = current.next
        if (this.length === 1) {
          this.tail = null
          current.prev = null
        }
      } else if (position === this.length - 1) {
        current = this.tail as DoublyEnode
        this.tail = current.prev
        this.tail = null
      } else {
        let index = 0
        let previous = current
        while (index++ < position) {
          previous = current.prev
          current = current.next
        }
        previous.next = current.next
        current.next.prev = previous
        this.length-


ode_Delegate {
}
class PixelXorXfermode {
}
class PixelFormat {
  int bitsPerPixel;
  int bytesPerPixel;
  int JPEG;
  int YCbCr_422_I;
  int YCbCr_420_SP;
  int YCbCr_422_SP;
  int RGB_332;
  int LA_88;
  int L_8;
  int A_8;
  int RGBA_4444;
  int RGBA_5551;
  int RGB_565;
  int RGB_888;
  int RGBX_8888;
  int RGBA_8888;
  int OPAQUE;
  int TRANSPARENT;
  int TRANSLUCENT;
  int UNKNOWN;
}
class Picture {
  class RecordingCanvas {
    int mPicture;
  }
  int WORKING_STREAM_STORAGE;
  int createdFromStream;
  int mNativePicture;
  int mRecordingCanvas;
}
class Path_Delegate {
  int mLastY;
  int mLastX;
  int mPath;
  int mFillType;
  int sManager;
}
class PathMeasure {
  int native_instance;
  int TANGENT_MATRIX_FLAG;
  int POSITION_MATRIX_FLAG;
  int mPath;
}
class PathEffect_Delegate {
  int sManager;
}
class PathEffect {
  int native_instance;
}
class PathDashPathEffect_Delegate {
}
class PathDashPathEffect {
  class Style {
    int MORPH;
    int ROTATE;
    int TRANSLATE;
    int native_style;
  }
}
class Path {
  class Direction {
    int CCW;
    int CW;
    int nativeInt;
  }
  int sFillTypeArray;
  class FillType {
    int INVERSE_EVEN_ODD;
    int INVERSE_WINDING;
    int EVEN_ODD;
    int WINDING;
    int nativeInt;
  }
  int mLastDirection;
  int mDetectSimplePaths;
  int rects;
  int isSimplePath;
  int mNativePath;
}
class Paint_Delegate {
  int mLocale;
  int mRasterizer;
  int mMaskFilter;
  int mPathEffect;
  int mShader;
  int mColorFilter;
  int mXfermode;
  int mHintingMode;
  int mTextSkewX;
  int mTextScaleX;
  int mTextSize;
  int mStrokeMiter;
  int mStrokeWidth;
  int mTypeface;
  int mTextAlign;
  int mJoin;
  int mCap;
  int mStyle;
  int mColor;
  int mFlags;
  int mFontContext;
  int mFonts;
  int sManager;
  class FontInfo {
    int mMetrics;
    int mFont;
  }
}
class PaintFlagsDrawFilter_Delegate {
}
class PaintFlagsDrawFilter {
  int setBits;
  int clearBits;
}
class Paint {
  class FontMetricsInt {
    int leading;
    int bottom;
    int descent;
    int ascent;
    int top;
  }
  class FontMetrics {
    int leading;
    int bottom;
    int descent;
    int ascent;
    int top;
  }
  class Align {
    int RIGHT;
    int CENTER;
    int LEFT;
    int nativeInt;
  }
  class Join {
    int BEVEL;
    int ROUND;
    int MITER;
    int nativeInt;
  }
  class Cap {
    int SQUARE;
    int ROUND;
    int BUTT;
    int nativeInt;
  }
  class Style {
    int FILL_AND_STROKE;
    int STROKE;
    int FILL;
    int nativeInt;
  }
  int CURSOR_OPT_MAX_VALUE;
  int CURSOR_AT;
  int CURSOR_AT_OR_BEFORE;
  int CURSOR_BEFORE;
  int CUR


-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #aaa;background:#eee;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #bb


t); ok {
				p.print(x, _Semi)
			}
		}
	}
}

func (p *printer) printSwitchBody(list []*CaseClause) {
	p.print(_Lbrace)
	if len(list) > 0 {
		p.print(newline)
		for i, c := range list {
			p.printCaseClause(c, i+1 == len(list))
			p.print(newline)
		}
	}
	p.print(_Rbrace)
}

func (p *printer) printSelectBody(list []*CommClause) {
	p.print(_Lbrace)
	if len(list) > 0 {
		p.print(newline)
		for i, c := range list {
			p.printCommClause(c, i+1 == len(list))
			p.print(newline)
		}
	}
	p.print(_Rbrace)
}

func (p *printer) printCaseClause(c *CaseClause, braces bool) {
	if c.Cases != nil {
		p.print(_Case, blank, c.Cases)
	} else {
		p.print(_Default)
	}
	p.print(_Colon)
	if len(c.Body) > 0 {
		p.print(newline, indent)
		p.printStmtList(c.Body, braces)
		p.print(outdent)
	}
}

func (p *printer) printCommClause(c *CommClause, braces bool) {
	if c.Comm != nil {
		p.print(_Case, blank)
		p.print(c.Comm)
	} else {
		p.print(_Default)
	}
	p.print(_Colon)
	if len(c.Body) > 0 {
		p.print(newline, indent)
		p.printStmtList(c.Body, braces)
		p.print(outdent)
	}
}
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package ssa

import (
	"cmd/internal/src"
	"math"
)

// A biasedSparseMap is a sparseMap for integers between J and K inclusive,
// where J might be somewhat larger than zero (and K-J is probably much smaller than J).
// (The motivating use case is the line numbers of statements for a single function.)
// Not all features of a SparseMap are exported, and it is also easy to treat a
// biasedSparseMap like a SparseSet.
type biasedSparseMap struct {
	s     *sparseMap
	first int
}

// newBiasedSparseMap returns a new biasedSparseMap for values between first and last, inclusive.
func newBiasedSparseMap(first, last int) *biasedSparseMap {
	if first > last {
		return &biasedSparseMap{first: math.MaxInt32, s: nil}
	}
	return &biasedSparseMap{first: first, s: newSparseMap(1 + last - first)}
}

// cap returns one more than the largest key valid for s
func (s *biasedSparseMap) cap() int {
	if s == nil || s.s == nil {
		return 0
	}
	return s.s.cap() + int(s.first)
}

// size returns the number of entries stored in s
func (s *biasedSparseMap) size() int {
	if s == nil || s.s == nil {
		return 0
	}
	return s.s.size()
}

// contains reports whether x is a key in s
func (s *biasedSparseMap) contains(x uint) bool {
	if s == nil || s.s == nil {
		return false
	}
	if int(x) < s.first {
		return false
	}
	if int(x) >= s.cap() {
		return false
	}
	return


.align 2
.thumb_func
.global dispatch_entry

dispatch_entry:
  movs    r0, #1
  msr     primask, r0  // disable interrupt
  ldr     r1, =disp_running
  str     r0, [r1]     // disp_running = 1

  // save context of executing task to stack
  push    {r4-r7}
  mov     r0, r8
  mov     r1, r9
  mov     r2, r10
  mov     r3, r11
  push    {r0-r3}

  // confirm executing task(cur_task)
  ldr     r0, =cur_task
  ldr     r1, [r0]     // get pointer to cur_task
  cmp     r1, #0
  // if cur_task == NULL, then jump to disp_010
  beq     disp_010

  // save stack pointer to TCB which cur_task points
  mov     r2, sp
  str     r2, [r1]

disp_010:
  // confirm schedule task(sche_task)
  ldr     r1, =sche_task
  ldr     r2, [r1]     // get pointer to sche_task
  cmp     r2, #0
  // if sche_task != NULL, then jump to disp_030
  bne     d


# backend/src/models/campaign.py
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from ..core.database import Base

class Campaign(Base):
    __tablename__ = "campaigns"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True, nullable=False)
    status = Column(String, default="draft", nullable=False) # e.g., "draft", "running", "paused", "completed"

    agent_id = Column(Integer, ForeignKey("agents.id"))
    agent = relationship("Agent")

    contacts = relationship("Contact", back_populates="campaign")

class Contact(Base):
    __tablename__ = "contacts"

    id = Column(Integer, primary_key=True, index=True)
    phone_number = Column(String, index=True, nullable=False)
    status = Column(String, default="pending", nullable=False) # e.g., "pending", "calling", "completed", "failed"

    campaign_id = Column(Integer, ForeignKey("campaigns.id"))
    campaign = relationship("Campaign", back_populates="contacts")


df098062cb71?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1298&q=80'),
      Item(
          name: 'Cappuccino',
          description:
              '''A perfect blend of espresso, steamed milk, and a frothy top, dusted with cocoa or cinnamon.''',
          price: 3.99,
          imageUrl:
              'https://images.unsplash.com/photo-1572442388796-11668a67e53d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1270&q=80'),
      Item(
          name: 'Vegan Breakfast Burrito',
          description:
              '''A hearty wrap filled with scrambled tofu, sautéed vegetables, black beans, and avocado. Served with salsa on the side.''',
          price: 10.99,
          imageUrl:
              'https://images.unsplash.com/photo-1574365361850-8e8aec561723?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=870&q=80'),
    ],
  ),
];
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:golden_toolkit/golden_toolkit.dart';
import 'package:recipes/ui/widgets/ingredient_card.dart';

Widget _buildWrappedWidget(Widget child) {
  return MaterialApp(
    home: Scaffold(
      body: ListView(
        children: [
          child,
        ],
      ),
    ),
  );
}

void main() {
  const mockIngredientName = 'colby jack cheese';
  group('IngredientCard', () {
    testWidgets('can build', (tester) async {
      await tester.pumpWidget(
        _buildWrappedWidget(IngredientCard(
          name: mockIngredientName,
          initiallyChecked: false,
          evenRow: true,
          onChecked: (isChecked) {},
        )),
      );

      final cardFinder = find.byType(IngredientCard);
      final titleFinder = find.text(mockIngredientName);

      expect(cardFinder, findsOneWidget);
      expect(titleFinder, findsOneWidget);
    });

    testWidgets('can be checked when tapped', (tester) async {
      var isChecked = false;
      await tester.pumpWidget(
        _buildWrappedWidget(IngredientCard(
          name: mockIngredientName,
          initiallyChecked: isChecked,
          evenRow: true,
          onChecked: (newValue) {
            isChecked = newValue;
          },
        )),
      );

      final cardFinder = find.byType(IngredientCard);

      await tester.tap(cardFinder);
      await tester.pumpAndSettle();

      final checkboxFinder = find.byType(Checkbox);

      expect(checkboxFinder, findsOneWidget);
      expect(isChecked, isTrue);
    });

    // Challenge 1: Test that `IngredientCard` can be unchecked
    testWidgets('can be unchecked when tapped', (tester) async {
      var isChecked = true;
      await tester.pumpWidget(
        _buildWrappedWidget(IngredientCard(
          name: mockIngredientName,
          initiallyChecked: isChecked,
          evenRow: true,
          onChecked: (newValue) {
            isChecked = newValue;
          },
        )),
      );

      final cardFinder = find.byType(IngredientCard);

      await tester.tap(cardFinder);
      await tester.pumpAndSettle();


#  In Python la struttura dati base più semplice è la variabile
# le varibili ospitano un dato soltanto e ogni dato ha un tipo.

# le variabili si dichiarano usando il simbolo `=`

# dichiariamo una variabile che si chiama a e ci mettiamo dentro
# il valore 5
a = 5

# per stampare a terminale variabili (e non solo) possiamo usare la funzione
# built-in print(). Verrà stampato il valore dato fra parentesi

print(5)
print(a)

# per stampare a terminale il tipo di una variabile possiamo usare la funzione
# type dentro una print

print(type(a))

# i tipi più comuni sono i seguenti:

a = 5 # numero intero, integer (int)
b = "ciao" # testo, string (str)
c = 1.5 # numero con virgola, float (float)
d = True # tipo booleano (dettagli in merito in seguito)

# ---------------------------------------------------------

# Naturalmente le variabili possono essere combinate usando degli operatori
# Variabili numeriche usano operatori aritmetici, ad esempio

a = 5
b = 10
c = a + b # il valore di c è la somma del contenuto delle variabili a e b

# ci sono molti operatori artimetici:

c = a - b
c = a / b
c = a * b
c = a ** b # elevazione a potenza

# per le stringhe alcuni operatori aritmetici si possono riutilizzare, ad esempio

a = "ciao"
b = " come stai"
c = a + b # "ciao come stai"

# in questo caso la somma diventa concatenazione di stringhe

# Per le stringhe esistono anche altre funzioni utili, fra cui len() che da la lunghezza
# di una stringa

a = "ciao come stai"
print(len(a)) # stamperà 14

# ---------------------------------------------------------

# Fra i tipi di variabili vi sono quelle booleane. Le variabili booleane assumono
# soltanto due valori: True o False

a = True
b = False

# le variabili booleane sono fondamentali per modificare il "flow" dei nostri programmi
# e come vedremo in seguito sono necessarie per determinare il risultato di computazioni ecc.

# anche le variabili booleane hanno i loro operatori:

c = a and b
d = a or b
e = not a

# abbiamo appena assegnato alle variabili c, d ed e delle ESPRESSIONI booleane che vengono
# valutate e restituiscono un valore booleano. In particolare:
# a and b => è vero se e solo se sia a che b sono veri
# a or b => è vero se e solo se ALMENO uno fra a e b è vero
# not a => inverte il valore (se era True diventa False se era False diventa True)
# maggiori dettagli: https://it.wikipedia.org/wiki/Tabella_della_verit%C3%A0

# Possiamo creare espressioni booleane anche a partire da numeri, ad esempio:

a = 10 > 5

# assegnerà ad a il valore booleano True

# ---------------------------------------------------------

# un argomento avanzato ma che possiamo toccare al volo è quello del CASTING
# come detto, le variabili hanno un tipo associato ma è possibile convertire
# variabili da un tipo all'altro usando appunto il casting. Ad esempio:

a = int("5") #casto una stringa a intero
print(type(a)) # restituirà int

# oppure

a = str(5) #casto un intero a stringa
print(type(a)) # restituirà str


----------------------------------------------- | ------------------------------------------------------- | ------- |\n| `geo`      | geo 编码                                          | 102890883（中国）、102772228（上海）、103873152（北京） | 空      |\n| `remote`   | 是否只显示远程工作                                | `true/false`                                            | `false` |\n| `location` | 工作地点                                          | `china/shanghai/beijing`                                | 空      |\n| `relevant` | 排序方式 (true: 按相关性排序，false： 按日期排序) | `true/false`                                            | `false` |\n| `period`   | 发布时间                                          | `1/7/30`                                                | 空      |\n\n  例如：\n  [`/linkedin/cn/jobs/Software?location=shanghai&period=1`](https://rsshub.app/linkedin/cn/jobs/Software?location=shanghai&period=1): 查找所有在上海的今日发布的所有 Software 工作\n\n  **为了方便起见，建议您在 [LinkedIn.cn](https://www.linkedin.cn/incareer/jobs/search) 上进行搜索，并使用 [RSSHub Radar](https://github.com/DIYgod/RSSHub-Radar) 加载特定的 feed。**","location":"cn/index.ts","heat":0,"topFeeds":[]}' :test='{"code":1,"message":"AssertionError: expected 503 to be 200 // Object.is equality\n    at /home/runner/work/RSSHub/RSSHub/lib/routes.test.ts:79:41\n    at processTicksAndRejections (node:internal/process/task_queues:105:5)\n    at file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:533:5\n    at runTest (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1056:11)\n    at async Promise.all (index 1443)\n    at runSuite (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1191:13)\n    at runSuite (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1205:15)\n    at runFiles (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1262:5)\n    at startTests (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1271:3)\n    at file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/vitest@2.1.9_@types+node@24.7.0_jsdom@27.0.0_


TOOLTIP_REALMTIME,
		GameTime_GetGameTime(true),
		NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b,
		HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
	-- local time
	GameTooltip:AddDoubleLine(
		TIMEMANAGER_TOOLTIP_LOCALTIME,
		GameTime_GetLocalTime(true),
		NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b,
		HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
end

-- GameTimeFrame functions

function GameTimeFrame_OnLoad(self)
	self:RegisterEvent("PLAYER_ENTERING_WORLD");
	self:RegisterEvent("CALENDAR_UPDATE_PENDING_INVITES");
	self:RegisterEvent("CALENDAR_EVENT_ALARM");
	self:RegisterForClicks("AnyUp");

	-- adjust button texture layers to not interfere with overlaid textures
	local tex;
	tex = self:GetNormalTexture();
	tex:SetDrawLayer("BACKGROUND");
	tex = self:GetPushedTexture();
	tex:SetDrawLayer("BACKGROUND");

	self:GetFontString():SetDrawLayer("BACKGROUND");

	self.timeOfDay = 0;
	self:SetFrameLevel(self:GetFrameLevel() + 2);
	self.pendingCalendarInvites = 0;
	self.hour = 0;
	self.flashTimer = 0.0;
	GameTimeFrame_OnUpdate(self);
end

function GameTimeFrame_OnEnter(self)
	GameTooltip:SetOwner(self, "ANCHOR_BOTTOMLEFT");
end

function GameTimeFrame_OnEvent(self, event, ...)
	if ( event == "CALENDAR_UPDATE_PENDING_INVITES" or event == "PLAYER_ENTERING_WORLD" ) then
		local pendingCalendarInvites = CalendarGetNumPendingInvites();
		if ( pendingCalendarInvites > self.pendingCalendarInvites ) then
			if ( not CalendarFrame or (CalendarFrame and not CalendarFrame:IsShown()) ) then
				GameTimeCalendarInvitesTexture:Show();
				GameTimeCalendarInvitesGlow:Show();
				GameTimeFrame.flashInvite = true;
				self.pendingCalendarInvites = pendingCalendarInvites;
			end
		elseif ( pendingCalendarInvites == 0 ) then
			GameTimeCalendarInvitesTexture:Hide();
			GameTimeCalendarInvitesGlow:Hide();
			GameTimeFrame.flashInvite = false;
			self.pendingCalendarInvites = 0;
		end
		GameTimeFrame_SetDate();
	elseif ( event == "CALENDAR_EVENT_ALARM" ) then
		local title, hour, minute = ...;
		local info = ChatTypeInfo["SYSTEM"];
		DEFAULT_CHAT_FRAME:AddMessage(format(CALENDAR_EVENT_ALARM_MESSAGE, title), info.r, info.g, info.b, info.id);
		--UIFrameFlash(GameTimeCalendarEventAlarmTexture, 1.0, 1.0, 6);
	end
end

function GameTimeFrame_OnUpdate(self, elapsed)
	local hour, minute = GetGameTime();
	local time = (hour * 60) + minute;
	if ( time ~= self.timeOfDay ) then
		self.timeOfDay = time;
		local minx = 0;
		local maxx = 50/128;
		local miny = 0;
		local maxy = 50/64;
		if(time < GAMETIME_DAWN or time >= GAMETIME_DUSK) then
			minx = minx + 0.5;
			maxx = maxx + 0.5;
		end
		if ( hour ~= self.hour ) then
			self.hour = hour;
			GameTimeFrame_SetDate();
		end


Bits", NR_OF_BITS_STR)
            .pair("lowTick", LOW_TICK_STR)
            .pair("highTick", HIGH_TICK_STR)
            .addRemarkBlock("The output signals are defined here; we synchronize them all on the main clock")
            .empty();

    if (Hdl.isVhdl()) {
      contents.addVhdlKeywords().add("""
          clockBus <= globalClock&s_outputRegs;

          makeOutputs : {{process}}(globalClock) {{is}}
          {{begin}}
             {{if}} (rising_edge(globalClock)) {{then}}
                s_bufferRegs(0)  <= s_derivedClock({{phase}} - 1);
                s_bufferRegs(1)  <= {{not}}(s_derivedClock({{phase}} - 1));
                s_outputRegs(0)  <= s_bufferRegs(0);
                s_outputRegs(1)  <= s_bufferRegs(1);
                s_outputRegs(2)  <= {{not}}(s_bufferRegs(0)) {{and}} s_derivedClock({{phase}} - 1);
                s_outputRegs(3)  <= s_bufferRegs(0) {{and}} {{not}}(s_derivedClock({{phase}} - 1));
             {{end}} {{if}};
          {{end}} {{process}} makeOutputs;
          """);
    } else {
      contents.add("""
          assign clockBus = {globalClock,s_outputRegs};
          always @(posedge globalClock)
          begin
             s_bufferRegs[0] <= s_derivedClock[{{phase}} - 1];
             s_bufferRegs[1] <= ~s_derivedClock[{{phase}} - 1];
             s_outputRegs[0] <= s_bufferRegs[0];
             s_outputRegs[1] <= s_outputRegs[1];
             s_outputRegs[2] <= ~s_bufferRegs[0] & s_derivedClock[{{phase}} - 1];
             s_outputRegs[3] <= ~s_derivedClock[{{phase}} - 1] & s_bufferRegs[0];
          end
          """);
    }
    contents.empty().addRemarkBlock("The control signals are defined here");
    if (Hdl.isVhdl()) {
      contents.add("""
          s_counterIsZero <= '1' {{when}} s_counterValue = std_logic_vector(to_unsigned(0,{{nrOfBits}})) {{else}} '0';
          s_counterNext   <= std_logic_vector(unsigned(s_counterValue) - 1)
                                {{when}} s_counterIsZero = '0' {{else}}
                             std_logic_vector(to_unsigned(({{lowTick}}-1), {{nrOfBits}}))
                                {{when}} s_derivedClock(0) = '1' {{else}}
                             std_logic_vector(to_unsigned(({{highTick}}-1), {{nrOfBits}}));
          """);
    } else {
      contents.add("""
              assign s_counterIsZero = (s_counterValue == 0) ? 1'b1 : 1'b0;
              assign s_counterNext = (s_counterIsZero == 1'b0)
                                     ? s_counterValue - 1
                                     : (s_derivedClock[0] == 1'b1)
                                        ? {{lowTick}} - 1
                                        : {{highTick}} - 1;
              """)
          .empty()
          .addRemarkBlock("The initial values are defined here (for simulation only)")
          .add("""
              initial
              begin
                 s_outputRegs = 0;
                 s_derivedClock = 0;
                 s_counterValue = 0;
              end
              """);
    }
    contents.empty().addRemarkBlock("The state registers are defined here");
    if (Hdl.isVhdl()) {
      contents


rick.template.Errors;
import jetbrick.template.parser.Symbols;
import jetbrick.template.runtime.*;

public final class AstDirectiveFor extends AstDirective {
    private final String identifier;
    private final AstExpression expression;
    private final AstStatementList statements;
    private final AstStatementList elseStatements;

    public AstDirectiveFor(String identifier, AstExpression expression, AstStatementList statements, AstStatementList elseStatements, Position position) {
        super(position);
        this.identifier = identifier;
        this.expression = expression;
        this.statements = statements;
        this.elseStatements = elseStatements;
    }

    @Override
    public void execute(InterpretContext ctx) throws InterpretException {
        Object result = expression.execute(ctx);

        JetForIterator it = new JetForIterator(result);
        if (it.getSize() > 0) {
            ValueStack valueStack = ctx.getValueStack();

            // save outside variable which will be reset in #for
            it.setOuter((JetForIterator) valueStack.getValue(Symbols.FOR));
            Object outsideIdentifier = valueStack.getValue(identifier);

            // set this.for
            valueStack.setLocal(Symbols.FOR, it);

            while (it.hasNext()) {
                Object item = it.next();
                try {
                    valueStack.setLocal(identifier, item);
                } catch (IllegalStateException e) {
                    throw new InterpretException(Errors.FOR_ITERATOR_ERROR, it.getIndex()).cause(e).set(expression.getPosition());
                }

                statements.execute(ctx);

                // 处理 break, continue, return, stop 语句
                int signal = ctx.getSignal();
                if (signal != InterpretContext.SIGNAL_NONE) {
                    if (signal == InterpretContext.SIGNAL_BREAK) {
                        ctx.setSignal(InterpretContext.SIGNAL_NONE); // clear signal
                        break;
                    } else if (signal == InterpretContext.SIGNAL_CONTINUE) {
                        ctx.setSignal(InterpretContext.SIGNAL_NONE); // clear signal
                        continue;
                    } else {
                        return;
                    }
                }
            }

            // reset outside variable
            valueStack.setLocal(identifier, outsideIdentifier);
            valueStack.setLocal(Symbols.FOR, it.getOuter());

        } else if (elseStatements != null) {
            elseStatements.execute(ctx);
        }
    }
}
/**
 * Copyright 2013-2019 Guoqiang Chen, Shanghai, China. All rights reserved.
 *
 *   Author: Guoqiang Chen
 *    Email: subchen@gmail.com
 *   WebURL: https://github.com/subchen
 *
 * 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 jetbrick.template.parser.ast;

import jetbrick.template.Errors;
import jetbrick.template.runtime.InterpretContext;
import jetbrick.template.runtime.InterpretException;

/**
 *
Binary Operator

 *

 *  See the Java 7 Specs

 *

 *    <


le	: "Дунд талд",
DlgImgAlignRight	: "Баруун",
DlgImgAlignTextTop	: "Текст дээр",
DlgImgAlignTop		: "Дээд талд",
DlgImgPreview		: "Уридчлан харах",
DlgImgAlertUrl		: "Зурагны URL-ын төрлийн сонгоно уу",
DlgImgLinkTab		: "Линк",

// Flash Dialog
DlgFlashTitle		: "Флаш  шинж чанар",
DlgFlashChkPlay		: "Автоматаар тоглох",
DlgFlashChkLoop		: "Давтах",
DlgFlashChkMenu		: "Флаш цэс идвэхжүүлэх",
DlgFlashScale		: "Өргөгтгөх",
DlgFlashScaleAll	: "Бүгдийг харуулах",
DlgFlashScaleNoBorder	: "Хүрээгүй",
DlgFlashScaleFit	: "Яг тааруулах",

// Link Dialog
DlgLnkWindowTitle	: "Линк",
DlgLnkInfoTab		: "Линкийн мэдээлэл",
DlgLnkTargetTab		: "Байрлал",

DlgLnkType			: "Линкийн төрөл",
DlgLnkTypeURL		: "URL",
DlgLnkTypeAnchor	: "Энэ хуудасандах холбоос",
DlgLnkTypeEMail		: "E-Mail",
DlgLnkProto			: "Протокол",
DlgLnkProtoOther	: "<бусад>",
DlgLnkURL			: "URL",
DlgLnkAnchorSel		: "Холбоос сонгох",
DlgLnkAnchorByName	: "Холбоосын нэрээр",
DlgLnkAnchorById	: "Элемэнт Id-гаар",
DlgLnkNoAnchors		: "(Баримт бичиг холбоосгүй байна)",
DlgLnkEMail			: "E-Mail Хаяг",
DlgLnkEMailSubject	: "Message гарчиг",
DlgLnkEMailBody		: "Message-ийн агуулга",
DlgLnkUpload		: "Хуулах",
DlgLnkBtnUpload		: "Үүнийг серверрүү илгээ",

DlgLnkTarget		: "Байрлал",
DlgLnkTargetFrame	: "<Агуулах хүрээ>",
DlgLnkTargetPopup	: "<popup цонх>",
DlgLnkTargetBlank	: "Шинэ цонх (_blank)",
DlgLnkTargetParent	: "Эцэг цонх (_parent)",
DlgLnkTargetSelf	: "Төстэй цонх (_self)",
DlgLnkTargetTop		: "Хамгийн түрүүн байх цонх (_top)",
DlgLnkTargetFrameName	: "Очих фремын нэр",
DlgLnkPopWinName	: "Popup цонхны нэр",
DlgLnkPopWinFeat	: "Popup цонхны онцлог",
DlgLnkPopResize		: "Хэмжээ өөрчлөх",
DlgLnkPopLocation	: "Location хэсэг",
DlgLnkPopMenu		: "Meню хэсэг",
DlgLnkPopScroll		: "Скрол хэсэгүү


yer(self, uid: int, genshin_account: Account, region: RegionEnum, account_id: int):
        player = await self.players_service.get(uid, player_id=genshin_account.uid, region=region)
        if player:
            if player.account_id != account_id:
                player.account_id = account_id
                await self.players_service.update(player)
        else:
            player_model = Player(
                user_id=uid,
                account_id=account_id,
                player_id=genshin_account.uid,
                region=region,
                is_chosen=True,  # todo 多账号
            )
            await self.update_player_info(player_model, genshin_account.nickname)
            await self.players_service.add(player_model)

    async def update_player_info(self, player: Player, nickname: str):
        player_info = await self.player_info_service.get(player)
        if player_info is None:
            player_info = PlayerInfoSQLModel(
                user_id=player.user_id,
                player_id=player.player_id,
                nickname=nickname,
                create_time=datetime.now(),
                is_update=True,
            )  # 不添加更新时间
            await self.player_info_service.add(player_info)

    async def update_cookies(self, uid: int, account_id: int, region: RegionEnum, cookies: Dict):
        cookies_data_base = await self.cookies_service.get(uid, account_id, region)
        if cookies_data_base:
            cookies_data_base.data = cookies
            cookies_data_base.status = CookiesStatusEnum.STATUS_SUCCESS
            await self.cookies_service.update(cookies_data_base)
        else:
            cookies = Cookies(
                user_id=uid,
                account_id=account_id,
                data=cookies,
                region=region,
                status=CookiesStatusEnum.STATUS_SUCCESS,
                is_share=True,  # todo 用户可以自行选择是否将Cookies加入公共池
            )
            await self.cookies_service.add(cookies)

    @conversation.state(state=COMMAND_RESULT)
    @handler.message(filters=filters.TEXT & ~filters.COMMAND, block=False)
    async def command_result(self, update: "Update", context: "ContextTypes.DEFAULT_TYPE") -> int:
        user = update.effective_user
        message = update.effective_message
        account_cookies_plugin_data: AccountCookiesPluginData = context.chat_data.get("account_cookies_plugin_data")
        if message.text == "退出":
            return await self.quit_conversation(update, context)
        if message.text == "确认":
            genshin_account = account_cookies_plugin_data.genshin_account
            await self.update_player(
                user.id, genshin_account, account_cookies_plugin_data.region, account_cookies_plugin_data.account_id
            )
            await self.update_cookies(
                user.id,
                account_cookies_plugin_data.account_id,
                account_cookies_plugin_data.region,
                account_cookies_plugin_data.cookies,
            )
            await self.update_devices(account_cookies_plugin_data.account_id, account_cookies_plugin_data.device)
            logger.info("用户 %s[%s] 绑定账号成功", user.full_name, user.id)
            await message.reply_text("保存成功", reply_markup=ReplyKeyboardRemove())
            return await self.quit_conversation(update, context)
        await message.reply_text("回复错误，请重新输入")
        return COMMAND_RESULT


import pytest
from bedrock_server_manager.instances import (
    get_settings_instance,
    get_manager_instance,
    get_server_instance,
    get_bedrock_process_manager,
)
from bedrock_server_manager.context import AppContext

def test_get_settings_instance(app_context: AppContext):
    """Tests that get_settings_instance returns the correct settings instance from the context."""
    with pytest.deprecated_call():
        settings = get_settings_instance()
    assert settings is app_context.settings

def test_get_manager_instance(app_context: AppContext):
    """Tests that get_manager_instance returns the correct manager instance from the context."""
    with pytest.deprecated_call():
        manager = get_manager_instance()
    assert manager is app_context.manager

def test_get_server_instance(app_context: AppContext):
    """Tests that get_server_instance returns the correct server instance from the context."""
    with pytest.deprecated_call():
        server = get_server_instance("test_server")
    assert server is app_context.get_server("test_server")

def test_get_bedrock_process_manager(app_context: AppContext):
    """Tests that get_bedrock_process_manager returns the correct bedrock_process_manager instance from the context."""
    with pytest.deprecated_call():
        process_manager = get_bedrock_process_manager()
    assert process_manager is app_context.bedrock_process_manager


   event.widget.configure(foreground=theme_manager.get("TEXT_COLOR"))

    def get_company(self):
        """
        Get the company name.
        """
        value = self.company_name.get()
        return value if value != "Ex: My Company" else ""

    def get_project(self):
        """
        Get the project name.
        """
        value = self.project_name.get()
        return value if value != "Ex: my-project" else ""

    def get_package(self):
        """
        Get the package name.
        """
        value = self.package_name.get()
        return value if value != "Ex: com.mycompany.project" else ""


ils.name == "John Doe")
        assert(userData.posts.size == 2)
        assert(currentTime == 1000L)
    }

    @Test
    fun `should cancel children on caller cancellation`() = runTest {
        // given
        var children1Job: Job? = null
        var children2Job: Job? = null
        val repository = object : UserRepository {
            override suspend fun fetchUserDetails(): UserDetails {
                children1Job = currentCoroutineContext()[Job]
                delay(1000)
                return UserDetails("1", "John Doe")
            }

            override suspend fun fetchPosts(): List<Post> {
                children2Job = currentCoroutineContext()[Job]
                delay(1000)
                return listOf(Post("101", "Hello World"), Post("102", "Kotlin Coroutines"))
            }
        }
        val useCase = FetchUserUseCase(repository)

        // when
        val job = launch {
            useCase.fetchUser()
        }
        delay(500)
        job.cancelAndJoin()

        // then
        assert(job.isCancelled) // The parent job should be cancelled
        assert(children1Job?.isCancelled == true) // Both children should be cancelled
        assert(children2Job?.isCancelled == true)
        assert(currentTime == 500L) // Immediately after cancellation
    }

    @Test
    fun `should handle exception in one of the children`() = runTest {
        // given
        class MyException(message: String) : Exception(message)
        var children1Job: Job? = null
        val repository = object : UserRepository {
            override suspend fun fetchUserDetails(): UserDetails {
                children1Job = currentCoroutineContext()[Job]
                delay(1000)
                return UserDetails("1", "John Doe")
            }

            override suspend fun fetchPosts(): List<Post> {
                delay(500)
                throw MyException("Failed to fetch posts")
            }
        }
        val useCase = FetchUserUseCase(repository)

        // when
        val result = runCatching { useCase.fetchUser() }

        // then
        assert(result.exceptionOrNull() is MyException) // The same exception should be propagated
        assert(currentTime == 500L) // Immediately after the exception
        assert(children1Job?.isCancelled == true) // The other child should be cancelled
    }
}data class Player(val name: String, val score: Double, val team: String, val position: String, val age: Int)

val players = listOf(
    Player("Alice", 11.0, "A", "Forward", 25),
    Player("Bob", 22.4, "A", "Midfielder", 32),
    Player("Charlie", 13.2, "B", "Defender", 28),
    Player("David", 9.5, "B", "Goalkeeper", 30),
    Player("Eve", 15.0, "A", "Forward", 22),
    Player("Frank", 18.0, "B", "Midfielder", 27),
    Player("Grace", 10.0, "A", "Defender", 29),
    Player("Helen", 8.0, "C", "Goalkeeper", 31),
    Player("Ivan", 14.0, "A", "Forward", 26),
    Player("John", 16.0, "B", "Midfielder", 33),
    Player("Kate", 12.0, "C", "Defender", 24),
    Player("Liam", 7.0, "B", "Goalkeeper", 34),
    Player("Mia", 17.0, "A", "Forward", 23),
    Player("Nick", 19.0, "B", "Midfielder", 35),
    Player("Olivia", 6.0, "C", "Defender", 21),
    Player("Peter", 20.0, "B", "Goalkeeper", 36),
    Player("Quinn", 5.0, "A", "Forward", 20),
    Player("Robert", 21.0, "B", "Midfielder", 37),
    Player("Sara", 4.0, "C", "Defender", 19),
    Player("Tom", 23.0, "A", "Goal


r example, the role="checkbox" is like <input type="checkbox" />
	// attributes is needed to capture the _type="checkbox"_ part
	attributes?: ARIAConceptAttribute[];
};

export type ARIABaseConcept = {
	module: "HTML" | "XForms";
	concept: ARIAConcept;
};

export type ARIARole =
	| ARIAAbstractRole
	| ARIAWidgetRole
	| ARIADocumentStructureRole;

/**
 * Table reference example: https://www.w3.org/TR/wai-aria-1.1/#checkbox
 */
export type ARIARoleDefinition = {
	props: ARIAProperty[];
	requiredProps: ARIAProperty[];
	superClassRole: ARIARole[];
	/**
     * Having a concept means that a role can be directly mapped to a HTML element
     * For example:
     * - role row => <tr />
     * - role checkbox => <input type="checkbox" />
     * - role button => <button />
     */
	baseConcepts?: ARIABaseConcept[];
};
import { Injectable } from '@angular/core';
import { House } from './house.model';
import { Http, Response, Headers, RequestOptions, RequestMethod } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import { Flat } from '../../flats/shared/flat.model';
import { Resident } from '../../residents/shared/resident.model';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
@Injectable()
// class that contains all values to work with all http request functions(so ye,its also inlude all needed functions to do crud actions)
export class HouseService {
  selectedHouse: House; // variable that is House type to contain one Object type of House
  houseList: House[]; // array that will contain all needed House Objects
  selectedFlat: Flat = new Flat(); // variable that is Flat type to contain one Object type of Flat
  flatList: Flat[] = []; // array that will contain all needed Flat Objects
  EmptyflatList: Flat[] = []; // array that will contain an empty array(to clear list)
  SourtedFlats: Flat[] = [];  // array that will contain all needed Flat Objects
  residentList: Resident[] = []; // array that will contain all needed Resident Objects
  SourtedResidents: Resident[] = []; // array that will contain all needed Resident Objects
  constructor(private http: Http) { }
  /**
   * Function that sends a post http request to our backend
   * where our database is located,function sends an object that has a House type
   * to backend to save it in a database.
   * @param {House} hos hos-obejct that has a House type
   * @returns returns a House object to backend database
   * @memberof HouseService HouseService-Service that contains all restfull Functions for house page
   */
  postHouse(hos: House) {
    const body = JSON.stringify(hos); // why i cant use var and let instead of const here?
    const headerOptions = new Headers({ 'Content-Type': 'application/json' });
    const requestOptions = new RequestOptions({ method: RequestMethod.Post, headers: headerOptions });
    return this.http.post


a13                       // Prepare a15 for the next steps (copy a13 to a15)
        _mod_8_check:

        // Check modulo 4 of the dest_w_bytes_local (a10), if - then copy 4 bytes
        bbci a10, 2, _mod_4_check                       // Branch if 2-nd bit of dest_w_bytes_local is clear
            l32i.n      a14,  a7,   4                   // Load 32 bits from 4-byte aligned src_buff a7 to a14, offset 4
            addi.n      a7,   a7,   4                   // Increment src_buff pointer a7 by 4
            src         a15,  a14,  a15                 // Concatenate a14 and a15 and shift by SAR_BYTE amount to a15 (value in a15 is already prepared from previous steps)
            s32i.n      a15,  a3,   0                   // Save 32 bits from shift-corrected a15 to dest_buff a3, offset 0
            addi.n      a3,   a3,   4                   // Increment dest_buff pointer a3 by 4
            mov         a15,  a14                       // Prepare a15 for the next steps (copy a14 to a15)
        _mod_4_check:

        extui       a13,  a10,  0,  2                   // Get the last 2 bytes of the dest_w_bytes_local (a10), a13 = a10[1:0], to find out how many bytes are needs copied and to increase src and dest pointer accordingly
        beqz        a13,  _mod_1_2_check                // Branch if a13 equal to zero, E.G. if there are no bytes to be copied
            l32i.n      a14,  a7,   4                   // Load 32 bits from 4-byte aligned src_buff a7 to a14, offset 4
            l32i.n      a12,  a3,   0                   // Get dest_buff value: Load 32 bits from 4-byte aligned dest_buff a3 to a12, offset 0
            src         a15,  a14,  a15                 // Concatenate a14 and a15 and shift by SAR_BYTE amount to a15 (value in a15 is already prepared from previous steps)
            ssa8l       a10                             // Set SAR_BYTE from dest_w_bytes_local a10 length
            sll         a15,  a15                       // Shift the dest word a15 by SAR_BYTE amount
            srl         a12,  a12                       // Shift the src word a12 by SAR_BYTE amount
            ssa8b       a10                             // Set SAR_BYTE from dest_w_bytes_local a10 length
            src         a12,  a12,  a15                 // Concatenate a12 and a15 and shift by SAR_BYTE amount to a12
            s32i.n      a12,  a3,   0                   // Save 32 bits from shift-corrected a12 to dest_buff a3, offset 0
            add         a7,   a7,   a13                 // Increment src_buff pointer a7, by amount of copied bytes (a13)
            add         a3,   a3,   a13                 // Increment dest_buff pointer a3, by amount of copied bytes (a13)
        _mod_1_2_check:


, 18)
        this.dataGridToStringGrid();
        this.selectedI = -1;
        this.selectedJ = -1;
    }

    squareCoordinates = [
        [1, 1, 1, 2, 2, 2, 3, 3, 3],
        [1, 1, 1, 2, 2, 2, 3, 3, 3],
        [1, 1, 1, 2, 2, 2, 3, 3, 3],
        [4, 4, 4, 5, 5, 5, 6, 6, 6],
        [4, 4, 4, 5, 5, 5, 6, 6, 6],
        [4, 4, 4, 5, 5, 5, 6, 6, 6],
        [7, 7, 7, 8, 8, 8, 9, 9, 9],
        [7, 7, 7, 8, 8, 8, 9, 9, 9],
        [7, 7, 7, 8, 8, 8, 9, 9, 9]
    ]

    getRow(board, row): any[] {
        return board[row];
    }

    getColumn(board, column): any[] {
        let col = [];
        for (let row = 0; row < 9; row++) {
            col.push(board[row][column]);
        }
        return col;
    }

    getSquare(board, square): any[] {
        let cells = [];
        for (let r = 0; r < 9; r++) {
            for (let c = 0; c < 9; c++) {
                if (square == this.squareCoordinates[r][c]) {
                    cells.push(board[r][c]);
                }
            }
        }
        return cells;
    }

    completeCell(board, r, c): boolean {
        let used = [...this.getRow(board, r), ...this.getColumn(board, c), ...this.getSquare(board, this.squareCoordinates[r][c])]
        let possibilities = []
        for (let p = 1; p <= 9; p++) {
            if (!used.includes(p)) {
                possibilities.push(p)
            }
        }
        if (possibilities.length == 1) {
            board[r][c] = possibilities[0]
            return true
        } else {
            board[r][c] = possibilities
            return false
        }
    }

    isPossible(orig_board): boolean {
        let board = JSON.parse(JSON.stringify(orig_board));

        for(let r = 0; r < 9; r++){
            for(let c = 0; c < 9; c++){
                this.completeCell(board, r, c);
                if(board[r][c].length === 0){
                    return false;
                }
            }
        }
        return true;
    }

    seedRandom(orig_board, numSeededPositions): any[]{
        let board = JSON.parse(JSON.stringify(orig_board));
        let count = 0;

        while(count < numSeededPositions){
            let randRow = Math.floor(Math.random() * 9);
            let randCol = Math.floor(Math.random() * 9);
            if(board[randRow][randCol] === 0){
                board[randRow][randCol] = Math.floor(Math.random() * 9) + 1;
                if(this.isLegal(board) && this.isPossible(board)){
                    count++;
                }
                else{
                    board[randRow][randCol] = 0;
                }
            }
        }
        return board;
    }

    isLegal(orig_board): boolean {
        let legal = true
        // Check all rows
        for (let r = 0; r < 9 && legal == true; r++) {
            let row  = this.getRow(orig_board, r);
            let trimmedRow = row.filter(cell => cell !== 0);
            if (new Set(trimmedRow).size !== trimmedRow.length) {
                legal = false;
            }
        }
        // Check all columns
        for (let c = 0; c < 9 && legal == true; c++) {
            let col  = this.getColumn(orig_board, c);
            let trimmedCol = col.filter(cell => cell !== 0);
            if (new Set(trimmedCol).size !== trimmedCol.length) {
                legal = false;
            }


s1
/* 025AC 80B5DD5C 24180004 */  addiu   $t8, $zero, 0x0004         ## $t8 = 00000004
/* 025B0 80B5DD60 A03804BF */  sb      $t8, 0x04BF($at)           ## 000104BF
/* 025B4 80B5DD64 3C010001 */  lui     $at, 0x0001                ## $at = 00010000
/* 025B8 80B5DD68 00310821 */  addu    $at, $at, $s1
/* 025BC 80B5DD6C 24080036 */  addiu   $t0, $zero, 0x0036         ## $t0 = 00000036
/* 025C0 80B5DD70 A02803DC */  sb      $t0, 0x03DC($at)           ## 000103DC
/* 025C4 80B5DD74 1000001E */  beq     $zero, $zero, .L80B5DDF0
/* 025C8 80B5DD78 92030208 */  lbu     $v1, 0x0208($s0)           ## 00000208
glabel L80B5DD7C
/* 025CC 80B5DD7C 02002025 */  or      $a0, $s0, $zero            ## $a0 = 00000000
/* 025D0 80B5DD80 0C00BD04 */  jal     func_8002F410
/* 025D4 80B5DD84 02202825 */  or      $a1, $s1, $zero            ## $a1 = 00000000
/* 025D8 80B5DD88 1040000A */  beq     $v0, $zero, .L80B5DDB4
/* 025DC 80B5DD8C 2604014C */  addiu   $a0, $s0, 0x014C           ## $a0 = 0000014C
/* 025E0 80B5DD90 3C0580B6 */  lui     $a1, %hi(D_80B5E7B8)       ## $a1 = 80B60000
/* 025E4 80B5DD94 24A5E7B8 */  addiu   $a1, $a1, %lo(D_80B5E7B8)  ## $a1 = 80B5E7B8
/* 025E8 80B5DD98 0C00D3B0 */  jal     func_80034EC0
/* 025EC 80B5DD9C 00003025 */  or      $a2, $zero, $zero          ## $a2 = 00000000
/* 025F0 80B5DDA0 92090208 */  lbu     $t1, 0x0208($s0)           ## 00000208
/* 025F4 80B5DDA4 252A0001 */  addiu   $t2, $t1, 0x0001           ## $t2 = 00000001
/* 025F8 80B5DDA8 A20A0208 */  sb      $t2, 0x0208($s0)           ## 00000208
/* 025FC 80B5DDAC 10000010 */  beq     $zero, $zero, .L80B5DDF0
/* 02600 80B5DDB0 314300FF */  andi    $v1, $t2, 0x00FF           ## $v1 = 00000001
.L80B5DDB4:
/* 02604 80B5DDB4 C6120090 */  lwc1    $f18, 0x0090($s0)          ## 00000090
/* 02608 80B5DDB8 C6100094 */


47e4*/      cmp r3, #0xec
/*0x47e6*/      bhs jump_47f6
/*0x47e8*/      subs r3, #0xe9
/*0x47ea*/      uxtb r1, r3
/*0x47ec*/      ldr r0, [pc, #0xac] /* data_489c */
/*0x47ee*/      bl call_3fec
/*0x47f2*/      ldr r0, [pc, #0xac] /* data_48a0 */
/*0x47f4*/      b jump_4892
            jump_47f6:
/*0x47f6*/      cmp r3, #0xfd
/*0x47f8*/      bhi jump_4894
/*0x47fa*/      subs r3, #0xec
/*0x47fc*/      uxtb r1, r3
/*0x47fe*/      ldr r0, [pc, #0xa4] /* data_48a4 */
/*0x4800*/      bl call_3fec
/*0x4804*/      ldr r0, [pc, #0xa0] /* data_48a8 */
/*0x4806*/      b jump_4892
            jump_4808:
/*0x4808*/      and r1, r0, #7
/*0x480c*/      movs r6, #1
/*0x480e*/      sub.w ip, r3, #0xe0
/*0x4812*/      lsls r6, r1
/*0x4814*/      ldr r7, [pc, #0x94] /* data_48ac */
/*0x4816*/      ldr r5, [pc, #0x98] /* data_48b0 */
/*0x4818*/      cmp.w ip, #7
/*0x481c*/      bhi jump_4834
/*0x481e*/      mov r0, r5
/*0x4820*/      uxtb r1, r6
/*0x4822*/      ldrb r0, [r0]
/*0x4824*/      lsls r2, r2, #0x1e
/*0x4826*/      bpl jump_482c
/*0x4828*/      orrs r0, r1
/*0x482a*/      b jump_482e
            jump_482c:
/*0x482c*/      bics r0, r1
            jump_482e:
/*0x482e*/      strb r0, [r5]
            jump_4830:
/*0x4830*/      strb r4, [r7]
/*0x4832*/      b jump_4894
            jump_4834:
/*0x4834*/      movs r1, #0
            jump_4836:
/*0x4836*/      add.w ip, r5, r1
/*0x483a*/      ldrb.w ip, [ip, #2]
/*0x483e*/      cmp ip, r3
/*0x4840*/      bne jump_484e
/*0x4842*/      lsls r0, r2, #0x1e
/*0x4844*/      bmi jump_4830
/*0x4846*/      add r1, r5
/*0x4848*/      movs r0, #0
/*0x484a*/      strb r0, [r1, #2]
/*0x484c*/      b jump_4830
            jump_484e:
/*0x484e*/      adds r1, r1, #1
/*0x4850*/      uxtb r1, r1
/*0x4852*/      cmp r1, #6
/*0x4854*/      blo jump_4836
/*0x4856*/      lsls r1, r2, #0x1e
/*0x4858*/      bpl jump_4872
/*0x485a*/      movs r1, #0
            jump_485c:
/*0x485c*/      add.w ip, r5, r1
/*0x486


         LogDebug,
            "  (no copy for +x private mapping {:?})",
            file_name
        );
        return false;
    }
    if private_mapping && (0o111 & stat.st_mode != 0) {
        // A private mapping of an executable file usually
        // indicates mapping data sections of object files.
        // Since we're already assuming those change very
        // infrequently, we can avoid copying the data
        // sections too.
        log!(
            LogDebug,
            "  (no copy for private mapping of +x {:?})",
            file_name
        );
        return false;
    }
    let can_read_file = access(file_name, AccessFlags::R_OK).is_ok();
    if !can_read_file {
        // It's possible for a tracee to mmap a file it doesn't have permission
        // to read, e.g. if a daemon opened the file and passed the fd over a
        // socket. We should copy the data now because we won't be able to read
        // it later. nscd does this.
        return true;
    }

    // XXX: using "can the euid of the rd process write this
    // file" as an approximation of whether the tracee can write
    // the file.  If the tracee is messing around with
    // set*[gu]id(), the real answer may be different.
    let can_write_file = access(file_name, AccessFlags::W_OK).is_ok();

    // Inside a user namespace, the real root user may be mapped to UID 65534.
    if !can_write_file && (0 == stat.st_uid || 65534 == stat.st_uid) {
        // We would like to DEBUG_ASSERT this, but on Ubuntu 13.10,
        // the file /lib/i386-linux-gnu/libdl-2.17.so is
        // writeable by root for unknown reasons.
        // DEBUG_ASSERT(!(prot & PROT_WRITE));
        //
        // Mapping a file owned by root: we don't care if this
        // was a PRIVATE or SHARED mapping, because unless the
        // program is disastrously buggy or unlucky, the
        // mapping is effectively PRIVATE.  Bad luck can come
        // from this program running during a system update,
        // or a user being added, which is probably less
        // frequent than even system updates.
        //
        // XXX what about the fontconfig cache files? */
        log!(LogDebug, "  (no copy for root-owned {:?})", file_name);
        return false;
    }
    if private_mapping {
        // Some programs (at least Firefox) have been observed
        // to use cache files that are expected to be
        // consistent and unchanged during the bulk of
        // execution, but may be destroyed or mutated at
        // shutdown in preparation for the next session.  We
        // don't otherwise know what to do with private
        // mappings, so err on the safe side.
        //
        // XXX: could get into dirty heuristics here like
        // trying to match "cache" in the filename ...
        log!(
            LogDebug,
            "  copying private mapping of non-system -x {:?}",
            file_name
        );
        return true;
    }
    if !(0o222 & stat.st_mode != 0) {
        // We couldn't write the file because it's read only.
        // But it's not a root-owned file (therefore not a
        // system file), so it's likely that it could be
        // temporary.  Copy it.
        log!(LogDebug, "  copying read-only, non-system file");
        return true;
    }
    if !can_write_file {
        // mmap'ing another user's (non-system


ssing definitions
//================================================================================

// add fakes if ports are not used
#ifndef PCINT_INPUT_PORT0
#define PCINT_INPUT_PORT0 0
#else
#define PCINT_INPUT_PORT0_USED
#endif
#ifndef PCINT_INPUT_PORT1
#define PCINT_INPUT_PORT1 0
#else
#define PCINT_INPUT_PORT1_USED
#endif
#ifndef PCINT_INPUT_PORT2
#define PCINT_INPUT_PORT2 0
#else
#define PCINT_INPUT_PORT2_USED
#endif
#ifndef PCINT_INPUT_PORT3
#define PCINT_INPUT_PORT3 0
#else
#define PCINT_INPUT_PORT3_USED
#endif


 ];
	var geometry = new THREE.BufferGeometry();

	var geometry2 = object.geometry.clone();

	geometry2.mergeVertices();
	geometry2.computeFaceNormals();

	var vertices = geometry2.vertices;
	var faces = geometry2.faces;
	var numEdges = 0;

	for ( var i = 0, l = faces.length; i < l; i ++ ) {

		var face = faces[ i ];

		for ( var j = 0; j < 3; j ++ ) {

			edge[ 0 ] = face[ keys[ j ] ];
			edge[ 1 ] = face[ keys[ ( j + 1 ) % 3 ] ];
			edge.sort( sortFunction );

			var key = edge.toString();

			if ( hash[ key ] === undefined ) {

				hash[ key ] = { vert1: edge[ 0 ], vert2: edge[ 1 ], face1: i, face2: undefined };
				numEdges ++;

			} else {

				hash[ key ].face2 = i;

			}

		}

	}

	var coords = new Float32Array( numEdges * 2 * 3 );

	var index = 0;

	for ( var key in hash ) {

		var h = hash[ key ];

		if ( h.face2 === undefined || faces[ h.face1 ].normal.dot( faces[ h.face2 ].normal ) < 0.9999 ) { // hardwired const OK

			var vertex = vertices[ h.vert1 ];
			coords[ index ++ ] = vertex.x;
			coords[ index ++ ] = vertex.y;
			coords[ index ++ ] = vertex.z;

			vertex = vertices[ h.vert2 ];
			coords[ index ++ ] = vertex.x;
			coords[ index ++ ] = vertex.y;
			coords[ index ++ ] = vertex.z;

		}

	}

	geometry.addAttribute( 'position', new THREE.BufferAttribute( coords, 3 ) );

	THREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color } ), THREE.LinePieces );

	this.matrix = object.matrixWorld;
	this.matrixAutoUpdate = false;

};

THREE.EdgesHelper.prototype = Object.create( THREE.Line.prototype );
THREE.EdgesHelper.prototype.constructor = THREE.EdgesHelper;

// File:src/extras/helpers/FaceNormalsHelper.js

/**
 * @author mrdoob / http://mrdoob.com/
 * @author WestLangley / http://github.com/WestLangley
*/

THREE.FaceNormalsHelper = function ( object, size, hex, linewidth ) {

	this.object = object;

	this.size = ( size !== undefined ) ? size : 1;

	var color = ( hex !== undefined ) ? hex : 0xffff00;

	var width = ( linewidth !== undefined ) ? linewidth : 1;

	var geometry = new THREE.Geometry();

	var faces = this.object.geometry.faces;

	for ( var i = 0, l = faces.length; i < l; i ++ ) {

		geometry.vertices.push( new THREE.Vector3(), new THREE.Vector3() );

	}

	THREE.Line.call( this, geometry, new THREE.LineBasicMaterial( { color: color, linewidth: width } ), THREE.LinePieces );

	this.matrixAutoUpdate = false;

	this.normalMatrix = new THREE.Matrix3();

	this.update();

};

THREE.FaceNormalsHelper.prototype = Object.create( THREE.Line.prototype );
THREE.FaceNormalsHelper.prototype.constructor = THREE.FaceNormalsHelper;

THREE.FaceNormalsHelper.prototype.update = function () {

	var vertices = this.geometry.vertices;

	var object = this.object;
	var objectVertices = object.geometry.vertices;
	var objectFaces = object.geometry.faces;
	var objectWorldMatrix = object.matrixWorld;

	object.updateMatrixWorld( true );

	this.normalMatrix.get


.append( '?' );
            href.append( REPORT_ID_HTTP_PARAM );
            href.append( '=' );
            href.append( reportId );
        }
        if ( StringUtils.isNotEmpty( entryName ) )
        {
            if ( hasParam )
            {
                href.append( '&' );
            }
            else
            {
                href.append( '?' );
            }
            href.append( ENTRY_NAME_HTTP_PARAM );
            href.append( '=' );
            href.append( entryName );
        }
        if ( StringUtils.isNotEmpty( processState ) )
        {
            if ( hasParam )
            {
                href.append( '&' );
            }
            else
            {
                href.append( '?' );
            }
            href.append( PROCESS_STATE_HTTP_PARAM );
            href.append( '=' );
            href.append( processState );
        }
        if ( StringUtils.isNotEmpty( dispatch ) )
        {
            if ( hasParam )
            {
                href.append( '&' );
            }
            else
            {
                href.append( '?' );
            }
            href.append( DISPATCH_HTTP_PARAM );
            href.append( '=' );
            href.append( dispatch );
        }
        return href.toString();
    }

    /**
     * Generate URL to call documentArchive.jsp.
     *
     * <pre>
     *  ex : http://localhost:8080/xdocreport-webapp/documentArchive.jsp
     * </pre>
     *
     * @param request
     * @param reportId
     * @param dispatch
     * @return
     */
    public static String generateDocumentArchiveJSPURL( HttpServletRequest request )
    {
        StringBuilder href = new StringBuilder( request.getContextPath() );
        href.append( '/' );
        href.append( DOCUMENT_ARCHIVE_JSP );
        return href.toString();
    }

    public static String formatDate( Date date )
    {
        return formatDate( date, DEFAULT_DATE_PATTERN );
    }

    public static String formatDate( Date date, String outputPattern )
    {
        if ( date == null )
        {
            return "";
        }

        SimpleDateFormat sdf = new SimpleDateFormat( outputPattern );
        return sdf.format( date );
    }
}
/**
 * Copyright (C) 2011-2015 The XDocReport Team <xdocreport@googlegroups.com>
 *
 * All rights reserved.
 *
 * Permission is hereby granted, free  of charge, to any person obtaining
 * a  copy  of this  software  and  associated  documentation files  (the
 * "Software"), to  deal in  the Software without  restriction, including
 * without limitation  the rights to  use, copy, modify,  merge, publish,
 * distribute,  sublicense, and/or sell  copies of  the Software,  and to
 * permit persons to whom the Software  is furnished to do so, subject to
 * the following conditions:
 *
 * The  above  copyright  notice  and  this permission  notice  shall  be
 * included in all copies or substantial portions of the Software.
 *
 * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
 * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
 * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package fr.opensagres.odfdom.converter.pdf.internal.stylable;

import com.lowagie.text.Element;

import fr.opensagres.odfdom.converter.pdf.internal.styles.Style;

public interface IStylableElement
{
    void applyStyles( Style style );

    Style getLastStyleApplied();

    IStyl


JG6gH2baxAqgHpr4bqAeOzhuoB5PYG6gH8OAbqAfulrECqAf-nrECqAevvrECqAeaBqgH89EbqAeW2BuoB6qbsQKoB4OtsQKoB-C9sQKoB_-esQKoB9-fsQKoB8qpsQKoB-ulsQKoB-qxsQKoB5m1sQKoB763sQKoB_jCsQKoB_vCsQLYBwHSCC4IgOGAEBABGB8yB6qCgOCfgAE6DIDAA4CAhICAlK7gA0i9_cE6WO-Jl9if9okDsQl1Naj8JISv5YAKAZgLAcgLAdoMEQoLEPDU2dvD99Ti_wESAgEDqg0CRlLIDQHYEwyIFAPQFQGYFgH4FgGAFwGyFwIYAboXAjgBshgQCgXAltC2AxICg1UYZiIBANAYAQ&sigh=9GsizXqfEzc" data-jcp-cpu_label="heavy_ad_intervention_cpu" data-jcp-net_label="heavy_ad_intervention_network">(function(){'use strict';/*  Copyright The Closure Library Authors. SPDX-License-Identifier: Apache-2.0 */ var l=this||self;var n,p;a:{for(var q=["CLOSURE_FLAGS"],r=l,u=0;u<q.length;u++)if(r=r[q[u]],r==null){p=null;break a}p=r}var v=p&&p[610401301];n=v!=null?v:!1;var w;const x=l.navigator;w=x?x.userAgentData||null:null;function y(a){return n?w?w.brands.some(({brand:b})=>b&&b.indexOf(a)!=-1):!1:!1}function z(a){var b;a:{if(b=l.navigator)if(b=b.userAgent)break a;b=""}return b.indexOf(a)!=-1};function A(){return n?!!w&&w.brands.length>0:!1}function B(){return A()?y("Chromium"):(z("Chrome")||z("CriOS"))&&!(A()?0:z("Edge"))||z("Silk")};!z("Android")||B();B();z("Safari")&&(B()||(A()?0:z("Coast"))||(A()?0:z("Opera"))||(A()?0:z("Edge"))||(A()?y("Microsoft Edge"):z("Edg/"))||A()&&y("Opera"));var C=Symbol();var D={},E={};function F(a){return!(!a||typeof a!=="object"||a.s!==E)}function G(a){return a!==null&&typeof a==="object"&&!Array.isArray(a)&&a.constructor===Object}function H(a){return!Array.isArray(a)||a.length?!1:(a[C]|0)&1?!0:!1};const I=BigInt(Number.MIN_SAFE_INTEGER),J=BigInt(Number.MAX_SAFE_INTEGER);let K;function L(a,b){return M(b)}function M(a){switch(typeof a){case "number":return isFinite(a)?a:String(a);case "bigint":return a>=I&&a<=J?Number(a):String(a);case "boolean":return a?1:0;case "object":if(a)if(Array.isArray(a)){if(H(a))return}else if(a!=null&&a instanceof Uint8Array){let b="",e=0;const d=a.length-10240;for(;e<d;)b+=String.fromCharCode.apply(null,a.subarray(e,e+=10240));b+=String.fromCharCode.apply(null,e?a.subarray(


= client._get_commit_by_job_id(run_1.job_id)
# A: this should be the same commit as we got back from the commit API immediately after running run_1 above!
assert job_id_1_commit.ref.hash == my_branch_last_commit.ref.hash

# Q: if we tagged a dataset as compliant in the past (even if not a current version anymore), can we find it?
target_tag = client.get_tag(my_compliance_dataset_tag)
rows = client.query(run_id_query, ref=target_tag).to_pylist()
# A: this should return the original run_id, which is 1!
assert rows == [{'run_id': 1}]

### LET'S DO SOME DEBUGGING AND MAINTENANCE NOW

# after a few more runs, an error happens
# we simulate it by injecting 5 as the run_id, which will trigger a Python error during the run
run_5 = client.run(
    project_dir='./my_project',
    ref=my_branch_name,
    cache='off',
    parameters={'run_id': 5}
)
print(f"Bauplan faulty run completed: {run_5.job_id, run_5.job_status}")
assert run_5.job_status != 'SUCCESS' and run_5.job_id is not None
# remember: by default, any run that involves a WRITE (like ours) will be automatically run
# transactionally by the system - i.e. a temporary branch is started from the current branch
# and all the intermediate artifacts are materialized there (in case the error is in model 2
# but the first one run fine).

# Let's also verify our current development branch is untouched by this failed run, as expected
assert client.query(run_id_query, ref=my_branch_name).to_pylist() == [{'run_id': 2}]

# ok, ok, after long pondering, we realized we really like our compliant dataset more
# then the current one. We will now REVERT our table to the state corresponding to the compliant version!

revert_ref = client.revert_table(
    table=my_test_table_name,
    source_ref=target_tag,
    into_branch=my_branch_name,
    # add a memo, which gets appended to the standard commit message!
    commit_body=f'Revert to tag {my_compliance_dataset_tag}',
    replace=True
)
# Q: is the revert op itself tracked?
my_branch_last_commit = client.get_commits(my_branch_name, limit=1)[0]
# A: yes, the last commit should be this op
print(f"Last commmit recorded on the branch was {my_branch_last_commit.message}")
# Q: did we really revert?
rows = client.query(run_id_query, ref=my_branch_name).to_pylist()
# A: the HEAD on the branch is back to run_id 1
assert rows == [{'run_id': 1}]

### CLEAN-UP

# make sure we delete our branch
client.delete_branch(my_branch_name)