== 22707
NzEy 22708
IGR5cw== 22709
IHBpZXI= 22710
aWd1ZQ== 22711
IGFzc29jaWF0ZQ== 22712
IGludGlt 22713
bm90aWZ5 22714
KHt9LA== 22715
ODI4 22716
IFJlcHJlc2VudA== 22717
cGhldA== 22718
c2V1ZG8= 22719
64uI64uk 22720
LlBvc2l0aW9u 22721
IGNsb3N1cmU= 22722
KGNsYXNz 22723
CXRpbWU= 22724
IE9yYW5nZQ== 22725
X29wcw== 22726
IHBvcHVw 22727
IEltcHJv 22728
X3NlY3JldA== 22729
IEV1 22730
LnNldExheW91dA== 22731
dWxseQ== 22732
IHNjcmV3 22733
IFNpemVk 22734
IENPTVA= 22735
IG5vdGlmaWNhdGlvbnM= 22736
VHJhbnNmZXI= 22737
RW1pdHRlcg== 22738
KG9sZA== 22739
bGV0aWM= 22740
NDkz 22741
IC0KCg== 22742
IHBhbmlj 22743
NzE1 22744
IExDRA== 22745
cnVsZXM= 22746
IGFmZmFpcnM= 22747
IEZpbGw= 22748
X0lSUQ== 22749
OTEy 22750
YXR0YWNobWVudA== 22751
IHZvbQ== 22752
PGJ1dHRvbg== 22753
NTk1 22754
IHRleHRz 22755
IGFjdGl2YXRlZA== 22756
LmFjY2Vzcw== 22757
KHJlYWRlcg== 22758
VGVt 22759
IGNvcm9u 22760
cm9waA== 22761
RE1JTg== 22762
IGVtZXJnZWQ= 22763
IGluZmxhdGVy 22764
IEluZGVwZW5kZW50 22765
b3Jpb3Vz 22766
IERlbGhp 22767
Njcy 22768
IGdseXBoaWNvbg== 22769
IENhcmw= 22770
U2k= 22771
IGV4cGVyaW1lbnRhbA== 22772
LmJhcg== 22773
SUFO 22774
IHNxbGl0ZQ== 22775
Y2Npw7Nu 22776
OTA0 22777
X0JBQ0s= 22778
LG5hbWU= 22779
aG9ydA== 22780
IHRlbnM= 22781
NTQ5 22782
6rM= 22783
dXNpdmU= 22784
IGdlbnVpbmU= 22785
IGJ1Y2s= 22786
L2Rpdg== 22787
LnJvb20= 22788
X05FVw== 22789
ZXN0YWRv 22790
IEFyaw== 22791
b2NvbHM= 22792
LmdlbmVyYXRl 22793
dG91Y2g= 22794
Zml4ZWQ= 22795
ICco 22796
IHJlZmVycmluZw== 22797
IG92ZXJ3aGVsbWluZw== 22798
KGxldA== 22799
IGZ1ZQ== 22800
NjIz 22801
X0VOVg== 22802
d29tYW4= 22803
RmlndXJl 22804
YW5pbWF0ZQ== 22805
IE1vcnQ= 22806
IGxvbmdlc3Q= 22807
Y29sbg== 22808
VE0= 22809
Ol8= 22810
cmllbA== 22811
LE4= 22812
IFJBTQ== 22813
IGp1c3RpZnlDb250ZW50


igmoid();
                    break;
                case ActivationType.LeakyReLU:
                    act = new LeakyReLU();
                    break;
                case ActivationType.PReLU:
                    act = new PReLU();
                    break;
                case ActivationType.RReLU:
                    act = new RReLU();
                    break;
                case ActivationType.SeLU:
                    act = new Selu();
                    break;
                case ActivationType.Softmax:
                    act = new Softmax();
                    break;
                case ActivationType.Softplus:
                    act = new Softplus();
                    break;
                case ActivationType.SoftSign:
                    act = new SoftSign();
                    break;
                default:
                    break;
            }

            return act;
        }
    }
}


ign 3
G14090:
        and	$4, 63, $4 	# [1-]
        subq	$4, TypeNIL, $4 	# [1]
        bne	$4, APPLYSUPPRA	# J. if apply args supplied not nil. [1]
        and	$3, 1, $3 	# keep just the apply bit! [0di]
        sll	$3, 17, $3 	# reposition the apply bit [1]
        subq	$12, 8, $12 	# Pop off the null applied arg. [1]
        bic	$20, $3, $20 	# Blast the apply arg bit away [1]
        stl	$20, PROCESSORSTATE_CONTROL($14)	# Reset the stored cr bit [0di]
        br	$31, G14091	# [1]
.end DoEntryRestAccepted
/* End of Halfword operand from stack instruction - DoEntryRestAccepted */
.align 5
.globl CarCdrInternal
.ent CarCdrInternal 13
.align 3
CarCdrInternal:
        lda	$30, -8($30)	#  [1-]
	.frame $30, 8, $0
        extll	$2, $31, $17 	# [1]
        and	$1, 63, $5 	# Strip off any CDR code bits. [1]
        cmpeq	$5, TypeList, $6 	# [1]
.align 3
G14145:
        beq	$6, G14102	# [1]
/* Here if argument TypeList */
/* Memory Read Internal */
G14103:
        addq	$17, $14, $7 	# [0di]
        s4addq	$7, $31, $21 	# [1]
        ldq_u	$20, 0($7)	#  [1di]
        subq	$17, $24, $5 	# Stack cache offset [1-]
        ldq	$8, PROCESSORSTATE_DATAREAD_MASK($14)	#  [0di]
        cmpult	$5, $25, $6 	# In range? [1-]
        ldl	$21, 0($21)	#  [0di]
        extbl	$20, $7, $20 	# [1-]
        bne	$6, G14105	# [0di]
G14104:
        lda	$7, 240	#  [1-]
        srl	$8, $20, $8 	# [1]
        srl	$7, $20, $7 	# [1]
        extll	$21, 0, $21 	# [1]
        blbs	$8, G14107	# [1-]
G14114:
        subl	$17, $2, $5 	# [0di]
        bne	$5, G14098	# CAR forwarded, must CDR the hard way [1]
        bis	$20, $31, $1 	# [0di]
        bis	$21, $31, $2 	# [1]
.align 3
G14100:
        and	$20, 192, $5 	# Extract CDR code. [1]
        bne	$5, G14116	# [1]
/* Here if argument 0 */
        addq	$17, 1, $21 	# Address of next position is CDR [1-]
        bis	$31, TypeList, $20 	# [1]
.align 3
G14115:
.align 3
G14101:
.align 3
G14099:
        lda	$30, 8($30)	#  [1]
        ret	$31, ($0), 1	# [0di]
.align 3
G14102:
        cmpeq	$5, TypeNIL, $6 	# [1-]
.align 3
G14146:
        beq	$6, G14132	# [1]
/* Here if argument TypeNIL */
        ldl	$21, PROC


.9 10-8.2 58.8-8.2 43.9 0 45.4 .1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5 .2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5 .9c-68.1 .8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z"],
    "bluetooth": [448, 512, [], "f293", "M292.6 171.1L249.7 214l-.3-86 43.2 43.1m-43.2 219.8l43.1-43.1-42.9-42.9-.2 86zM416 259.4C416 465 344.1 512 230.9 512S32 465 32 259.4 115.4 0 228.6 0 416 53.9 416 259.4zm-158.5 0l79.4-88.6L211.8 36.5v176.9L138 139.6l-27 26.9 92.7 93-92.7 93 26.9 26.9 73.8-73.8 2.3 170 127.4-127.5-83.9-88.7z"],
    "bluetooth-b": [320, 512, [], "f294", "M196.5 260l92.63-103.3L143.1 0v206.3l-86.11-86.11-31.41 31.41 108.1 108.4L25.61 368.4l31.41 31.41 86.11-86.11L145.8 512l148.6-148.6-97.91-103.3zm40.86-102.1l-49.98 49.98-.338-100.3 50.31 50.32zM187.4 313l49.98 49.98-50.31 50.32 .338-100.3z"],
    "bootstrap": [576, 512, [], "f836", "M333.5 201.4c0-22.1-15.6-34.3-43-34.3h-50.4v71.2h42.5C315.4 238.2 333.5 225 333.5 201.4zM517 188.6c-9.5-30.9-10.9-68.8-9.8-98.1c1.1-30.5-22.7-58.5-54.7-58.5H123.7c-32.1 0-55.8 28.1-54.7 58.5c1 29.3-.3 67.2-9.8 98.1c-9.6 31-25.7 50.6-52.2 53.1v28.5c26.4 2.5 42.6 22.1 52.2 53.1c9.5 30.9 10.9 68.8 9.8 98.1c-1.1 30.5 22.7 58.5 54.7 58.5h328.7c32.1 0 55.8-28.1 54.7-58.5c-1-29.3 .3-67.2 9.8-98.1c9.6-31 25.7-50.6 52.1-53.1v-28.5C542.7 239.2 526.5 219.6 517 188.6zM300.2 375.1h-97.9V136.8h97.4c43.3 0 71.7 23.4 71.7 59.4c0 25.3-19.1 47.9-43.5 51.8v1.3c33.2 3.6 55.5 26.6 55.5 58.3C383.4 349.7 352.1 375.1


1f43)) > 0x6c00) printf("C4 load: Dest unusual! It's %04x\n", READ_WORD(Memory.C4RAM+0x1f45));
#endif
	// memmove required: Can overlap arbitrarily [Neb]
        memmove(Memory.C4RAM+(READ_WORD(Memory.C4RAM+0x1f45)&0x1fff),
                S9xGetMemPointer(READ_3WORD(Memory.C4RAM+0x1f40)),
                READ_WORD(Memory.C4RAM+0x1f43));
    }
}

int16 C4SinTable[512] = {
	    0,    402,    804,   1206,   1607,   2009,   2410,   2811,
      3211,   3611,   4011,   4409,   4808,   5205,   5602,   5997,
      6392,   6786,   7179,   7571,   7961,   8351,   8739,   9126,
      9512,   9896,  10278,  10659,  11039,  11416,  11793,  12167,
     12539,  12910,  13278,  13645,  14010,  14372,  14732,  15090,
     15446,  15800,  16151,  16499,  16846,  17189,  17530,  17869,
     18204,  18537,  18868,  19195,  19519,  19841,  20159,  20475,
     20787,  21097,  21403,  21706,  22005,  22301,  22594,  22884,
     23170,  23453,  23732,  24007,  24279,  24547,  24812,  25073,
     25330,  25583,  25832,  26077,  26319,  26557,  26790,  27020,
     27245,  27466,  27684,  27897,  28106,  28310,  28511,  28707,
     28898,  29086,  29269,  29447,  29621,  29791,  29956,  30117,
     30273,  30425,  30572,  30714,  30852,  30985,  31114,  31237,
     31357,  31471,  31581,  31685,  31785,  31881,  31971,  32057,
     32138,  32214,  32285,  32351,  32413,  32469,  32521,  32568,
     32610,  32647,  32679,  32706,  32728,  32745,  32758,  32765,
     32767,  32765,  32758,  32745,  32728,  32706,  32679,  32647,
     32610,  32568,  32521,  32469,  32413,  32351,  32285,  32214,
     32138,  32057,  31971,  31881,  31785,  31685,  31581,  31471,
     31357,  31237,  31114,  30985,  30852,  30714,  30572,  30425,
     30273,  30117,  29956,  29791,  29621,  29447,  29269,  29086,
     28898,  28707,  28511,  28310,  28106,  27897,  27684,  27466,
     27245,  27020,  26790,  26557,  26319,  26077,  25832,  25583,
     25330,  25073,  24812,  24547,  24279,  24007,  23732,  23453,
     23170,  22884,  22594,  22301,  22005,  217


 ret;
}

void CSpecialFeatsView::OnHeroic()
{
    TrainAllFeats(m_heroicSelectionViews);
}

void CSpecialFeatsView::OnRacial()
{
    TrainAllFeats(m_racialSelectionViews);
}

void CSpecialFeatsView::OnIconic()
{
    TrainAllFeats(m_iconicSelectionViews);
}

void CSpecialFeatsView::OnEpicArcane()
{
    TrainAllFeats(m_epicSelectionViewsArcane);
}

void CSpecialFeatsView::OnEpicDivine()
{
    TrainAllFeats(m_epicSelectionViewsDivine);
}

void CSpecialFeatsView::OnEpicMartial()
{
    TrainAllFeats(m_epicSelectionViewsMartial);
}

void CSpecialFeatsView::OnEpicPrimal()
{
    TrainAllFeats(m_epicSelectionViewsPrimal);
}

void CSpecialFeatsView::OnSpecial()
{
    TrainAllFeats(m_specialSelectionViews);
}

void CSpecialFeatsView::OnFavor()
{
    TrainAllFeats(m_favorSelectionViews);
}

void CSpecialFeatsView::TrainAllFeats(std::vector<CFeatSelectionDialog *>& feats)
{
    // try and train one of each feat (only if it can be trained)
    for (size_t i = 0; i < feats.size(); ++i)
    {
        feats[i]->DoLeftClickAction();
    }
}

LRESULT CSpecialFeatsView::OnRevokeFeats(WPARAM, LPARAM)
{
    CPoint p;
    GetCursorPos(&p);
    CWnd* pWnd = WindowFromPoint(p);
    if (pWnd != NULL)
    {
        UINT nID = pWnd->GetDlgCtrlID();
        switch (nID)
        {
        case IDC_STATIC_HEROIC: RevokeAllFeats(m_heroicSelectionViews); break;
        case IDC_STATIC_RACIAL: RevokeAllFeats(m_racialSelectionViews); break;
        case IDC_STATIC_ICONIC: RevokeAllFeats(m_iconicSelectionViews); break;
        case IDC_STATIC_EPIC_ARCANE:   RevokeAllFeats(m_epicSelectionViewsArcane); break;
        case IDC_STATIC_EPIC_DIVINE:   RevokeAllFeats(m_epicSelectionViewsDivine); break;
        case IDC_STATIC_EPIC_MARTIAL:   RevokeAllFeats(m_epicSelectionViewsMartial); break;
        case IDC_STATIC_EPIC_PRIMAL:   RevokeAllFeats(m_epicSelectionViewsPrimal); break;
        case IDC_STATIC_SPECIAL:    RevokeAllFeats(m_specialSelectionViews); break;
        case IDC_STATIC_FAVOR:  RevokeAllFeats(m_favorSelectionViews); break;
        }
    }
    return 0;
}

void CSpecialFeatsView::RevokeAllFeats(std::vector<CFeatSelectionDialog *>& feats)
{
    // try and revoke one of each feat (only if it has been trained)
    for (size_t i = 0; i < feats.size(); ++i)
    {
        feats[i]->DoRightClickAction();
    }
}
// IconButton.cpp
//

#include "stdafx.h"
#include "IconButton.h"
#include "Character.h"
#include "GlobalSupportFunctions.h"

namespace
{
    COLORREF f_selectedColor = RGB(128, 0, 0);
}

#pragma warning(push)
#pragma warning(disable: 4407) // warning C4407: cast between different pointer to member representations, compiler may generate incorrect code
BEGIN_MESSAGE_MAP(CIconButton, CStatic)
    //{{AFX_MSG_MAP(CIconButton)
    ON_WM_ERASEBKGND()
    ON_WM_PAINT()
    ON_WM_MOUSEMOVE()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
#pragma warning(pop)

CIconButton::CIconButton() :
    m_bSelected


    }

    return new Container(
      height: double.infinity,
      child: child,
      width: double.infinity,
    );
  }
}
import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

class IndexController extends ChangeNotifier {
  static const int NEXT = 1;
  static const int PREVIOUS = -1;
  static const int MOVE = 0;

  late Completer _completer;

  late int index;
  bool? animation;
  int? event;

  Future move(int index, {bool animation: true}) {
    this.animation = animation;
    this.index = index;
    this.event = MOVE;
    _completer = new Completer();
    notifyListeners();
    return _completer.future;
  }

  Future next({bool animation: true}) {
    this.event = NEXT;
    this.animation = animation ?? true;
    _completer = new Completer();
    notifyListeners();
    return _completer.future;
  }

  Future previous({bool animation: true}) {
    this.event = PREVIOUS;
    this.animation = animation ?? true;
    _completer = new Completer();
    notifyListeners();
    return _completer.future;
  }

  void complete() {
    if (!_completer.isCompleted) {
      _completer.complete();
    }
  }
}import 'package:flutter/material.dart';

abstract class PickerLocalizationsBase {
  final Locale? locale;
  const PickerLocalizationsBase(this.locale);
  Object? getItem(String key);
  String? get cancelText => getItem('cancelText') as String;
  String? get confirmText => getItem('confirmText') as String;
  List? get ampm => getItem('ampm') as List;
  List? get months => getItem('months') as List;
  List? get monthsLong => getItem('monthsLong') as List;
}

/// localizations
class PickerLocalizations extends PickerLocalizationsBase {
  static PickerLocalizations _static = PickerLocalizations(null);
  const PickerLocalizations(Locale? locale) : super(locale);

  @override
  Object? getItem(String key) {
    Map? localData;
    if (locale != null) {
      localData = localizedValues[locale!.languageCode];
    }
    if (localData == null) return localizedValues['en']![key];
    return localData[key];
  }

  static PickerLocalizations of(BuildContext context) {
    return Localizations.of<PickerLocalizations>(
            context, PickerLocalizations) ??
        _static;
  }

  /// 注册自定义语言
  ///
  /// Register custom language
  static registerCustomLanguage(String name,
      {String? cancelText,
      String? confirmText,
      List<String>? ampm,
      List<String>? months,
      List<String>? monthsLong}) {
    if (name.isEmpty) return;
    if (ampm != null && ampm.length != 2) {
      throw Exception('ampm array length must be 2');
    }
    if (months != null && months.length != 12) {
      throw Exception('months array length must be 12');
    }
    if (monthsLong != null && monthsLong.length != 12) {
      throw Exception('monthsLong array length must be 12');
    }
    if (!languages.contains(name)) {
      languages.add(name);
    }


Z0
	VGF2P8AFFINEQB $0, Z1, Z0, Z0
	VPERMB Z4, Z2, Z2
	VGF2P8AFFINEQB $0, Z1, Z2, Z2
	VPERMB Z0, Z3, Z1
	VPERMB Z2, Z3, Z2
	RET

GLOBL expandAVX512_6_inShuf0<>(SB), RODATA, $0x40
DATA  expandAVX512_6_inShuf0<>+0x00(SB)/8, $0x0706050403020100
DATA  expandAVX512_6_inShuf0<>+0x08(SB)/8, $0x0706050403020100
DATA  expandAVX512_6_inShuf0<>+0x10(SB)/8, $0x0706050403020100
DATA  expandAVX512_6_inShuf0<>+0x18(SB)/8, $0x0706050403020100
DATA  expandAVX512_6_inShuf0<>+0x20(SB)/8, $0x0706050403020100
DATA  expandAVX512_6_inShuf0<>+0x28(SB)/8, $0x0706050403020100
DATA  expandAVX512_6_inShuf0<>+0x30(SB)/8, $0xffffffffffffffff
DATA  expandAVX512_6_inShuf0<>+0x38(SB)/8, $0xffffffffffffffff

GLOBL expandAVX512_6_mat0<>(SB), RODATA, $0x40
DATA  expandAVX512_6_mat0<>+0x00(SB)/8, $0x0101010101010202
DATA  expandAVX512_6_mat0<>+0x08(SB)/8, $0x0202020204040404
DATA  expandAVX512_6_mat0<>+0x10(SB)/8, $0x0404080808080808
DATA  expandAVX512_6_mat0<>+0x18(SB)/8, $0x1010101010102020
DATA  expandAVX512_6_mat0<>+0x20(SB)/8, $0x2020202040404040
DATA  expandAVX512_6_mat0<>+0x28(SB)/8, $0x4040808080808080
DATA  expandAVX512_6_mat0<>+0x30(SB)/8, $0x0000000000000000
DATA  expandAVX512_6_mat0<>+0x38(SB)/8, $0x0000000000000000

GLOBL expandAVX512_6_inShuf1<>(SB), RODATA, $0x40
DATA  expandAVX512_6_inShuf1<>+0x00(SB)/8, $0x0f0e0d0c0b0a0908
DATA  expandAVX512_6_inShuf1<>+0x08(SB)/8, $0x0f0e0d0c0b0a0908
DATA  expandAVX512_6_inShuf1<>+0x10(SB)/8, $0x0f0e0d0c0b0a0908
DATA  expandAVX512_6_inShuf1<>+0x18(SB)/8, $0x0f0e0d0c0b0a0908
DATA  expandAVX512_6_inShuf1<>+0x20(SB)/8, $0x0f0e0d0c0b0a0908
DATA  expandAVX512_6_inShuf1<>+0x28(SB)/8, $0x0f0e0d0c0b0a0908
DATA  expandAVX512_6_inShuf1<>+0x30(SB)/8, $0xffffffffffffffff
DATA  expandAVX512_6_inShuf1<>+0x38(SB)/8, $0xffffffffffffffff

GLOBL expandAVX512_6_inShuf2<>(SB), RODATA, $0x40
DATA


128, 0.1279296875, 0.2529296875, 0.509765625, 0.759765625, false, false},
		["128-RedButton-VisibilityOff-Highlight"] = {128, 128, 0.2548828125, 0.3798828125, 0.001953125, 0.251953125, false, false},
		["128-RedButton-VisibilityOff-Pressed"] = {128, 128, 0.2548828125, 0.3798828125, 0.255859375, 0.505859375, false, false},
		["128-RedButton-VisibilityOff"] = {128, 128, 0.1279296875, 0.2529296875, 0.255859375, 0.505859375, false, false},
		["128-RedButton-VisibilityOn-Disabled"] = {128, 128, 0.3818359375, 0.5068359375, 0.001953125, 0.251953125, false, false},
		["128-RedButton-VisibilityOn-Highlight"] = {128, 128, 0.3818359375, 0.5068359375, 0.255859375, 0.505859375, false, false},
		["128-RedButton-VisibilityOn-Pressed"] = {128, 128, 0.3818359375, 0.5068359375, 0.509765625, 0.759765625, false, false},
		["128-RedButton-VisibilityOn"] = {128, 128, 0.2548828125, 0.3798828125, 0.509765625, 0.759765625, false, false},
		["128-RedButton-Cart-Add-Disabled"] = {128, 122, 0.6357421875, 0.7607421875, 0.001953125, 0.240234375, false, false},
		["128-RedButton-Cart-Add-Pressed"] = {128, 122, 0.7626953125, 0.8876953125, 0.001953125, 0.240234375, false, false},
		["128-RedButton-Cart-Add"] = {128, 122, 0.5087890625, 0.6337890625, 0.001953125, 0.240234375, false, false},
		["128-RedButton-Cart-Minus-Disabled"] = {128, 122, 0.5087890625, 0.6337890625, 0.486328125, 0.724609375, false, false},
		["128-RedButton-Cart-Minus-Pressed"] = {128, 122, 0.5087890625, 0.6337890625, 0.728515625, 0.966796875, false, false},
		["128-RedButton-Cart-Minus"] = {128, 122, 0.5087890625, 0.6337890625, 0.244140625, 0.482421875, false, false},
		["128-RedButton-ShoppingCart-Disabled"] = {128, 122, 0.7626953125, 0.8876953125, 0.244140625, 0.482421875, false, false},
		["128-RedButton-ShoppingCart-Pressed"] = {128, 122, 0.6357421875, 0.7607421875, 0.486328125, 0.724609375, false, false},
		["128-RedButton-ShoppingCart"] = {128, 122, 0.6357421875, 0.7607421875, 0.244140625, 0.482421875, false, false},
		["128-RedButton-Cart-Add-Highlight"] = {89, 117, 0.0009765625, 0.087890625, 0.763671875, 0.9921875, false, false},
		["128-RedButton-Cart-Minus-Highlight"] = {89, 117, 0.1279296875, 0.21484375, 0.763671875, 0.9921875, false, false},
		["128-RedButton-ShoppingCart-Highlight"] = {89, 117, 0.2548828125, 0.341796875, 0.763671


9551 Q427.4355 82.3145 427.5293 82.9082 L426.498 83.0488 Q426.4355 82.5801 426.0918 82.3145 Q425.7637 82.0332 425.1387 82.0332 Q424.4199 82.0332 424.1074 82.2832 Q423.7949 82.5176 423.7949 82.8457 Q423.7949 83.0488 423.9199 83.2051 Q424.0605 83.377 424.3262 83.4863 Q424.4824 83.5488 425.2637 83.752 Q426.3887 84.0645 426.8262 84.252 Q427.2637 84.4395 427.5137 84.7988 Q427.7637 85.1582 427.7637 85.7051 Q427.7637 86.2363 427.4512 86.7051 Q427.1543 87.1582 426.5762 87.4238 Q425.998 87.6738 425.2637 87.6738 Q424.0449 87.6738 423.4043 87.1738 Q422.7793 86.6582 422.6074 85.6738 Z" style="stroke:none; clip-path:url(#clipPath21_b1d33ed3-6bc6-4a68-bbb9-0d74a35600d1);"/></g><g style="font-family:sans-serif; text-rendering:optimizeLegibility;" transform="matrix(1.3333,0,0,1.3333,948.3309,346.6012) translate(-668.9148,-166.9841)"><path d="M4.8594 100.3457 L5.8906 100.4863 Q5.7188 101.5488 5.0156 102.1582 Q4.3125 102.7676 3.2969 102.7676 Q2.0156 102.7676 1.2344 101.9395 Q0.4688 101.0957 0.4688 99.5332 Q0.4688 98.5332 0.7969 97.7832 Q1.1406 97.0176 1.8125 96.6426 Q2.5 96.2676 3.3125 96.2676 Q4.3125 96.2676 4.9531 96.7832 Q5.6094 97.2832 5.7969 98.2363 L4.7656 98.3926 Q4.625 97.7676 4.25 97.4551 Q3.875 97.127 3.3438 97.127 Q2.5469 97.127 2.0469 97.7051 Q1.5469 98.2676 1.5469 99.502 Q1.5469 100.7676 2.0312 101.3301 Q2.5156 101.8926 3.2812 101.8926 Q3.9062 101.8926 4.3125 101.5176 Q4.7344 101.1426 4.8594 100.3457 ZM6.7656 102.627 L6.7656 94.0332 L7.8281 94.0332 L7.8281 102.627 L6.7656 102.627 ZM13.5254 101.8613 Q12.9316 102.3613 12.3848 102.5645 Q11.8535 102.7676 11.2285 102.7676 Q10.1973 102.7676 9.6504 102.2676 Q9.1035 101.7676 9.1035 100.9863 Q9.1035 100.5332 9.3066 100.1582 Q9.5098 99.7676 9.8535 99.5488 Q10.1973 99.3145 10.6191 99.2051 Q10.916 99.1113 11.5566 99.0332 Q12.8223 98.8926 13.4316 98.6738 Q13.4316 98.4551 13.4316 98.4082 Q13.4316 97.752 13.1348 97.4863 Q12.7285 97.1426 11.9316 97.1426 Q11.1973 97.1426 10.8379 97.4082 Q10.4785 97.6582 10.3066 98.3145 L9.2754 98.1738 Q9.416 97.5176 9.7441 97.1113 Q10


+7,16+8,16+9,16+10,16+11,16+12	; 2de helft 2de octaaf
	dc.b	32+1,32+2,32+3,32+4,32+5,32+6		; 1ste helft 3de octaaf
	dc.b	32+7,32+8,32+9,32+10,32+11,32+12	; 2de helft 3de octaaf
;		************
	dc.b	48+1,48+2,48+3,48+4,48+5,48+6		; 1ste helft 4de octaaf
	dc.b	48+7,48+8,48+9,48+10,48+11,48+12	; 2de helft 4de octaaf
	dc.b	64+1,64+2,64+3,64+4,64+5,64+6		; 1ste helft 5de octaaf
	dc.b	64+7,64+8,64+9,64+10,64+11,64+12	; 2de helft 5de octaaf
	dc.b	80+1,80+2,80+3,80+4,80+5,80+6		; 1ste helft 6de octaaf
	dc.b	80+7,80+8,80+9,80+10,80+11,80+12	; 2de helft 6de octaaf
;		*************
	dc.b	96+1,96+2,96+3,96+4,96+5,96+6		; 1ste helft 7de octaaf
	dc.b	96+7,96+8,96+9,96+10,96+11,96+12	; 2de helft 7de octaaf
	dc.b	112+1,112+2,112+3,112+4,112+5,112+6	; 1ste helft 8de octaaf
	dc.b	112+7,112+8,112+9,112+10,112+11,112+12	; 2de helft 8de octaaf
;
;
;
	even
key_2_note
	ds.b	3	; xxx,ESC,1
	dc.b	16+7	; 2
	dc.b	16+9	; 3
	dc.b	16+11	; 4
	ds.b	1	; 5	***
	dc.b	32+2	; 6
	dc.b	32+4	; 7
	ds.b	1	; 8	***
	dc.b	32+7	; 9
	dc.b	32+9	; 0
	dc.b	32+11	; -
	ds.b	3	; =,Backspace,TAB

	dc.b	16+6	; Q
	dc.b	16+8	; W
	dc.b	16+10	; E
	dc.b	16+12	; R
	dc.b	32+1	; T
	dc.b	32+3	; Y
	dc.b	32+5	; U
	dc.b	32+6	; I
	dc.b	32+8	; O
	dc.b	32+10	; P
	dc.b	32+12	; [
	ds.b	4	; ],Return,Control,A

	dc.b	2	; S
	dc.b	4	; D
	ds.b	1	; F	***
	dc.b	7	; G
	dc.b	9	; H
	dc.b	11	; J
	ds.b	1	; K	***
	dc.b	16+2	; L
	dc.b	16+4	; ;
	ds.b	4	; ',#,Shift links,\

	dc.b	1	; Z
	dc.b	3	; X
	dc.b	5	; C
	dc.b	6	; V
	dc.b	8	; B
	dc.b	10	; N
	dc.b	12	; M
	dc.b	16+1


data/shaoli/compilers/ccbuilder-compilers/gcc-3c32575e5b6370270d38a80a7fa8eaa144e083d0/bin/gcc -O1: 0 */
/* CKSMof /zdata/shaoli/compilers/ccbuilder-compilers/gcc-3c32575e5b6370270d38a80a7fa8eaa144e083d0/bin/gcc -O1: 517FD43 */
/* EXITof /zdata/shaoli/compilers/ccbuilder-compilers/gcc-3c32575e5b6370270d38a80a7fa8eaa144e083d0/bin/gcc -O2: 0 */
/* CKSMof /zdata/shaoli/compilers/ccbuilder-compilers/gcc-3c32575e5b6370270d38a80a7fa8eaa144e083d0/bin/gcc -O2: 517FD43 */
/* EXITof /zdata/shaoli/compilers/ccbuilder-compilers/gcc-3c32575e5b6370270d38a80a7fa8eaa144e083d0/bin/gcc -O3: 0 */
/* CKSMof /zdata/shaoli/compilers/ccbuilder-compilers/gcc-3c32575e5b6370270d38a80a7fa8eaa144e083d0/bin/gcc -O3: 517FD43 */
/* EXITof /zdata/shaoli/compilers/ccbuilder-compilers/gcc-3c32575e5b6370270d38a80a7fa8eaa144e083d0/bin/gcc -Os: 0 */
/* CKSMof /zdata/shaoli/compilers/ccbuilder-compilers/gcc-3c32575e5b6370270d38a80a7fa8eaa144e083d0/bin/gcc -Os: 517FD43 */
/* EXITof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -O0 : 0 */
/* CKSMof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -O0 : 517FD43 */
/* EXITof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -O1 : 0 */
/* CKSMof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -O1 : 517FD43 */
/* EXITof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -O2 : 0 */
/* CKSMof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -O2 : 517FD43 */
/* EXITof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -O3 : 0 */
/* CKSMof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -O3 : 517FD43 */
/* EXITof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -Os : 0 */
/* CKSMof /zdata/shaoli/compilers/ccbuilder-compilers/clang-8eb12f6775d288eece9a2bf090d2675c025bf457/bin/clang -Os : 412F2C5 */

/* Bisection: ebe741fad07e3fda388d0fa44f256a07429cce6a */


		"modifiedBy": null,
					"modifiedDate": null,
					"network": "STAGING",
					"activationStatus": "IN_PROGRESS",
					"activationType": "ACTIVATE",
					"percentComplete": 0,
					"validation": {
						"warnings": [
							{
								"detail": "A request was submitted to activate the CA set version on production without activating on staging first. While this is allowed, it is highly recommended to first deploy the CA set version on staging network and ensure that there are no issues in serving the traffic.",
								"title": "Request was submitted to activate the CA set version on production without activating on staging first.",
								"type": "/mtls-edge-truststore/error-types/activate-version-on-production-without-activating-on-staging"
							}
						]
					},
					"version": 1,
					"versionLink": "/mtls-edge-truststore/v2/ca-sets/199/versions/1"
				}`,
			expectedResponse: &ActivateCASetVersionResponse{
				ActivationID:     84707,
				ActivationLink:   "/mtls-edge-truststore/v2/ca-sets/199/versions/1/activations/84707",
				CASetID:          "199",
				CASetName:        "test1",
				CASetLink:        "/mtls-edge-truststore/v2/ca-sets/199",
				CreatedBy:        "jsmith@example.com",
				CreatedDate:      test.NewTimeFromString(t, "2023-06-01T23:02:29.876589Z"),
				FailureReason:    nil,
				ModifiedBy:       nil,
				ModifiedDate:     nil,
				Network:          "STAGING",
				ActivationStatus: "IN_PROGRESS",
				ActivationType:   "ACTIVATE",
				PercentComplete:  0,
				Version:          1,
				VersionLink:      "/mtls-edge-truststore/v2/ca-sets/199/versions/1",
				Validation: &Validation{
					Warnings: []Warning{
						{
							Detail: "A request was submitted to activate the CA set version on production without activating on staging first. While this is allowed, it is highly recommended to first deploy the CA set version on staging network and ensure that there are no issues in serving the traffic.",
							Title:  "Request was submitted to activate the CA set version on production without activating on staging first.",
							Type:   "/mtls-edge-truststore/error-types/activate-version-on-production-without-activating-on-staging",
						},
					},
				},
			},
		},
		"missing required request param - validation error": {
			request: ActivateCASetVersionRequest{},
			withError: func(t *testing.T, err error) {
				assert.Equal(t, "activate ca set version failed: struct validation: CASetID: cannot be blank\nNetwork: cannot be blank\nVersion: cannot be blank", err.Error())
			},
		},
		"invalid network - validation error": {
			request: ActivateCASetVersionRequest{
				CASetID: "199",
				Version: 1,
				Network: "foo",
			},
			withError: func(t *testing.T, err error) {
				assert.Equal(t, "activate ca set version failed: struct validation: Network: value 'foo' is invalid. Must be one of: 'STAGING' or 'PRODUCTION'", err.Error())
			},
		},
		"500 internal server error": {
			request: ActivateCASetVersionRequest{
				CASetID: "199",
				Version: 1,
				Network: ActivationNetworkProduction,
			},
			responseStatus: http.StatusInternalServerError,
			responseBody: `
{
    "type


        },
      },
    ],
  },
  create(context) {
    return {
      'Directive[name.value=deprecated]'(node) {
        const argName = context.options[0]?.argumentName || 'deletionDate';
        const deletionDateNode = node.arguments.find(arg => arg.name.value === argName);

        if (!deletionDateNode) {
          context.report({ node: node.name, messageId: MESSAGE_REQUIRE_DATE });
          return;
        }
        const deletionDate = valueFromNode(deletionDateNode.value);
        const isValidDate = DATE_REGEX.test(deletionDate);

        if (!isValidDate) {
          context.report({ node: node.name, messageId: MESSAGE_INVALID_FORMAT });
          return;
        }
        let [day, month, year] = deletionDate.split('/');
        day = day.toString().padStart(2, '0');
        month = month.toString().padStart(2, '0');
        const deletionDateInMS = Date.parse(`${year}-${month}-${day}`);

        if (Number.isNaN(deletionDateInMS)) {
          context.report({
            node: node.name,
            messageId: MESSAGE_INVALID_DATE,
            data: {
              deletionDate,
            },
          });
          return;
        }

        const canRemove = Date.now() > deletionDateInMS;

        if (canRemove) {
          context.report({
            node: node.name,
            messageId: MESSAGE_CAN_BE_REMOVED,
            data: {
              nodeName: node.parent.name.value,
            },
          });
        }
      },
    };
  },
};

export default rule;
import { Rhum } from "../../deps.ts";
import { Drash } from "../../../mod.ts";
import members from "../../members.ts";

Rhum.testPlan("services/http_service_test.ts", () => {
  Rhum.testSuite("accepts()", () => {
    Rhum.testCase(
      "accepts the single type if it is present in the header",
      () => {
        const request = members.mockRequest("/", "get", {
          headers: {
            Accept: "application/json;text/html",
          },
        });
        let actual;
        const service = new Drash.Services.HttpService();
        actual = service.accepts(request, "application/json");
        Rhum.asserts.assertEquals("application/json", actual);
        actual = service.accepts(request, "text/html");
        Rhum.asserts.assertEquals("text/html", actual);
      },
    );
    Rhum.testCase(
      "rejects the single type if it is not present in the header",
      () => {
        const request = members.mockRequest("/", "get", {
          headers: {
            Accept: "application/json;text/html",
          },
        });
        let actual;
        const service = new Drash.Services.HttpService();
        actual = service.accepts(request, "text/xml");
        Rhum.asserts.assertEquals(false, actual);
      },
    );
    Rhum.testCase(
      "accepts the first of multiple types if it is present in the header",
      () => {
        const request = members.mockRequest("/", "get", {
          headers: {
            Accept: "application/json;text/html",
          },
        });
        let actual;
        const service = new Drash.Services.HttpService();
        actual = service.accepts(request, ["application/json", "text/xml"]);
        Rhum.asserts.assertEquals("application/json", actual);
      },
    );
    Rhum.testCase(
      "accepts the second of multiple types if it is present in the header",
      () => {
        const request = members.mockRequest("/", "get", {
          headers: {


 {
  position: absolute;
  z-index: 1;
  display: block;
  overflow: hidden;
  width: 100%;
  content: " "
}

.aplayer .aplayer-lrc:after {
  bottom: 0;
  height: 33%;
  background: linear-gradient(180deg,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,.8));
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#00ffffff",endColorstr="#ccffffff",GradientType=0)
}

.aplayer .aplayer-lrc p {
  font-size: 12px;
  color: #666;
  line-height: 16px!important;
  height: 16px!important;
  padding: 0!important;
  margin: 0!important;
  transition: all .5s ease-out;
  opacity: .4;
  overflow: hidden
}

.aplayer .aplayer-lrc p.aplayer-lrc-current {
  opacity: 1;
  overflow: visible;
  height: auto!important;
  min-height: 16px
}

.aplayer .aplayer-lrc.aplayer-lrc-hide {
  display: none
}

.aplayer .aplayer-lrc .aplayer-lrc-contents {
  width: 100%;
  transition: all .5s ease-out;
  -webkit-user-select: text;
  -moz-user-select: text;
  -ms-user-select: text;
  user-select: text;
  cursor: default
}

.aplayer .aplayer-list {
  overflow: auto;
  transition: all .5s ease;
  will-change: height;
  display: none;
  overflow: hidden
}

.aplayer .aplayer-list.aplayer-list-hide {
  max-height: 0!important
}

.aplayer .aplayer-list ol {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow-y: auto
}

.aplayer .aplayer-list ol::-webkit-scrollbar {
  width: 5px
}

.aplayer .aplayer-list ol::-webkit-scrollbar-thumb {
  border-radius: 3px;
  background-color: #eee
}

.aplayer .aplayer-list ol::-webkit-scrollbar-thumb:hover {
  background-color: #ccc
}

.aplayer .aplayer-list ol li {
  position: relative;
  height: 32px;
  line-height: 32px;
  padding: 0 15px;
  font-size: 12px;
  border-top: 1px solid #e9e9e9;
  cursor: pointer;
  transition: all .2s ease;
  overflow: hidden;
  margin: 0
}

.aplayer .aplayer-list ol li:first-child {
  border-top: none
}

.aplayer .aplayer-list ol li:hover {
  background: #efefef
}

.aplayer .aplayer-list ol li.aplayer-list-light {
  background: #e9e9e9
}

.aplayer .aplayer-list ol li.aplayer-list-light .aplayer-list-cur {
  display: inline-block
}

.aplayer .aplayer-list ol li .aplayer-list-cur {
  display: none;
  width: 3px;
  height: 22px;
  position: absolute;
  left: 0;
  top: 5px;
  cursor: pointer
}

.aplayer .aplayer-list ol li .aplayer-list-index {
  color: #666;
  margin-right: 12px;
  cursor: pointer
}

.aplayer .aplayer-list ol li .aplayer-list-author {
  color: #666;
  float: right;
  cursor: pointer
}

.aplayer .aplayer-notice {
  opacity: 0;
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: tr


 r: 161.0 / 255.0, g: 22.0  / 255.0, b: 52.0  / 255.0, a: 1.0 };
static DARK_GREEN: Color  = Color { r: 25.0  / 255.0, g: 69.0  / 255.0, b: 35.0  / 255.0, a: 1.0 };
static GREEN: Color       = Color { r: 15.0  / 255.0, g: 128.0 / 255.0, b: 55.0  / 255.0, a: 1.0 };
static BRIGHT_BLUE: Color = Color { r: 101.0 / 255.0, g: 233.0 / 255.0, b: 228.0 / 255.0, a: 1.0 };
static DARK_ORANGE: Color = Color { r: 186.0 / 255.0, g: 98.0  / 255.0, b: 20.0  / 255.0, a: 1.0 };
static ORANGE: Color      = Color { r: 255.0 / 255.0, g: 138.0 / 255.0, b: 0.0   / 255.0, a: 1.0 };
static WHITE: Color       = Color { r: 238.0 / 255.0, g: 243.0 / 255.0, b: 244.0 / 255.0, a: 1.0 };
static VERY_GRAY: Color   = Color { r: 29.0  / 255.0, g: 30.0  / 255.0, b: 32.0  / 255.0, a: 1.0 };
static DARK_GRAY: Color   = Color { r: 54.0  / 255.0, g: 56.0  / 255.0, b: 49.0  / 255.0, a: 1.0 };
static LIGHT_GRAY: Color  = Color { r: 76.0  / 255.0, g: 79.0  / 255.0, b: 84.0  / 255.0, a: 1.0 };
static STONE_GRAY: Color  = Color { r: 67.0  / 255.0, g: 59.0  / 255.0, b: 62.0  / 255.0, a: 1.0 };
static LIGHT_BROWN: Color = Color { r: 158.0 / 255.0, g: 134.0 / 255.0, b: 100.0 / 255.0, a: 1.0 };

static MONSTER_COLOR: Color = LIGHT_BROWN;
static TRAP_COLOR: Color = ORANGE;

#[derive(Clone, Debug, PartialEq)]
enum GameState {
    Playing(usize),
    Lost,
    NextLevel(usize),
    Win,
}

#[derive(Clone, Debug, PartialEq)]
struct Tile {
    pos: Vector,
    glyph: char,
    color: Color,
    blocks: bool,
}

impl Tile {
    fn wall(x: usize, y: usize) -> Tile {
        return Tile {
            pos: Vector::new(x as f32, y as f32),
            glyph: 219 as char,
            color: WHITE,
            blocks: false,
        };
    }
}

#[derive(Clone, Copy, Debug, PartialEq)]
enum Status {
    Berserk,
}

type Hp = i32;

type EntityId = usize;

#[derive(Clone, Copy, Debug, PartialEq)]
enum Arrow {
    Left,
    Right,
    Up,
    Down,
}

#[derive(Clone, Copy, Debug, PartialEq)]
enum Trap {
    Berserk,
    Kill,
    Bump,
    Teleport,
    CountDown(u8),
    Arrow(Arrow),
    NextLevel,
    Win,
}

#[derive(Clone, Copy, Debug, PartialEq)]
enum MonsterType {
    Gol,
    Rook,
}

#[derive(Clone, Copy, Debug, PartialEq)]
struct Monster {
    hp: Hp,
    max_hp: Hp,
    status: Option<Status>,
    typ: MonsterType,
}

#[derive(Clone, Copy, Debug, PartialEq)]
struct Player {
    hp: Hp,
    max_hp: Hp,
    status: Option<Status>,
}

#[derive(Clone, Copy, Debug, PartialEq)]
enum EntityType {
    Trap(Trap),
    Monster(Monster),
    Player(Player),
}

impl EntityType {
    fn monster(max_hp: Hp, typ: MonsterType) -> EntityType {
        return EntityType::Mo


before{content:counter(header2) "." counter(header3) "." counter(header4) " "}.doc-content>h2:before,.doc-content>h3:before,.doc-content>h4:before{color:#888;font-weight:400}.doc-heading{position:relative}.doc-anchor{display:none}.doc-toc{display:-webkit-box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:-ms-flex;display:flex;border-top:1px solid #eee;border-bottom:2px solid #eee}.doc-toc h2{position:relative;background:#f8f8f8;padding:10px 0 10px 20px;margin-bottom:0;font-size:16px}.doc-toc h2 span{background:#0e90d2;display:inline-block;padding:8px 10px 8px 20px;font-weight:400;color:#fff}.doc-toc h2:before{content:"";width:0;position:absolute;right:0;top:0;bottom:0}.doc-toc-bd{-webkit-box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1;padding:10px 10px 10px 20px}.doc-toc-bd>ul{padding:0}.doc-toc-bd .md-toc{counter-reset:toc-1;margin-bottom:0}.doc-toc-bd .md-toc>li{line-height:1.8}.doc-toc-bd .md-toc ul{margin-top:5px}.doc-toc-bd .md-toc ul a{color:#555}.doc-toc-bd .md-toc ul a:hover{color:#0e90d2}.doc-toc-bd .md-toc li{list-style:none}.doc-toc-bd .md-toc li:before{color:#8c8c8c}.doc-toc-bd .md-toc>li{counter-increment:toc-1}.doc-toc-bd .md-toc>li:before{content:counter(toc-1) '. '}.doc-toc-bd .md-toc>li>ul{counter-reset:toc-2}.doc-toc-bd .md-toc>li>ul>li{counter-increment:toc-2}.doc-toc-bd .md-toc>li>ul>li:before{content:counter(toc-1) '.' counter(toc-2) ' '}.doc-toc-bd .am-parent>a:after{display:inline-block;font-family:FontAwesome;font-weight:400;font-style:normal;vertical-align:baseline;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"";margin-left:5px;color:#999}.doc-toc-bd .am-open>a:after{content:""}.issue-list a{position:relative;padding-right:60px !important}.issue-list [class*=am-icon-]:before{font-size:10px;color:#999;margin-right:5px}.issue-list .am-badge{position:absolute;right:5px;top:15px}#doc-widget-frame{width:320px;height:480px;display:block;margin-left:auto;margin-right:auto;overflow-x:hidden;-webkit-box-shadow:0 0 5px 2px rgba(0,0,0,.1);box-shadow:0 0 5px 2px rgba(0,0,0,.1)}#doc-widget-frame::-webkit-scrollbar{display:none}.amz-sidebar .am-nav>li>a{color:#777;-webkit-transition:.15s;transition:.15s}.amz-sidebar .am-nav>li.am-active a{background:#f5f5f5;color:#333}.amz-footer{padding:20px 0 10px;background:#555;color:#999}.amz-footer a{color:#999}.amz-footer a:hover{color:#eee}.amz-footer ul{list-style:none;margin:0;padding:0}.amz-footer .amz-fd{display:inline-block;opacity:.85;margin-right:15p


 @see EpisodeSort
 */
@Serializable
sealed class EpisodeRange {
    /**
     * 是否知道具体集数
     */
    open val isKnown: Boolean get() = true

    /**
     * 已知的集数列表. 若未知 (例如 [unknownSeason]), 则返回空序列.
     */
    abstract val knownSorts: Sequence<EpisodeSort>

    /**
     * 是否肯定为空.
     */
    abstract fun isEmpty(): Boolean

    @Serializable
    internal data object Empty : EpisodeRange() {
        override val knownSorts: Sequence<EpisodeSort>
            get() = emptySequence()

        override fun isEmpty(): Boolean = true

        override fun toString(): String = "EpisodeRange(empty)"
    }

    @Serializable
    internal class Single(
        val value: EpisodeSort,
    ) : EpisodeRange() {
        override val knownSorts: Sequence<EpisodeSort>
            get() = sequenceOf(value)

        override fun isEmpty(): Boolean = false

        override fun toString(): String = "$value..$value"

        override fun hashCode(): Int = value.hashCode()
        override fun equals(other: Any?): Boolean {
            if (this === other) return true
            if (other is Range && other.start == other.end) {
                return value == other.start
            }
            if (other !is Single) return false
            other
            return value == other.value
        }
    }

    @Serializable
    internal class Range(
        val start: EpisodeSort,
        val end: EpisodeSort,
    ) : EpisodeRange() {
        override val knownSorts: Sequence<EpisodeSort>
            get() = sequence {
                if (!(start is EpisodeSort.Normal && end is EpisodeSort.Normal)) {
                    yield(start)
                    yield(end)
                    return@sequence
                }
                var curr = start.number
                if (start.isPartial) {
                    yield(start)
                    curr += 0.5f
                }
                while (curr < end.number) {
                    yield(EpisodeSort.Normal(curr))
                    curr += 1f
                }
                yield(EpisodeSort.Normal(end.number))
            }

        override fun isEmpty(): Boolean {
            if (start is EpisodeSort.Normal && end is EpisodeSort.Normal) {
                return end < start
            }
            return false
        }

        override fun toString(): String = "$start..$end"

        override fun equals(other: Any?): Boolean {
            if (this === other) return true
            if (other is Single && other.value == start && other.value == end) return true
            if (other !is Range) return false
            other
            return start == other.start && end == other.end
        }

        override fun hashCode(): Int {
            var result = start.hashCode()
            result = 31 * result + end.hashCode()
            return result
        }
    }

    /**
     * @see combined
     */
    @Serializable
    class Combined internal constructor(
        val first: EpisodeRange,
        val second: EpisodeRange,
    ) : EpisodeRange() {
        override val knownSorts: Sequence<EpisodeSort>
            get() = sequence {
                yieldAll(first.knownSorts)
                yieldAll(second.knownSorts)
            }

        override fun isEmpty(): Boolean = first.isEmpty() && second.isEmpty()

        override fun toString(): String = buildString {
            if (first is Single) append(first.value) else append(first)
            append('+')
            if (second is Single) append(second.value) else append(second)
        }

        private fun flatten(): Sequence<EpisodeRange> {
            return sequence {


ithDirective).GetProperty(nameof(PropertyClassWithDirective.Prop1));

            var template = new PropertyGraphFieldTemplate(parent, propInfo, TypeKind.OBJECT);
            template.Parse();
            template.ValidateOrThrow();
            Assert.AreEqual(1, template.AppliedDirectives.Count());

            var appliedDirective = template.AppliedDirectives.First();
            Assert.AreEqual(typeof(DirectiveWithArgs), appliedDirective.DirectiveType);
            Assert.AreEqual(new object[] { 55, "property arg" }, appliedDirective.Arguments);
        }

        [Test]
        public void InvalidTypeExpression_ThrowsException()
        {
            var obj = Substitute.For<IObjectGraphTypeTemplate>();
            obj.Route.Returns(new SchemaItemPath("[type]/Item0"));
            obj.InternalFullName.Returns("Item0");

            var parent = obj;
            var propInfo = typeof(SimplePropertyObject).GetProperty(nameof(SimplePropertyObject.InvalidTypeExpression));

            var template = new PropertyGraphFieldTemplate(parent, propInfo, TypeKind.OBJECT);
            template.Parse();

            Assert.Throws<GraphTypeDeclarationException>(() =>
            {
                template.ValidateOrThrow();
            });
        }
    }
}


('should have a working implicitly labelled select', () => {
      expect(element.all(by.tagName('label')).get(10)).toContainText('Why are you interested in a11y?');
      expect(element.all(by.tagName('select')).get(0)).toHaveValue('Curiosity');
      testValueDecorator(4, 'Curiosity');
    });

    it('should have a working explicitly labelled input', () => {
      let testVal = 'Some text';
      expect(element.all(by.tagName('label[for="inputexplicit"]')).first()).toHaveText('Label for input:');
      let input = element.all(by.css('#inputexplicit')).get(0);
      expect(input).toHaveValue('');
      sendKeys(input, testVal);
      expect(input).toHaveValue(testVal);
      testValueDecorator(5, testVal);
    });

    it('should have a working input with hidden label', () => {
      let testVal = 'Some text';
      expect(element.all(by.tagName('label.visually-hidden')).first()).toHaveText('Search:');
      let input = element.all(by.css('#inputsearch')).first();
      expect(input).toHaveValue('');
      sendKeys(input, testVal);
      expect(input).toHaveValue(testVal);
      testValueDecorator(6, testVal);
    });

    it('should have a working input with aria-label', () => {
      let testVal = 'Some text';
      let input = element.all(by.css('input[aria-label="Filter:"')).first();
      expect(input).toHaveValue('');
      sendKeys(input, testVal);
      expect(input).toHaveValue(testVal);
      testValueDecorator(7, testVal);
    });

    it('should have a working editable div with label', () => {
      let testVal = 'Value';
      expect(element.all(by.tagName('div.col-xs-6 label')).first()).toHaveText('Write in this labeled div:');
      let input = element.all(by.css('div.col-xs-6 div.edit-box')).first();
      expect(input).toHaveText('');
      sendKeys(input, testVal);
      expect(input).toHaveText(testVal);
    });

    it('should have a working wrapped input', () => {
      let testVal = 'Test';
      expect(element.all(by.tagName('div.col-xs-6 label span')).first()).toHaveText('Write in this wrapped input:');
      let input = element.all(by.css('div.input-group input')).first();
      expect(input).toHaveValue('');
      sendKeys(input, testVal);
      expect(input).toHaveValue(testVal);
    });

  });

  describe('A11y Cookbook managing focus', () => {

    beforeAll(() => {
      jasmine.addMatchers(matchers);
      browser.get('');
      element.all(by.tagName('a')).get(1).click();
    });

    it('should have the correct page heading', () => {
      expect('h2').toHaveTextByCss('Managing focus');
    });

    it('should have the correct sections', () => {
      let headings = element.all(by.tagName('h3'));
      expect(headings.get(0)).toHaveText('The focus outline');
      expect(headings.get(1)).toHaveText('Focus flow');
      expect(headings.get(2)).toHaveText('Focusing custom controls');
      expect(headings.get(3)).toHaveText('Internal focus in a component');
    });

    it('should have the focus outline elements', () => {
      expect(element.all(by.cssContainingText('label', 'Focus me for the standard browser outline:')).first()).toBePresent();
      expect(element.all(by.cssContainingText('label', 'Focus me for a new and unusual outline:')).first()).toBePresent();
    });

    it('should have the focus flow elements', () => {


using AdaptiveCards;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Connector;
using Microsoft.Bot.Connector.Authentication;
using Microsoft.Bot.Schema;
using Microsoft.Bot.Schema.Teams;
using System;
using System.IO;
using System.Threading.Tasks;

namespace Augmentech.Teams.Notify
{
    class Program
    {
        static async Task Main(string[] args)
        {

            //The Bot Service Url needs to be dynamically stored and fetched from the Team.
            //This Url is present in every payload which Teams sends to the Bot after the Bot is added to the Team.
            //Recommendation is to store the serviceUrl from the bot payload and later re-use it to send proactive messages.
            string serviceUrl = "https://smba.trafficmanager.net/emea/";

            //From the Bot Channel Registration
            string botClientID = "<client-id>";
            string botClientSecret = "<client-secret>";

            //Teams channel id in which to create the post.
            string teamsChannelId = "19:76682c58fc414f6daf32938dee564a72@thread.tacv2";

            MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);
            var con


2a1 1 0 00-2 0 10 10 0 0016.88 7.23V21a1 1 0 002 0v-4.5a1 1 0 00-.97-.99ZM12 2a10 10 0 00-6.88 2.77V3a1 1 0 00-2 0v4.5a1 1 0 001 1h4.5a1 1 0 000-2h-2.4A8 8 0 0120 12a1 1 0 002 0A10 10 0 0012 2Zm0 11a1 1 0 001-1V9a1 1 0 00-2 0v3a1 1 0 001 1Z"/></svg>';
  static const String sync_slash =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M19.88 15.5h-4.5a1 1 0 000 2h2.4A8 8 0 0112 20a8.08 8.08 0 01-3.12-.63l-1.49 1.49A9.83 9.83 0 0012 22a10 10 0 006.88-2.77V21a1 1 0 002 0v-4.5a1 1 0 00-1-1Zm-1.57-8.4 1.43-1.43 2-2a1 1 0 10-1.42-1.42l-2 2A9.89 9.89 0 0012 2a10 10 0 00-6.88 2.77V3a1 1 0 00-2 0v4.5a1 1 0 001 1h4.5a1 1 0 000-2h-2.4a7.93 7.93 0 0110.67-.81l-11.2 11.2A7.93 7.93 0 014 12a1 1 0 00-2 0 9.89 9.89 0 002.27 6.32l-2 2a1 1 0 000 1.42 1 1 0 001.42 0l2-2 1.43-1.43Zm1.06 1.78A8.08 8.08 0 0120 12a1 1 0 002 0 9.83 9.83 0 00-1.14-4.61Z"/></svg>';
  static const String syringe =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"><path fill="currentColor" d="M21.71 2.29a1 1 0 00-1.42 0l-2.12 2.12-.71-.7a1 1 0 00-1.41 0l-1.41 1.41-.71-.71a1 1 0 00-1.42 0l-7.77 7.78-.74-.7a1 1 0 00-1.38 1.41l3.53 3.54-1.73 1.74-.71-.72a1 1 0 00-1.42 1.42l2.83 2.83a1 1 0 00.71.29 1 1 0 00.71-.29 1 1 0 000-1.42l-.71-.7 1.74-1.74 3.53 3.53a1 1 0 00.71.3 1 1 0 00.7-1.71l-.7-.71 7.78-7.77a1 1 0 000-1.42l-.71-.71L20.29 8a1 1 0 000-1.41l-.7-.71 2.12-2.12a1 1 0 000-1.47ZM7.57 15l-1.42-1.39 1.41-1.42L9 13.61Zm2.82 2.83L9 16.44 10.39 15l1.42 1.42ZM13.22 15 9 10.78l4.24-4.24.71.7 3.53 3.54Zm4.24-7-1.41-1.46.71-.71.7.7.7.7Z"/></svg>';
  static const String table =
      '<svg xmlns="http://www.w3.org/


",
    burn: 0,
    conduct: 1,
};

elements.skibidi_aresium = {
    color: "#ad1051",
    behavior: [
    "XX|XX|XX",
    "M1 AND EX:10>brick_rubble,radiation|XX|M1 AND EX:10>brick_rubble,radiation",
    "XX|XX|XX"
],
    category: "states",
    temp: 100,
    tempHigh: 300,
    stateHigh: ["tnt", "molten_iron", "copper", "explosion"],
    burn: 0,
    conduct: 1,
};

elements.cold_brioche = {
    color: "#5f7a8c",
    behavior: behaviors.WALL,
    category: "states",
    temp: 5,
    tempHigh: 30,
    stateHigh: ["brioche"],
};

elements.fancy_flour = {
    color: "#f5e9b5",
    behavior: behaviors.POWDER,
    category: "powders",
    temp: 20,
    tempHigh: 70,
	burn: 70,
    stateHigh: ["fragrance", "smoke"],
};

elements.irradiate = {
    color: ["#2edb93", "#00ff00"],
    category: "tools",
    behavior:  [
    "XX|XX|XX",
    "XX|CH:radiation|XX",
    "XX|XX|XX",
],
};

elements.pyrane = {
    color: "#fc7c19",
    behavior: behaviors.GAS,
    hidden: true,
    category: "gases",
    state: "gas",
    temp: 50,
    tempLow: -20,
    stateLow: ["fyrium"],
    reactions: {
        "ash": { elem1: null, elem2:"pyric_nitrite" },
	    "dirt": { elem1:"pyrane", elem2:"fire" },
	    "hydrogen": { elem1:"hydroid", elem2:"hydroid" },
    }
};

elements.pyric_nitrite = {
    color: "#b3270e",
    behavior: behaviors.POWDER,
    behaviorOn: [
    "XX|XX|XX",
    "XX|EX:10>fire,nitrogen,stench,electric|XX",
    "XX|XX|XX",
],
    category: "powders",
    state: "solid",
    temp: 20,
    conduct: 1,
	desc: "not to be confused with iron pyrite or anything like that",
    reactions: {
        "iron": { elem1:"pyric_nitrite", elem2:"pyric_rust" },
		"oil": { elem1: null, elem2:"nitrol_fuel" },
		"electric": { elem1:["fire", "nitrogen", "stench", "electric", "explosion"], elem2:"fire" },
    }
};

elements.pyric_rust = {
    color: "#913e17",
    behavior: behaviors.POWDER,
    category: "powders",
    state: "solid",
    temp: 20,
    reactions: {
        "steel": { elem1: null, elem2:"tnt" }
    }
};

elements.fyrium = {
    color: "#ffa930",
    behavior: behaviors.WALL,
    category: "solids",
    state: "solid",
    temp: 20,
    tempHigh: 137,
    stateHigh: ["molten_fyrium"],
    breakInto: ["fire"],
};

elements.molten_fyrium = {
    color: "#ffffff",
    behavior: behaviors.MOLTEN,
    category: "states",
    temp: 137,
    tempLow: -20,
    stateLow: ["fyrium"],
    reactions: {
        "water": { elem1:"explosion", elem2: null }
    }
};

elements.nitrol_fuel = {
    color: "#4f180e",
    behavior: behaviors.LIQUID,
    category: "liquids",


ER
	bmi need_to_use_cache
	.endif
	str_ r0,memmap_tbl+16
	str_ r0,memmap_tbl+20
	str_ r0,memmap_tbl+24
	str_ r0,memmap_tbl+28
@
@
@	ldr r1,rombase
@	sub r1,r1,#0x4000
@	ldr r2,rommask
@	and r0,r2,r0,lsl#14
@	add r0,r1,r0
@	str r0,memmap_tbl+16
@	str r0,memmap_tbl+20
@	str r0,memmap_tbl+24
@	str r0,memmap_tbl+28
flush:		@update gb_pc & lastbank
	ldr_ r1,lastbank
	sub gb_pc,gb_pc,r1
	encodePC
	mov pc,lr

	.if MOVIEPLAYER
call_update_cache:
	ldr r0,=update_cache
	bx r0

need_to_use_cache:
	stmfd sp!,{r0-addy,lr}
	bl call_update_cache
	ldmfd sp!,{r0-addy,lr}
	b flush
	.endif

@@----------------------------------------------------------------------------
@map01234567_
@@----------------------------------------------------------------------------
@	mov r0,r0,lsl#1
@	ldr r1,rommask
@	and r0,r0,r1,lsr#14
@	str r0,bank0
@	add r1,r0,#1
@	str r1,bank1
@	ldr r1,=INSTANT_PAGES
@	ldr r0,[r1,r0,lsl#2]
@	subs r0,r0,#0x0000
@@	bmi need_to_use_cache
@	str r0,memmap_tbl
@	str r0,memmap_tbl+4
@	str r0,memmap_tbl+8
@	str r0,memmap_tbl+12
@	str r0,memmap_tbl+16
@	str r0,memmap_tbl+20
@	str r0,memmap_tbl+24
@	str r0,memmap_tbl+28
@
@
@@	ldr r1,rombase
@@	ldr r2,rommask
@@	and r0,r2,r0,lsl#15
@@	add r0,r1,r0
@@	str r0,memmap_tbl
@@	str r0,memmap_tbl+4
@@	str r0,memmap_tbl


mand: 'remove',
  describe: 'Elimina una nota',
  builder: {
    user: {
      describe: 'Usuario',
      demandOption: true,
      type: 'string',
    },
    title: {
      describe: 'Titulo de la nota',
      demandOption: true,
      type: 'string',
    },
  },
  handler(argv) {
    if (typeof argv.title === 'string' && typeof argv.user === 'string') {
      let User: UserNotes = new UserNotes(argv.user);
      if(User.removeNote(argv.title))
        User.updateUser();
    }
  },
});

yargs.command({
  command: 'modify',
  describe: 'Modifica una nota',
  builder: {
    user: {
      describe: 'Usuario',
      demandOption: true,
      type: 'string',
    },
    title: {
      describe: 'Titulo de la nota',
      demandOption: true,
      type: 'string',
    },
    body: {
      describe: 'Cuerpo de la nota',
      demandOption: true,
      type: 'string',
    },
  },
  handler(argv) {
    if (typeof argv.title === 'string' && typeof argv.user === 'string' && typeof argv.body === 'string') {
      let User: UserNotes = new UserNotes(argv.user);
      if(User.modifyNote(argv.body, argv.title))
        User.updateUser();
    }
  },
});

yargs.command({
  command: 'read',
  describe: 'Lee una nota',
  builder: {
    user: {
      describe: 'Usuario',
      demandOption: true,
      type: 'string',
    },
    title: {
      describe: 'Titulo de la nota',
      demandOption: true,
      type: 'string',
    },
  },
  handler(argv) {
    if (typeof argv.title === 'string' && typeof argv.user === 'string') {
      let User: UserNotes = new UserNotes(argv.user);
      User.readNote(argv.title);
    }
  },
});

yargs.command({
  command: 'list',
  describe: 'Lista las notas',
  builder: {
    user: {
      describe: 'Usuario',
      demandOption: true,
      type: 'string',
    },
  },
  handler(argv) {
    if (typeof argv.user === 'string') {
      let User: UserNotes = new UserNotes(argv.user);
      User.listTitles();
    }
  },
});

yargs.parse();

function colorGetter(color: string): TypeColor {
  let color_: TypeColor = "Blue"
  switch (color) {
    case "Blue":
      color_ = "Blue";
      break;
    case "Red":
      color_ = "Red";
      break;
    case "Tellow":
      color_ = "Yellow";
      break;
    case "Green":
      color_ = "Green";
      break;
    default:
      console.log("Color no valido, asigando azul como predeterminado");
      break;
  }
  return color_;
}
import { isValidProperties } from '../src/validateProperties';
describe('isValidateProperties', () => {
  it('should pass on valid properties', () => {
    const validProperties = {
      keyForString: 'stringValue',
      keyForNumber: 123,
      keyForArray: ['test', 456, { arrayObjKey1: 'arrayObjValue1' }],
      keyForObj: {
        objKey1: 'objValue1',
        objKey2: 'objValue2',
      },
    };
    expect(isValidProperties('property', validProperties)).toBe(true);
  });

  it('should fail on invalid properties with function as value', () => {
    const testFunc = (): string => {
      return 'test';
    };
    const inValidProperties = {


tion. Includes the function that will return the API key value.
 * @param middlewareConfig the plugin options (location of the parameter, name, and optional scheme)
 * @returns a function that processes the HTTP request and passes it on to the next handler
 */
export const httpApiKeyAuthMiddleware =
  <Input extends object, Output extends object>(
    pluginConfig: HttpApiKeyAuthResolvedConfig,
    middlewareConfig: HttpApiKeyAuthMiddlewareConfig,
  ): BuildMiddleware<Input, Output> =>
  (next) =>
  async (args) => {
    if (!HttpRequest.isInstance(args.request)) return next(args);

    const apiKey = pluginConfig.apiKey && (await pluginConfig.apiKey());

    // This middleware will not be injected if the operation has the @optionalAuth trait.
    // We don't know if we're the only auth middleware, so let the service deal with the
    // absence of the API key (or let other middleware do its job).
    if (!apiKey) {
      return next(args);
    }

    return next({
      ...args,
      request: {
        ...args.request,
        headers: {
          ...args.request.headers,
          ...(middlewareConfig.in === "header" && {
            // Set the header, even if it's already been set.
            [middlewareConfig.name.toLowerCase()]: middlewareConfig.scheme
              ? `${middlewareConfig.scheme} ${apiKey}`
              : apiKey,
          }),
        },
        query: {
          ...args.request.query,
          // Set the query parameter, even if it's already been set.
          ...(middlewareConfig.in === "query" && { [middlewareConfig.name]: apiKey }),
        },
      },
    });
  };

export const httpApiKeyAuthMiddlewareOptions: RelativeMiddlewareOptions = {
  name: "httpApiKeyAuthMiddleware",
  tags: ["APIKEY", "AUTH"],
  relation: "after",
  toMiddleware: "retryMiddleware",
  override: true,
};

export const getHttpApiKeyAuthPlugin = (
  pluginConfig: HttpApiKeyAuthResolvedConfig,
  middlewareConfig: HttpApiKeyAuthMiddlewareConfig,
): Pluggable<any, any> => ({
  applyToStack: (clientStack) => {
    clientStack.addRelativeTo(
      httpApiKeyAuthMiddleware(pluginConfig, middlewareConfig),
      httpApiKeyAuthMiddlewareOptions,
    );
  },
});
// Various utility types and type utilities for making working with TypeScript
// easier

export type Subtract<T extends K, K> = Omit<T, keyof K>;

export type FunctionPropertyNames<T> = {
  [K in keyof T]: T[K] extends Function ? K : never;
}[keyof T];

/**
 * Returns the types of the value of T
 */
export type Values<T extends {}> = T[keyof T];

export const EMPTY_ARRAY: readonly unknown[] = [];

export const notNull = <T>(x: T | null | undefined): x is T => x !== null;

// TypeScript by default only allows string in parseFloat, even though this works fine
export const parseFloat = (float: number | string): number =>
  typeof float === 'string' ? window.parseFloat(float) : float;
import { Utilities } from "../../Utils/TestUtils";
import { HomePageLocators } from "../Locators/CarsGuideHomePageLocators";
import { SearchCarsActions } from "./CarsGuideSearchCars";
import { UsedCarAction } from "./CarsGuideUsedCars";
import { LogUtils } from "../../LogManager/LogUtils";
let utilities: Utilities = Utilities.getUtilitiesInstane();
let homePageLocatos: HomePageLocators = HomePageLocators.getHomePageLocatorInstance();
export class HomePageActions {
  /**
   * Move to buy+sell menu.
   */
  public async moveToBuyAndSale() {
    await utilities.moveToElement(homePageLocatos.getBuySellMenuLocator());
    LogUtils.debugMessage("Move to buy+sale Menu",


irport",
      iata: "CNH",
      icoa: "KCNH",
      location_served: "Claremont, New Hampshire, United States"),
  "CNI":
      IataIcaoCodes(name: "Changhai Airport", iata: "CNI", icoa: "ZYCH", location_served: "Changhai, Liaoning, China"),
  "CNJ": IataIcaoCodes(
      name: "Cloncurry Airport", iata: "CNJ", icoa: "YCCY", location_served: "Cloncurry, Queensland, Australia"),
  "CNK": IataIcaoCodes(
      name: "Blosser Municipal Airport",
      iata: "CNK",
      icoa: "KCNK",
      location_served: "Concordia, Kansas, United States"),
  "CNL": IataIcaoCodes(name: "Sindal Airport", iata: "CNL", icoa: "EKSN", location_served: "Sindal, Denmark"),
  "CNM": IataIcaoCodes(
      name: "Cavern City Air Terminal",
      iata: "CNM",
      icoa: "KCNM",
      location_served: "Carlsbad, New Mexico, United States"),
  "CNN": IataIcaoCodes(
      name: "Kannur International Airport",
      iata: "CNN",
      icoa: "VOKN",
      location_served: "kannur, (Cannanore) Kerala, India"),
  "CNO": IataIcaoCodes(
      name: "Chino Airport", iata: "CNO", icoa: "KCNO", location_served: "Chino, California, United States"),
  "CNP": IataIcaoCodes(
      name: "Nerlerit Inaat Airport (Constable Pynt Airport)",
      iata: "CNP",
      icoa: "BGCO",
      location_served: "Ittoqqortoormiit, Greenland"),
  "CNQ": IataIcaoCodes(
      name: "Doctor Fernando Piragine Niveyro International Airport",
      iata: "CNQ",
      icoa: "SARC",
      location_served: "Corrientes, Corrientes, Argentina"),
  "CNR": IataIcaoCodes(name: "Chañaral Airport", iata: "CNR", icoa: "SCRA", location_served: "Chañaral, Chile"),
  "CNS": IataIcaoCodes(
      name: "Cairns Airport", iata: "CNS", icoa: "YBCS", location_served: "Cairns, Queensland, Australia"),
  "CNT": IataIcaoCodes(name: "Charata Airport", iata: "CNT", icoa: "", location_served: "Charata, Chaco, Argentina"),
  "CNU": IataIcaoCodes(
      name: "Chanute Martin Johnson Airport",
      iata: "CNU",
      icoa: "KCNU",
      location_served: "Chanute, Kansas, United States"),
  "CNV": IataIcaoCodes(
      name: "Canavieiras Airport", iata: "CNV", icoa: "SNED", location_served: "Canavieiras, Bahia, Brazil"),
  "CNW": IataIcaoCodes(
      name: "TSTC Waco Airport", iata: "CNW", icoa: "KCNW", location_served: "Waco, Texas, United States"),
  "CNX": IataIcaoCodes(
      name: "Chiang Mai International Airport", iata: "CNX", icoa: "VTCC", location_served: "Chiang Mai, Thailand"),
  "CNY":
      IataIcaoCodes(name: "Canyonlands Field", iata: "CNY", icoa: "KCNY", location_served:


    });

    it('getSeatmapLoaded() should return the current loaded status', () => {
      const result = SeatmapSelectors.getSeatmapLoaded(state);

      expect(result).toBe(true);
    });

    it('getSeatmapError() should return the current error state', () => {
      const result = SeatmapSelectors.getSeatmapError(state);

      expect(result).toBe(ERROR_MSG);
    });
  });
});
import * as ts from 'typescript';

import { hasNodeModifier } from './typescript-helpers';

export interface OutputParams {
	typesReferences: Set<string>;
	imports: Map<string, Set<string>>;
	statements: ReadonlyArray<ts.Statement>;
	shouldStatementHasExportKeyword(statement: ts.Statement): boolean;
	needStripDefaultKeywordForStatement(statement: ts.Statement): boolean;
}

export interface OutputOptions {
	umdModuleName?: string;
	sortStatements?: boolean;
}

export function generateOutput(params: OutputParams, options: OutputOptions = {}): string {
	let resultOutput = '';

	if (params.typesReferences.size !== 0) {
		const header = generateReferenceTypesDirective(Array.from(params.typesReferences));
		resultOutput += `${header}\n\n`;
	}

	if (params.imports.size !== 0) {
		// we need to have sorted imports of libraries to have more "stable" output
		const sortedEntries = Array.from(params.imports.entries()).sort((firstEntry: [string, Set<string>], secondEntry: [string, Set<string>]) => {
			return firstEntry[0].localeCompare(secondEntry[0]);
		});

		const importsArray = sortedEntries.map((entry: [string, Set<string>]) => {
			const [libraryName, libraryImports] = entry;
			return generateImport(libraryName, Array.from(libraryImports));
		});

		resultOutput += `${importsArray.join('\n')}\n\n`;
	}

	const statements = params.statements.map(
		(statement: ts.Statement) => {
			return getStatementText(
				statement,
				params.shouldStatementHasExportKeyword(statement),
				params.needStripDefaultKeywordForStatement(statement)
			);
		}
	);

	if (options.sortStatements) {
		statements.sort();
	}

	resultOutput += statements.join('\n');

	if (options.umdModuleName !== undefined) {
		resultOutput += `\n\nexport as namespace ${options.umdModuleName};\n`;
	}

	return resultOutput;
}

function getStatementText(statement: ts.Statement, shouldStatementHasExportKeyword: boolean, needStripDefaultKeyword: boolean): string {
	const hasStatementExportKeyword = ts.isExportAssignment(statement) || hasNodeModifier(statement, ts.SyntaxKind.ExportKeyword);

	let nodeText = getTextAccordingExport(statement.getText(), hasStatementExportKeyword, shouldStatementHasExportKeyword);

	// strip the `default` keyword from node
	if (hasNodeModifier(statement, ts.SyntaxKind.DefaultKeyword) && needStripDefaultKeyword) {
		// we need just to remove `default` from any node except class node
		// for classes we need to replace `default` with `declare` instead
		nodeText = nodeText.replace(/\bdefault\s/, ts.isClassDeclaration(statement) ? 'declare ' : '');
	}

	// for some reason TypeScript allows to do not write `declare` keyword for ClassDeclaration
	// if it already has `export` keyword - so we need to add it
	if (ts.isClassDeclaration(statement) && /^class\b/.test(nodeText)) {
		nodeText = `declare ${nodeTex


�击者从Synthetix本身购买了第二批sUSD，并将其存入bZx。攻击者使用sUSD作为抵押品，借入了他们被允许的最大数量的ETH。然后，他们又把sUSD卖回给Kyber。

如果你一直在关注，你会认识到这同样是抵押不足借贷攻击，但是使用了不同的抵押品和不同的去中心化交易平台。

### yVault 漏洞

2020年7月25日，我向[yEarn](https://yearn.finance/)报告了他们新发布的yVault合约的漏洞。你可以在[此处](https://blog.trailofbits.com/2020/08/05/accidentally-stepping-on-a-defi-lego/)阅读有关此漏洞的官方文章。但我在这里简要总结一下。

yVault系统允许用户存入代币并从中获得收益，而无需自己管理。在yVault内部，这个存款金库会跟踪铸造的yVault代币的总数以及所存入的基础代币的总数。单个yVault代币的价值，由铸造的代币与存入的代币的比率来确定。金库赚取的所有收益都会分摊到所有铸造的yVault代币中(即分摊到所有的yVault代币持有者)。

第一个yVault允许用户通过向Balancer 协议的MUSD/USDC储备池提供流动性来赚取USDC收益。当用户向Balancer池提供流动资金时，他们会收到BPT作为凭证（BPT可以用来赎回资产）。因此，yVault根据其BPT可赎回的MUSD/USDC金额计算其持有的价值。

这似乎是正确的实现，但不幸的是，与以前给出的原理相同，在交易期间Balancer池的状态是不稳定的，因此不能被信任。在此案例中，由于Balancer选择的联合曲线，从USDC到MUSD的兑换用户不会获得1：1的汇率，但实际上会在储备池中余留下一些MUSD。这意味着BPT的价值可以暂时膨胀，这使攻击者可以随意操纵价格并随后耗尽金库。

![](https://img.learnblockchain.cn/2020/11/19/16057691725333.jpg)

该事件表明，价格预言机并非总是可靠的，并且开发人员需要警惕他们正在使用的数据，并考虑该数据是否可以由非特权用户轻松操纵。

### Harvest Finance 黑客事件

2020年10月26日，


(.is-style-dots) {
  background-color: #767676;
  height: 2px;
}

.wp-block-separator:not(.is-style-wide):not(.is-style-dots) {
  width: 2.25em;
  margin-left: 0;
}

.wp-block-separator.is-style-dots {
  color: #767676;
}

.wp-block-separator.is-style-dots:before {
  font-size: 1.6875em;
  letter-spacing: calc(2 * 1rem);
  padding-left: calc(2 * 1rem);
}

/* Remove duplicate rule-line when a separator
 * is followed by an H1, or H2 */
.wp-block[data-type="core/separator"] + .wp-block[data-type="core/heading"] h1:before,
.wp-block[data-type="core/separator"] + .wp-block[data-type="core/heading"] h2:before {
  display: none;
}

/** === Latest Posts, Archives, Categories === */
ul.wp-block-archives,
.wp-block-categories,
.wp-block-latest-posts {
  padding: 0;
  list-style-type: none;
}

ul.wp-block-archives ul,
.wp-block-categories ul,
.wp-block-latest-posts ul {
  padding: 0;
  list-style-type: none;
}

ul.wp-block-archives li > a,
.wp-block-categories li > a,
.wp-block-latest-posts li > a {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
  font-size: calc(22px * 1.125);
  font-weight: bold;
  line-height: 1.2;
  text-decoration: none;
}

ul.wp-block-archives li ul,
.wp-block-categories li ul,
.wp-block-latest-posts li ul {
  padding-left: 1rem;
}

.wp-block-categories ul {
  padding-top: 0.75rem;
}

.wp-block-categories ul ul {
  counter-reset: submenu;
}

.wp-block-categories ul ul > li > a::before {
  font-family: "NonBreakingSpaceOverride", "Hoefler Text", Garamond, "Times New Roman", serif;
  font-weight: normal;
  content: "– " counters(submenu, "– ", none);
  counter-increment: submenu;
}

.wp-block-categories li ul {
  list-style: none;
  padding-left: 0;
  margin-bottom: -0.75rem;
}

/** === Latest Posts === */
.wp-block-latest-posts .wp-block-latest-posts__post-date {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
  font-size: 0.71111em;
  color: #767676;
  line-height: 1.2;
}

.wp-block-latest-posts .wp-block-latest-posts__post-full-content,
.wp-block-latest-posts .wp-block-latest-posts__post-excerpt {
  margin-top: 22px;
  margin-bottom: 22px;
}

.wp-block-latest-posts .wp-block-latest-posts__post-full-content > div > p:first-child,
.wp-block-latest-posts .wp-block-latest-posts__post-excerpt > div > p:first-child {
  margin-top: 22px;
}

.wp-block-latest-posts li {
  padding-bottom: 0.5rem;
}

.wp-block-latest-posts


6.7 h -3.2 V 107 h 3.2 v 6.3 h 8.3 v -2.4 h 3.6 V 123.8 c -2.3,0.6 -5.5,2 -5.5,4.9 v 2 c 0,6.3 12.9,7.7 19.8,7.7 h 5.9 c 6.9,0 19.4,-1.2 19.4,-7.7 v -2 c 0,-2.8 -3,-4.3 -5.3,-4.9 v -12.9 h 3.6 v 2.4 h 8.1 V 107 h 3.2 v -9.1 h -3.2 v -6.4 h -8.1 v 2.4 h -3.6 v -5.5 c 1.6,-0.3 3.6,-1.8 3.6,-3.8 0,-2.2 -1.6,-3.9 -3.6,-4 -0.5,-5.9 -5.7,-12.1 -11.4,-12.6 v -2.2 h -2 V 61.6 h -7.9 v 4 z m 2.9,47.2 c -4,0 -8.3,-5 -8.1,-9.3 0.2,-4.4 4.2,-9 8.3,-9 h 2 c 4.2,0 8.3,4.7 8.3,9.1 0,4.3 -4,9.1 -8.1,9.1 h -2.4 l 0,0 z m -10.5,-9.9 v 1.8 c 0,5.2 5.4,10.8 10.5,10.8 h 2.4 c 5.6,0 10.8,-5.8 10.8,-11.8 0,-6 -5.3,-11.8 -10.9,-11.8 h -2.1 C 93.7,92 88.4,97.5 88.4,103 l 0,0 z m 9.5,0.8 c 0.3,-0.6 0.8,-1.8 1.4,-1.8 h 1.4 c 0.7,0 1.4,1.3 1.4,2 0,0.1 -0.9,1.6 -1.4,1.6 h -1.4 c -0.6,0.1 -1.1,-1.2 -1.4,-1.8 z m -2.9,0 2.2,4.3 h 5 c 0.7,0 2.4,-3.6 2.9,-4.3 l -2.4,-4.5 h -4.9 c -0.8,0.1 -2.5,3.7 -2.9,4.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 97.9,103.8 c 0.3,-0.6 0.8,-1.8 1.4,-1.8 h 1.4 c 0.7,0 1.4,1.3 1.4,2 0,0.1 -0.9,1.6 -1.4,1.6 h -1.4 c -0.6,0.1 -1.1,-1.2 -1.4,-1.8 z m 1.2,-9.1 c -4.1,0 -8.1,4.6 -8.3,9 -0.2,4.3 4.1,9.3 8.1,9.3 l 2.4,0 c 4,0 8.1,-4.9 8.1,-9.1 0,-4.4 -4.1,-9.1 -8.3,-9.1 l -2,0 z m -1.2,4.7 4.9,0 2.4,4.5 c -0.4,0.7 -2.1,4.3 -2.9,4.3 l -5,0 -2.3,-4.3 c 0.4,-0.8 2.1,-4.4 2.9,-4.5 z M 98.7,64.5 h 2.9 v 3.8 h 2 v 1.8 c 3.2,0.7 5.3,1.1 7.4,3.1 1.3,1.3


  context: PklProject?
  ) {
    val project = holder.currentProject
    val base = project.pklBaseModule

    for ((index, reference) in references.withIndex()) {
      if (reference !is PklModuleUriReference) return
      if (index == 0) {
        // don't blame unresolved import on leading ".../"
        if (uriText.startsWith(".../")) {
          continue
        }
      }
      val resolved = reference.resolveContextual(context)
      if (
        index == 0 &&
          checkDependencyNotation(
            element,
            reference,
            resolved?.let { listOf(it) } ?: emptyList(),
            holder,
            context
          )
      ) {
        return
      }
      if (resolved == null) {
        createAnnotation(
          HighlightSeverity.WARNING,
          reference.rangeInElement.shiftRight(element.textOffset),
          "Unresolved import",
          "Unresolved import",
          holder,
          PklProblemGroups.unresolvedElement,
          element
        )
        continue
      }
      if (index == references.lastIndex) {
        if (resolved !is PklModule) {
          holder
            .newAnnotation(HighlightSeverity.ERROR, "Resolved import is not a Pkl module")
            .range(reference.rangeInElement.shiftRight(element.textOffset))
            .create()
          return
        }
        if (uriText.endsWith('/')) {
          val range = element.stringConstant.content.textRange
          holder
            .newAnnotation(HighlightSeverity.WARNING, "Module URI cannot have trailing slashes")
            .range(
              TextRange(range.startOffset + uriText.indexOfLast { it != '/' } + 1, range.endOffset)
            )
            .create()
          return
        }
        val projectPklVersion = base.pklVersion
        val minPklVersion = resolved.cache(context).minPklVersion ?: return
        checkPklVersion(minPklVersion, projectPklVersion, element, holder)
      }
    }
  }

  private fun checkPklVersion(
    moduleMinPklVersion: PklVersion,
    projectPklVersion: PklVersion,
    element: PklElement,
    holder: AnnotationHolder
  ) {

    if (moduleMinPklVersion > projectPklVersion) {
      createMismatchAnnotation(
        HighlightSeverity.WARNING,
        getHighlightRange(element),
        "Pkl version",
        "$moduleMinPklVersion or higher",
        projectPklVersion.toString(),
        holder,
        PklProblemGroups.pklVersionMismatch,
        element
      )
    }
  }

  private fun getHighlightRange(element: PklElement): TextRange {
    return when (element) {
      is PklModuleUri -> {
        // only highlight last part of module uri (the "module reference")
        val content = element.stringConstant.content
        val contentRange = content.textRange
        val contentText = content.text
        var index = contentText.lastIndexOf('/')
        if (index == -1) index = contentText.lastIndexOf(':')
        return TextRange(contentRange.startOffset + index + 1, contentRange.endOffset)
      }
      else -> element.textRange
    }
  }
}
/*
 * Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.pkl.lsp.analyzers

import java.net.URI
import java.net.URISyntaxException
import org.pkl.lsp.*
import org


 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 net.pl3x.map.core.renderer;

import java.util.Arrays;
import net.pl3x.map.core.Pl3xMap;
import net.pl3x.map.core.renderer.heightmap.Heightmap;
import net.pl3x.map.core.renderer.task.RegionScanTask;
import net.pl3x.map.core.util.BlurTool;
import net.pl3x.map.core.util.Colors;
import net.pl3x.map.core.world.Biome;
import net.pl3x.map.core.world.Chunk;
import net.pl3x.map.core.world.Region;
import org.jspecify.annotations.NullMarked;

@NullMarked
public class VintageStoryRenderer extends Renderer {
    private final Heightmap heightmap;

    public VintageStoryRenderer(RegionScanTask task, Builder builder) {
        super(task, builder);
        this.heightmap = Pl3xMap.api().getHeightmapRegistry().get("vintage_story");
    }

    @Override
    public Heightmap getHeightmap() {
        return this.heightmap;
    }

    @Override
    public void scanData(Region region) {
        int[] pixelMap = new int[512 << 9];
        byte[] shadowMap = new byte[512 << 9];
        Arrays.fill(shadowMap, (byte) 0);

        int cX = region.getX() << 5;
        int cZ = region.getZ() << 5;

        // iterate each chunk in this region
        for (int chunkX = cX; chunkX < cX + 32; chunkX++) {
            int bX = chunkX << 4;
            for (int chunkZ = cZ; chunkZ < cZ + 32; chunkZ++) {
                // skip any blocks that do not need to be rendered due to visibility limits
                if (!getWorld().visibleChunk(chunkX, chunkZ)) {
                    continue;
                }
                int bZ = chunkZ << 4;
                Chunk chunk = region.getChunk(chunkX, chunkZ);
                // iterate each block in this chunk
                for (int blockX = bX; blockX < bX + 16; blockX++) {
                    for (int blockZ = bZ; blockZ < bZ + 16; blockZ++) {
                        Pl3xMap.api().getRegionProcessor().checkPaused();
                        // skip any blocks that do not need to be rendered due to visibility limits
                        if (!getWorld().visibleBlock(blockX, blockZ)) {
                            continue;
                        }

                        Chunk.BlockData data = chunk.getData(blockX, blockZ);
                        if (data == null) {
                            // this shouldn't happen, but just in case...
                            continue;
                        }

                        // get biome once
                        Biome biome = data.getBiome(region, blockX, blockZ);

                        // fix true block color
                        int pixelColor = 0;
                        if (data.getFluidState() == null || region.getWorld().getConfig().RENDER_TRANSLUCENT_FLUIDS) {
                            // not flat fluids, we need to draw land
                            pixelColor = Colors.fixBlockColor(region, biome, data.getBlockState(), blockX, blockZ);
                            if (pixelColor != 0) {
                                // fix alpha
                                pixelColor = Colors.setAlpha(0xFF, pixelColor);
                            }
                        }

                        // fix up water color
                        pixelColor = processFluids(region.getWorld().getConfig().RENDER_TRANS


 'metrics' in result:
                        metrics = result['metrics']
                        row.update({
                            '精确匹配': metrics.get('exact_match', False),
                            'Tanimoto相似度': metrics.get('tanimoto_similarity', 0.0),
                            'MCS相似度': metrics.get('mcs_similarity', 0.0)
                        })

                    results_data.append(row)

                results_df = pd.DataFrame(results_data)
                results_df.to_excel(writer, sheet_name='详细结果', index=False)

                # 人工复核工作表
                if self.manual_review_samples:
                    manual_data = []
                    for sample in self.manual_review_samples:
                        manual_data.append({
                            'ID': sample['id'],
                            '输入': sample['input'],
                            '目标': sample['target'],
                            '预测': sample.get('prediction', ''),
                            '推荐原因': sample['metrics'].get('reason', '')
                        })

                    manual_df = pd.DataFrame(manual_data)
                    manual_df.to_excel(writer, sheet_name='人工复核', index=False)

        else:
            raise ValueError(f"不支持的导出格式: {format_type}")

        logger.info(f"结果已导出到: {export_file}")
        return export_file

def create_default_config() -> Dict[str, Any]:
    """创建默认配置"""
    return {
        'output_dir': 'evaluation_output',
        'batch_size': 100,
        'max_workers': mp.cpu_count(),
        'strategy': 'top1',
        'evaluation_thresholds': {
            'exact_match_tanimoto': 0.95,
            'functional_equivalent': 0.7,
            'mcs_threshold': 0.7,
            'substructure_threshold': 0.8
        },
        'enable_visualization': True,
        'enable_manual_review_filter': True
    }

def main():
    """主函数"""
    parser = argparse.ArgumentParser(description='自动化评估流程')
    parser.add_argument('--data', required=True, help='测试数据文件路径')
    parser.add_argument('--config', help='配置文件路径')
    parser.add_argument('--output', default='evaluation_output', help='输出目录')
    parser.add_argument('--strategy', default='top1', choices=['top1', 'top5', 'topk'], help='评估策略')
    parser.add_argument('--batch-size', type=int, default=100, help='批处理大小')
    parser.add_argument('--workers', type=int, default=mp.cpu_count(), help='工作进程数')
    parser.add_argument('--export-format', default='json', choices=['json', 'csv', 'excel'], help='导出格式')

    args = parser.parse_args()

    # 加载配置
    if args.config and os.path.exists(args.config):
        with open(args.config, 'r', encoding='utf-8') as f:
            config = json.load(f)
    else:
        config = create_default_config()

    # 更新配置
    config.update({
        'output_dir': args.output,
        'strategy': args.strategy,
        'batch_size': args.batch_size,
        'max_workers': args.workers
    })

    try:
        # 创建评估流程
        pipeline = AutomatedEvaluationPipeline(config)

        # 运行评估
        summary = pipeline.run_evaluation(args.data)

        # 导出结果
        export_file = pipeline.export_results(args.export_format)

        # 打印摘要
        print("\n" + "="*60)
        print("评估完成！")
        print("="*60)
        print(f"总样本数: {summary['total_samples']}")
        print(f"精确匹配率: {summary['exact_match_rate']:.2%}")
        print(f"自动通过率: {summary['auto_pass_rate']:.2%}")
        print(f"需要人工复核率: {summary['manual_review_rate']:.2%}")
        print(f"平均Tanimoto相似度: {summary['mean_tanimoto']:.4f}")
        print(f"处理时间: {summary['processing_time']:.2f}秒")
        print(f"结果已导出到: {export_file}")
        print("="*60)

    except Exception as e:
        logger.error(f"评估流程失败: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main()

"""
使用说明：

1. 基本用法：
   python 自动化评估流程.py --data test_data.jsonl --output results

2. 高级用法：
   python 自动化评估流程.py --data test_data.jsonl --config config.json --strategy top5 --batch-size 50

3. 配置文件示例：
   {
     "output_dir": "evaluation_output",
     "batch_size": 100,
     "strategy": "top1",
     "evaluation_thresholds": {
       "exact_match_tanimoto": 0.95,
       "functional_equivalent": 0.7
     }
   }

4. 输入数据格式：
   - JSON/JSONL: 包含input, target, prediction字段
   - CSV: 包含相应列名

5. 输出文件：
   - detailed_results_*.json: 详细评估结果
   - evaluation_re


lag)
{
	MusicManager.PlayFrontEndTrack(track, frontendFlag);
}

void
cDMAudio::StopFrontEndTrack(void)
{
	MusicManager.StopFrontEndTrack();
}

void
cDMAudio::ResetTimers(uint32 time)
{
	AudioManager.ResetTimers(time);
}

void
cDMAudio::ChangeMusicMode(uint8 mode)
{
	MusicManager.ChangeMusicMode(mode);
}

void
cDMAudio::PreloadCutSceneMusic(uint8 track)
{
	MusicManager.PreloadCutSceneMusic(track);
}

void
cDMAudio::PlayPreloadedCutSceneMusic(void)
{
	MusicManager.PlayPreloadedCutSceneMusic();
}

void
cDMAudio::StopCutSceneMusic(void)
{
	MusicManager.StopCutSceneMusic();
}

void
cDMAudio::PreloadMissionAudio(Const char *missionAudio)
{
	AudioManager.PreloadMissionAudio(missionAudio);
}

uint8
cDMAudio::GetMissionAudioLoadingStatus(void)
{
	return AudioManager.GetMissionAudioLoadingStatus();
}

void
cDMAudio::SetMissionAudioLocation(float x, float y, float z)
{
	AudioManager.SetMissionAudioLocation(x, y, z);
}

void
cDMAudio::PlayLoadedMissionAudio(void)
{
	AudioManager.PlayLoadedMissionAudio();
}

bool
cDMAudio::IsMissionAudioSampleFinished(void)
{
	return AudioManager.IsMissionAudioSampleFinished();
}

void
cDMAudio::ClearMissionAudio(void)
{
	AudioManager.ClearMissionAudio();
}

uint8
cDMAudio::GetRadioInCar(void)
{
	return MusicManager.GetRadioInCar();
}

void
cDMAudio::SetRadioInCar(uint32 radio)
{
	MusicManager.SetRadioInCar(radio);
}

void
cDMAudio::SetRadioChannel(uint8 radio, int32 pos)
{
	MusicManager.SetRadioChannelByScript(radio, pos);
}
#define _CRT_SECURE_NO_WARNINGS
#define WITH_D3D
#include <rwcore.h>
#include <rpworld.h>
#include <rpmatfx.h>
#include <rphanim.h>
#include <rpskin.h>
#include <assert.h>
#include <string.h>
#ifndef _WIN32
#include "crossplatform.h"
#endif

using namespace rw;

RwUInt8 RwObjectGetType(const RwObject *obj) { return obj->type; }

void *RwMalloc(size_t size) { return engine->memfuncs.rwmalloc(size, 0); }
void *RwCalloc(size_t numObj, size_t sizeObj) {
	void *mem = RwMalloc(numObj*sizeObj);
	if(mem)
		memset(mem, 0, numObj*sizeObj);
	return mem;
}
void  RwFree(void *mem) { engine->memfuncs.rwfree(mem); }

//RwReal RwV3dNormalize(RwV3d * out, const RwV3d * in);
RwReal RwV3dLength(const RwV3d * in) { return length(*in); }
//RwReal RwV2dLength(const RwV2d * in);
//RwReal RwV2dNormalize(RwV2d * out, const RwV2d * in);
//void RwV2dAssign(RwV2d * out, const RwV2d * ina);
//void RwV2dAdd(RwV2d * out, const RwV2d * ina, const RwV2d * inb);
//void RwV2dLineNormal(RwV2d * out, const RwV2d * ina, const RwV2d * inb);
//void RwV2dSub(RwV2d * out, const RwV2d * ina, const RwV2d * inb);
//void RwV2dPerp(RwV2d * out, const RwV2d * in);
//void RwV


                    ; fully-qualified     # 🦻 E12.1 ear with hearing aid",
        "\uD83E\uDDBB",
        "1F9BB 1F3FB                                ; fully-qualified     # 🦻🏻 E12.1 ear with hearing aid: light skin tone",
        "\uD83E\uDDBB\uD83C\uDFFB",
        "1F9BB 1F3FC                                ; fully-qualified     # 🦻🏼 E12.1 ear with hearing aid: medium-light skin tone",
        "\uD83E\uDDBB\uD83C\uDFFC",
        "1F9BB 1F3FD                                ; fully-qualified     # 🦻🏽 E12.1 ear with hearing aid: medium skin tone",
        "\uD83E\uDDBB\uD83C\uDFFD",
        "1F9BB 1F3FE                                ; fully-qualified     # 🦻🏾 E12.1 ear with hearing aid: medium-dark skin tone",
        "\uD83E\uDDBB\uD83C\uDFFE",
        "1F9BB 1F3FF                                ; fully-qualified     # 🦻🏿 E12.1 ear with hearing aid: dark skin tone",
        "\uD83E\uDDBB\uD83C\uDFFF",
        "1F443                                      ; fully-qualified     # 👃 E2.0 nose",
        "\uD83D\uDC43",
        "1F443 1F3FB                                ; fully-qualified     # 👃🏻 E2.0 nose: light skin tone",
        "\uD83D\uDC43\uD83C\uDFFB",
        "1F443 1F3FC                                ; fully-qualified     # 👃🏼 E2.0 nose: medium-light skin tone",
        "\uD83D\uDC43\uD83C\uDFFC",
        "1F443 1F3FD                                ; fully-qualified     # 👃🏽 E2.0 nose: medium skin tone",
        "\uD83D\uDC43\uD83C\uDFFD",
        "1F443 1F3FE                                ; fully-qualified     # 👃🏾 E2.0 nose: medium-dark skin tone",
        "\uD83D\uDC43\uD83C\uDFFE",
        "1F443 1F3FF                                ; fully-qualified     # 👃🏿 E2.0 nose: dark skin tone",
        "\uD83D\uDC43\uD83C\uDFFF",
        "1F9E0                                      ; fully-qualified     # 🧠 E5.0 brain",
        "\uD83E\uDDE0",
        "1F9B7                                      ; fully-qualified     # 🦷 E11.0 tooth",
        "\uD83E\uDDB7",
        "1F9B4                                      ; fully-qualified     # 🦴 E11.0 bone",
        "\uD83E\uDDB4",
        "1F440                                      ; fully-qualified     # 👀 E2.0 eyes",
        "\uD83D\uDC40",
        "1F441 FE0F                                 ; fully-qualified     # 👁 E2.0 eye",
        "\uD83D\uDC41\uFE0F",
        "1F441                                      ; unqualified         # 👁 E2.0 eye",
        "\uD83D\uDC41",
        "1F445                                      ; fully-qualified     # 👅 E2.0 tongue",
        "\uD83D\uDC45",
        "1F444                                      ; fully-qualified     # 👄 E2.0 mouth",
        "\uD83D\uDC44",
        "1F476


stopSelf() called due to unknown action")
            }
        } catch (e: Exception) {
            LoggerConfig.logger.e("Error processing alarm", e)
            // Even if there's an error, try to stop the service.
            // The finally block will still run.
            stopSelf()
            LoggerConfig.logger.d("stopSelf() called after exception")
        } finally {
            if (wakeLock.isHeld) {
                wakeLock.release()
                LoggerConfig.logger.d("WakeLock released")
            } else {
                LoggerConfig.logger.d("WakeLock was not held at finally block.")
            }
        }
        /**
         * START_NOT_STICKY: If the service is killed by the system,
         * it will not be automatically restarted.
         */
        return START_NOT_STICKY
    }

    /**
     * Called by the system to notify a Service that it is no longer used and is being removed.
     * Logs the destruction of the service.
     */
    override fun onDestroy() {
        super.onDestroy()
        LoggerConfig.logger.d("Service destroyed")
    }

    /**
     * Creates the notification channel for the foreground service.
     * Uses the channel name from [TriggerX.config] or a default name.
     */
    private fun createNotificationChannel() {
        val channelName = TriggerX.config?.notificationChannelName ?: "TriggerX Alarms"
        val channel = NotificationChannel(
            DEFAULT_CHANNEL_ID,
            channelName,
            NotificationManager.IMPORTANCE_DEFAULT
        ).apply {
            description = "Notifications for scheduling alarms"
        }
        val nm = getSystemService(NotificationManager::class.java)
        nm.createNotificationChannel(channel)
    }

    /**
     * Builds the [Notification] instance for the foreground service.
     * Uses the title and message from [TriggerX.getNotificationTitle] and [TriggerX.getNotificationMessage].
     * @return The configured [Notification] object.
     */
    private fun buildNotification(): Notification {
        return NotificationCompat.Builder(this, DEFAULT_CHANNEL_ID)
            .setContentTitle(TriggerX.getNotificationTitle())
            .setContentText(TriggerX.getNotificationMessage())
            .setOngoing(true)
            .build()
    }

    /**
     * Resolves the [Activity] class that should be launched when the alarm fires.
     * The class is determined in the following order of preference:
     * 1. [TriggerX.config.activityClass]
     * 2. Class loaded from [TriggerXPreferences]
     * 3. [DefaultTriggerActivity]
     *
     * @param context The application context, used for loading preferences.
     * @return The [Class] of the Activity to be launched.
     */
    suspend fun resolveActivityClass(context: Context): Class<out Activity> {
        return TriggerX.config?.activityClass
            ?: TriggerXPreferences.load(context)?.activityClass
            ?: DefaultTriggerActivity::class.java
    }
}

fun Context.isAppInForeground(): Boolean {
    val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
    val memoryInfo = ActivityManager.RunningAppProcessInfo()
    ActivityManager.getMyMemoryState(memoryInfo)
    return memoryInfo.importance == ActivityManag


_2 259
#    include BOOST_PP_FILENAME_2
#    undef BOOST_PP_ITERATION_2
# endif
# if BOOST_PP_ITERATION_FINISH_2 <= 258 && BOOST_PP_ITERATION_START_2 >= 258
#    define BOOST_PP_ITERATION_2 258
#    include BOOST_PP_FILENAME_2
#    undef BOOST_PP_ITERATION_2
# endif
# if BOOST_PP_ITERATION_FINISH_2 <= 257 && BOOST_PP_ITERATION_START_2 >= 257
#    define BOOST_PP_ITERATION_2 257
#    include BOOST_PP_FILENAME_2
#    undef BOOST_PP_ITERATION_2
# endif
#include "stdafx.h"
#pragma hdrstop

class CEnumFolderItems;

class CFolderItems : public FolderItems2,
                     public CObjectSafety,
                     protected CImpIDispatch
{
    friend CEnumFolderItems;

public:
    CFolderItems(CFolder *psdf, BOOL fSelected);

    //IUnknown methods
    STDMETHODIMP QueryInterface(REFIID riid, void ** ppv);
    STDMETHODIMP_(ULONG) AddRef(void);
    STDMETHODIMP_(ULONG) Release(void);

    //IDispatch members
    virtual STDMETHODIMP GetTypeInfoCount(UINT *pctinfo)
        { return CImpIDispatch::GetTypeInfoCount(pctinfo); }
    virtual STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo **pptinfo)
        { return CImpIDispatch::GetTypeInfo(itinfo, lcid, pptinfo); }
    virtual STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR ** rgszNames, UINT cNames, LCID lcid, DISPID *rgdispid)
        { return CImpIDispatch::GetIDsOfNames(riid, rgszNames, cNames, lcid, rgdispid); }
    virtual STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pdispparams, VARIANT * pvarResult, EXCEPINFO * pexcepinfo, UINT * puArgErr)
        { return CImpIDispatch::Invoke(dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr); }

    //FolderItems methods
    STDMETHODIMP        get_Application(IDispatch **ppid);
    STDMETHODIMP        get_Parent (IDispatch **ppid);
    STDMETHODIMP        get_Count(long *pCount);
    STDMETHODIMP        Item(VARIANT, FolderItem**);
    STDMETHODIMP        _NewEnum(IUnknown **);

    //FolderItems2 methods
    STDMETHODIMP        InvokeVerbEx(VARIANT vVerb, VARIANT vArgs);

private:
    ~CFolderItems(void);
    HDPA _GetHDPA();
    UINT _GetHDPACount();
    BOOL_PTR _CopyItem(UINT iItem, LPCITEMIDLIST pidl);

    HRESULT _GetShellFolderView(IShellFolderView **ppsfv);

    LONG _cRef;
    CFolder *_psdf;
    HDPA _hdpa;
    BOOL _fSelected;
    BOOL _fGotAllItems;
    IEnumIDList *_penum;
    UINT _cNumEnumed;

    HRESULT _EnsureItem(UINT iItemNeeded, LPCITEMIDLIST *ppidl);
};

//Enumerator of whatever is held in the collection
class CEnumFolderItems : public IEnumVARIANT
{
public:
    CEnumFolderItems(CFolderItems *pfdritms);

    //IUnknown members
    STDMETHODIMP         QueryInterface(REFIID, void **);
    STDMETHODIMP_(ULONG) AddRef(void);
    STDMETHODIMP_(ULONG) Release(void);

    //IE


st()
        response = await client.post(
            UrlConstants.ADMIN_MODS_URL,
            headers=admin_token,
            json={
                **TabitManagementDataConstants.ADMIN_CREATE_MOD_NEW,
                **{'company_id': department.company_id, 'current_department_id': department.id},
            },
        )
        assert response.status_code == status.HTTP_200_OK, (
            f'В ответе ожидается status_code {status.HTTP_200_OK}, получен {response.status_code}'
        )
        result = response.json()
        for key in TabitManagementDataConstants.ADMIN_CREATE_MOD_NEW:
            if key != 'password':
                assert result[key] == TabitManagementDataConstants.ADMIN_CREATE_MOD_NEW[key]
        assert result['company_id'] == department.company_id
        assert result['current_department_id'] == department.id
        assert result['previous_department_id'] is None

    @pytest.mark.parametrize(
        'payload, expected_status',
        [
            (TabitManagementDataConstants.ADMIN_CREATE_MOD_BAD[0], 422),
            (TabitManagementDataConstants.ADMIN_CREATE_MOD_BAD[1], 422),
            (TabitManagementDataConstants.ADMIN_CREATE_MOD_BAD[2], 422),
            (TabitManagementDataConstants.ADMIN_CREATE_MOD_BAD[3], 422),
            (TabitManagementDataConstants.ADMIN_CREATE_MOD_BAD[4], 404),
            (TabitManagementDataConstants.ADMIN_CREATE_MOD_BAD[5], 422),
            (TabitManagementDataConstants.ADMIN_CREATE_MOD_BAD[6], 422),
        ],
    )
    async def test_unsuccessful_create_moderator(
        self,
        async_session: AsyncSession,
        client: AsyncClient,
        admin_token,
        company_for_test,
        department_for_test,
        moderator_of_company,
        payload,
        expected_status,
    ):
        """Тест для проверки неуспешного создания модератора"""
        department = await department_for_test()
        await moderator_of_company(
            {
                'email': TabitManagementDataConstants.MOD_TEST_EMAIL,
                'company_id': department.company_id,
                'current_department_id': department.id,
            }
        )
        await company_for_test()  # создаётся другая компания
        old_user_count = await get_count(async_session, CompanyUser)
        response = await client.post(
            UrlConstants.ADMIN_MODS_URL, headers=admin_token, json=payload
        )
        assert response.status_code == expected_status, (
            f'В ответе ожидается status_code {expected_status}, получен {response.status_code}'
        )
        new_user_count = await get_count(async_session, CompanyUser)
        assert new_user_count == old_user_count, (
            f'Количество объектов CompanyUser должно равняться {old_user_count}. '
            f'Текущее количество - {new_user_count}.'
        )

@pytest.mark.asyncio(loop_scope='session')
class TestUpdateTabitManagement:
    """Класс для тестов PUT и PATCH -эндпоинтов tabit_management.py"""

    @pytest.mark.parametrize(
        'payload, check_department_change', TabitManagementDataConstants.ADMIN_PATCH_MOD
    )
    async def test_successful_patch_moderator(
        self,
        client: AsyncClient,
        admin_token,
        department_for_test,
        moderator_of_company,
        payload,
        check_department_change,
    ):
        """Тест для проверки обновления модератора PATCH-запросом"""
        department = await department_for_test()
        await department_for_test({'company_id': department.company_id})
        moderator = await moderator_of_company(
            {'company_id': department.company_id, 'current_department_id': department.id}
        )
        response = await client.patch(
            UrlConstants.ADMIN_MOD_DATA_URL.format(user_id=moderator.id),
            headers=admin_token,
            json=payload,
        )
        assert response.status_code == status.HTTP_200_OK, (
            f'В ответе ожидается status_code {status.HTTP_200_OK}, получен {response.status_code}'
        )
        result = response.json()
        for key in payload:
            assert result[key] == payload[key]
        if check_department_change:
            assert result['previous_department_id'] == department.id

    @pytest.mark.parametrize('payload', TabitManagementDataConstants.ADMIN_PATCH_MOD_BAD)
    async def test_unsuccessful_patch_moderator(
        self,
        async_session: AsyncSession,
        client: AsyncClient,
        admin_token,