nerrorsconversationruntimeerror)

Raised when the activation precondition does not meet expectations.

* **Parameters:**
  * **action_name** -- The name of the action that is not implemented.
  * **details** -- Additional details about the action

#### \_\_init_\_()

* **Parameters:**
  **self** (*Self*)
* **Return type:**
  None

## shipany.bot.conversation.loader module

### shipany.bot.conversation.loader.load(json_data)

Load a conversation flow from a JSON string.

* **Parameters:**
  **json_data** (`str` | `bytes` | `bytearray`) -- The JSON string to load.
* **Returns:**
  The loaded conversation flow.
* **Return type:**
  [Flow](shipany.bot.conversation.models.md#class-shipanybotconversationmodelsflowflow)
* **Raises:**
  **ValidationError** -- If the JSON data is invalid.

## Module contents
# Object-Oriented Programming (OOP) in Python

### **What is OOP?**

---

OOP, or Object-Oriented Programming, is a programming style that organizes code around **objects** instead of actions, focusing on **data** rather than logic alone. In OOP, objects are instances of **classes**—templates that define the characteristics (attributes) and capabilities (methods) of an object. This approach supports code that’s modular, reusable, and simpler to maintain. Popular OOP languages include Java, Python, and C++, where developers create and manage objects to build intricate applications.

---

Think of OOP like crafting a virtual world full of different things: cars, animals, people—you name it! Instead of creating everything from scratch each time, you design **blueprints** (classes) for each type, allowing you to easily make as many as you need. **Object-Oriented Programming** is all about defining these blueprints so that building virtual objects, like cars or animals, becomes easy and organized.

OOP simplifies programming by allowing you to create blueprints for different objects and then use them as many times as you want. This keeps your code organized, easy to manage, and more closely reflects the real world.

Here’s a quick look at OOP's main benefits:

### **Why OOP?**

- **Reuse**: Write code once and reuse it wherever you need.
- **Organize**: Keeps your code structured, making it easier to maintain and update.
- **Model Real-World Objects**: Allows you to mirror real-world entities, like cars, dogs, or people, making code more intuitive.

In OOP, **classes** act as blueprints, and **objects** are the actual items created from these blueprints. Let’s explore how to use OOP with some Python examples!

### Table of Contents

1. **Introduction to Classes and Objects**
2. **Attributes and Methods**
3. **Magic Methods**
4. **Four Pillars of OOP (Theory Only)**

---

## 1. Introduction to Classes and Objects

### What is a Class?

A class is a blueprint or template for creating objects. You can think of a class as a "recipe" that tells Python how to create an object and what characteristics (attributes) and actions (methods) it should have.

### What is an Object?

An object is an instance of a class. Once you have a class, you can create multiple objects based on that class. Each object will have the characteristics and actions defined by its class.

### Example:

```python
# Define a class called 'Person'
class Person:
    # Constructor method to initialize the object with attributes
    def __init__(self, name, age):
        self.name = name  # Attribute
        self.age = age    # Attribute

# Create an object of the Person class
p1 = Person("Ali", 25)

# Accessing the object's attributes
print(p1.name)  # Output: Ali
print(p1.age)


 5H3V4h1v1zm0-2H3V2h1v1zM2 1h6V0H1C.45 0 0 .45 0 1v12c0 .55.45 1 1 1h2v2l1.5-1.5L6 16v-2h5c.55 0 1-.45 1-1v-3H2V1zm9 10v2H6v-1H3v1H1v-2h10zM3 8h1v1H3V8zm1-1H3V6h1v1z"/></svg>';

$icon_lightbulb: $svg +
	'<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="octicon" version="1.1" viewBox="0 0 12 16"><path d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"/></svg>';

$icon_location: $svg +
	'<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="octicon" height="64" role="img" viewBox="0 0 12 16" width="48" style="display:inline-block;fill:currentColor;user-select:none;vertical-align:middle"><path fill-rule="evenodd" d="M6 0C2.69 0 0 2.5 0 5.5 0 10.02 6 16 6 16s6-5.98 6-10.5C12 2.5 9.31 0 6 0zm0 14.55C4.14 12.52 1 8.44 1 5.5 1 3.02 3.25 1 6 1c1.34 0 2.61.48 3.56 1.36.92.86 1.44 1.97 1.44 3.14 0 2.94-3.14 7.02-5 9.05zM8 5.5c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>';

$icon_organization: $svg +
	'<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="octicon" height="64" role="img" viewBox="0 0 16 16" width="64" style="display:inline-block;fill:currentColor;user-select:none;vertical-align:middle"><path fill-rule="evenodd" d="M16 12.999c0 .439-.45 1-1 1H7.995c-.539 0-.994-.447-.995-.999H1c-.54 0-1-.561-1-1 0-2.634 3-4 3-4s.229-.409 0-1c-.841-.621-1.058-.59-1-3 .058-2.419 1.367-3 2.5-3s2.442.58 2.5 3c.


serialized as Iterable<Object?>).toList();
    final unhandled = <Object?>[];
    _deserializeProperties(
      serializers,
      serialized,
      specifiedType: specifiedType,
      serializedList: serializedList,
      unhandled: unhandled,
      result: result,
    );
    return result.build();
  }
}

import 'package:apollovm/apollovm.dart';

import 'apollovm_languages_test_definition.dart';

Future<void> main() async {
  print('BASIC TESTS DEFINITIONS');

  var definitions = <TestDefinition>[
    TestDefinition('dart_basic_main_1.test.xml', '''
<?xml version="1.0" encoding="UTF-8"?>
<test title="Basic main(List<String>) 1">
    <source language="dart">
        <![CDATA[
            void main(List<String> args) {
              var title = args[0];
              var a = args[1];
              var b = args[2];
              var c = args[3];
              var sumAB = a + b ;
              var sumABC = a + b + c;
              print(title);
              print(sumAB);
              print(sumABC);
            }
        ]]>
    </source>
    <call function="main">
        [
          ["Strings:", "A", "B", "C"]
        ]
    </call>
    <output>
        ["Strings:", "AB", "ABC"]
    </output>
    <source-generated language="dart"><![CDATA[<<<< [SOURCES_BEGIN] >>>>
<<<< NAMESPACE="" >>>>
<<<< CODE_UNIT_START="/test" >>>>
  void main(List<String> args) {
    var title = args[0];
    var a = args[1];
    var b = args[2];
    var c = args[3];
    var sumAB = a + b;
    var sumABC = a + b + c;
    print(title);
    print(sumAB);
    print(sumABC);
  }

<<<< CODE_UNIT_END="/test" >>>>
<<<< [SOURCES_END] >>>>
]]></source-generated>
</test>
    '''),
    TestDefinition('java11_basic_main_1.test.xml', '''
<?xml version="1.0" encoding="UTF-8"?>
<test title="Basic main(Object[]) 1">
    <source language="java11">
        <![CDATA[

            class Foo {
               static public void main(String[] args) {
                 var title = args[0];
                 var a = args[1];
                 var b = args[2];
                 var c = args[3];
                 var sumAB = a + b ;
                 var sumABC = a + b + c;
                 print(title);
                 print(sumAB);
                 print(sumABC);
               }
            }

        ]]>
    </source>
    <call class="Foo" function="main">
        [
          ["Strings:", "A", "B", "C"]
        ]
    </call>
    <output>
        ["Strings:", "AB", "ABC"]
    </output>
    <source-generated language="dart"><![CDATA[<<<< [SOURCES_BEGIN] >>>>
<<<< NAMESPACE="" >>>>
<<<< CODE_UNIT_START="/test" >>>>
class Foo {

  static void main(List<String> args) {
    var title = args[0];
    var a = args[1];
    var b = args[2];
    var c = args[3];
    var sumAB = a + b;
    var sumABC = a + b + c;
    print(title);
    print(sumAB);
    print(sumABC);
  }

}
<<<< CODE_UNIT_END="/test" >>>>
<<<< [SOURCES_END] >>>>
]]></source-generated>

    <source-generated language="java11"><![CDATA[<<<< [SOURCES_BEGIN] >>>>
<<<< NAMESPACE="" >>>>
<<<< CODE_UNIT_START="/test" >>>>
c


 false,
       this.supportsOn: false})
      : this.requiresTargetSession =
          identical(requiredTarget, TargetKind.SESSION),
        this.requiredTarget = requiredTarget,
        requiresTarget = !identical(requiredTarget, null) || requiresTarget;
}

/// Use a [ActionGroup] to group actions that share the same primary verb
/// such as "create project" and "create session".
class ActionGroup extends Action {
  final Map<String, Action> actions;

  const ActionGroup(Map<String, Action> actions, String documentation)
      : super(null, documentation),
        this.actions = actions;
}

// TODO(ahe): Support short and long documentation.

/// Common actions are displayed in the default help screen.
///
/// Please make sure their combined documentation fit in in 80 columns by 20
/// lines.  The default terminal size is normally 80x24.  Two lines are used
/// for the prompts before and after running dartino.  Another two lines may be
/// used to print an error message.
const Map<String, Action> commonActions = const <String, Action>{
  "help": helpAction,
  "run": runAction,
  "show": showAction,
  "quit": quitAction,
};

/// Uncommon verbs aren't displayed in the normal help screen.
///
/// These verbs are displayed when running `dartino help all`.
const Map<String, Action> uncommonActions = const <String, Action>{
  "analyze": analyzeAction,
  "attach": attachAction,
  "build": buildAction,
  "compile": compileAction,
  "create": createAction,
  "debug": debugAction,
  "disable": disableAction,
  "enable": enableAction,
  "export": exportAction,
  "flash": flashAction,
  "x-complete": completeAction,
  "x-download-tools": downloadToolsAction,
  "x-emulate": emulateAction,
  "x-end": endAction,
  "x-should-prompt-analytics": shouldPromptAnalyticsAction,
  "x-upgrade": upgradeAction,
};
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:ffi';

import 'dlib.dart';
import 'types.dart';

/// Returns a new interpreter using the provided model and options, or null on
/// failure.
///
/// * `model` must be a valid model instance. The caller retains ownership of the
///   object, and can destroy it immediately after creating the interpreter; the
///   interpreter will maintain its own reference to the underlying model data.
/// * `optional_options` may be null. The caller retains ownership of the object,
///   and can safely destroy it immediately after creating the interpreter.
//
/// NOTE: The client *must* explicitly allocate tensors before attempting to
/// access input tensor data or invoke the interpreter.
Pointer<TfLiteInterpreter> Function(Pointer<TfLiteModel> model,
        Pointer<TfLiteInterpreterOptions> optional_options)
    TfLiteInterpreterCreate = tflitelib
        .lookup<NativeFunction<_TfLiteInterpreterCreate_native_t>>(
            'TfLiteInterpreterCreate')
        .asFunction();

typedef _TfLiteInterpreterCreate_native_t = Pointer<TfLiteInterpreter> Function(
    Pointer<TfLiteModel> model,
    Pointer<TfLiteInterpreterOptions> optional_options);

/// Destroys the interpreter.
void Function(Pointer<TfLiteInterpreter>) TfLiteInterpreterDelete = tflitelib
    .lookup<NativeFunction<_TfLiteInterpreterDelete_native_t>>(
        'TfLiteInterpreterDelete')
    .asFunction();

typedef _TfLiteInterpreterDelete_native_t = Void Function(
    Pointer<TfLiteInterpreter>);

///


言处理中，词性标注对实现哪些任务很重要？ |
| 人工智能伦理 | AI系统在医疗领域使用时应当遵守哪些道德准则？ |
| 机器学习算法 | 什么是支持向量机算法？它适用于哪些场景？ |
| 数据库管理 | 如何使用SQL查询从一个表格中获取最大值？ |
| 神经网络 | 神经网络中的梯度下降算法是如何工作的？ |
| 数据可视化 | 在Python中，如何用Matplotlib绘制散点图？ |
| 云计算 | 使用AWS S3存储桶时，如何保证对象的一致性？ |
|健康领域开发|如何在市场上推广一种新的健康饮料？|
|社交媒体|什么样的社交媒体营销策略最有效？|
|科技行业|推出一个新的智能手机应用程序需要考虑哪些因素？|
|旅游业|城市旅游的主要市场群体是什么？|
|金融投资|投资股票和债券哪个更安全？|
|法律咨询|离婚案件中涉及到的家庭财产分割规则有哪些？|
|电商平台|如何提高电商平台的用户转化率？|
|医疗保健|如何应对老龄化对医疗保健服务需求的影响？|
|教育行业|学生在校期间应该注重哪些方面的能力培养？|
|市场调查|通过哪些方法可以了解目标消费者的需求？|
|自然语言处理|自然语言处理有哪些主要的应用场景？|
|机器学习|哪些算法是可用于处理非线性关系的机器学习算法？|
|数据挖掘|如何使用数据挖掘技术来预测客户流失率？|
|计算机视觉|在计算机视觉中，你会如何检测和识别人脸？|
|深度学习|什么是深度学习中的反向传播算法？如何使用它对神经网络进行训练？|
|推荐系统|基于内容的推荐系统和协同过滤推荐系统之间有哪些区别？|
|数据分析|如何使用Python编程语言进行数据清理和分析？|
|语音识别|如何利用深度学习模型进行语音识别？|
|机器翻译|如何评估机器翻译的质量是否达到了人类水平？|
|强化学习|什么是强化学习中的Q-learning算法？它有哪些应用场景？|
|健康饮食|如何制作低卡路里的早餐？|
|社交�


/* Translated from Cython into C++ by SciPy developers in 2023.
 *
 * Original author: Josh Wilson, 2016.
 */

/* Implement sin(pi*z) and cos(pi*z) for complex z. Since the periods
 * of these functions are integral (and thus better representable in
 * floating point), it's possible to compute them with greater accuracy
 * than sin(z), cos(z).
 */

#pragma once

#include "cephes/trig.h"
#include "config.h"
#include "evalpoly.h"

namespace special {

template <typename T>
SPECFUN_HOST_DEVICE T sinpi(T x) {
    return cephes::sinpi(x);
}

template <typename T>
SPECFUN_HOST_DEVICE std::complex<T> sinpi(std::complex<T> z) {
    T x = z.real();
    T piy = M_PI * z.imag();
    T abspiy = std::abs(piy);
    T sinpix = cephes::sinpi(x);
    T cospix = cephes::cospi(x);

    if (abspiy < 700) {
        return {sinpix * std::cosh(piy), cospix * std::sinh(piy)};
    }

    /* Have to be careful--sinh/cosh could overflow while cos/sin are small.
     * At this large of values
     *
     * cosh(y) ~ exp(y)/2
     * sinh(y) ~ sgn(y)*exp(y)/2
     *
     * so we can compute exp(y/2), scale by the right factor of sin/cos
     * and then multiply by exp(y/2) to avoid overflow. */
    T exphpiy = std::exp(abspiy / 2);
    T coshfac;
    T sinhfac;
    if (exphpiy == std::numeric_limits<T>::infinity()) {
        if (sinpix == 0.0) {
            // Preserve the sign of zero.
            coshfac = std::copysign(0.0, sinpix);
        } else {
            coshfac = std::copysign(std::numeric_limits<T>::infinity(), sinpix);
        }
        if (cospix == 0.0) {
            // Preserve the sign of zero.
            sinhfac = std::copysign(0.0, cospix);
        } else {
            sinhfac = std::copysign(std::numeric_limits<T>::infinity(), cospix);
        }
        return {coshfac, sinhfac};
    }

    coshfac = 0.5 * sinpix * exphpiy;
    sinhfac = 0.5 * cospix * exphpiy;
    return {coshfac * exphpiy, sinhfac * exphpiy};
}

template <typename T>
SPECFUN_HOST_DEVICE T cospi(T x) {
    return cephes::cospi(x);
}

template <typename T>
SPECFUN_HOST_DEVICE std::complex<T> cospi(std::complex<T> z) {
    T x = z.real();
    T piy = M_PI * z.imag();
    T abspiy = std::abs(piy);
    T sinpix = cephes::sinpi(x);
    T cospix = cephes::cospi(x);

    if (abspiy < 700) {
        return {cospix * std::cosh(piy), -sinpix * std::sinh(piy)};
    }

    // See csinpi(z) for an idea of what's going on here.
    T exphpiy = std::exp(abspiy / 2);
    T coshfac;
    T sinhfac;
    if (exphpiy == std::numeric_limits<T>::infinity()) {
        if (sinpix == 0.0) {
            // Preserve the sign of zero.
            coshfac = std::copysign(0.0, cospix);
        } else {
            coshfac = std::copysign(std::numeric_limits<T>::infinity(), cospix);
        }
        if (cospix == 0.0) {
            // Preserve the sign of zero.
            sinhfac = std::copysign(0.0, sinpix);
        } else {
            sinhfac = std::copysign(std::numeric_limits<T>::infinity(), sinpix);
        }
        return {coshfac, sinhfac};
    }

    coshfac = 0.5 * cospix * exphpiy;
    sinhfac = 0.5 * sinpix * exphpiy;
    return {coshfac * exphpiy, sinhfac * exphpiy};
}

} // namespace special


otobuf.omit_enum_names');
//
//  Generated code. Do not modify.
//  source: google/cloud/speech/v1/resource.proto
//
// @dart = 2.12

// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;

@$core.Deprecated('Use customClassDescriptor instead')
const CustomClass$json = {
  '1': 'CustomClass',
  '2': [
    {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
    {'1': 'custom_class_id', '3': 2, '4': 1, '5': 9, '10': 'customClassId'},
    {
      '1': 'items',
      '3': 3,
      '4': 3,
      '5': 11,
      '6': '.google.cloud.speech.v1.CustomClass.ClassItem',
      '10': 'items'
    },
  ],
  '3': [CustomClass_ClassItem$json],
  '7': {},
};

@$core.Deprecated('Use customClassDescriptor instead')
const CustomClass_ClassItem$json = {
  '1': 'ClassItem',
  '2': [
    {'1': 'value', '3': 1, '4': 1, '5': 9, '10': 'value'},
  ],
};

/// Descriptor for `CustomClass`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List customClassDescriptor = $convert.base64Decode(
    'CgtDdXN0b21DbGFzcxISCgRuYW1lGAEgASgJUgRuYW1lEiYKD2N1c3RvbV9jbGFzc19pZBgCIA'
    'EoCVINY3VzdG9tQ2xhc3NJZBJDCgVpdGVtcxgDIAMoCzItLmdvb2dsZS5jbG91ZC5zcGVlY2gu'
    'djEuQ3VzdG9tQ2xhc3MuQ2xhc3NJdGVtUgVpdGVtcxohCglDbGFzc0l0ZW0SFAoFdmFsdWUYAS'
    'ABKAlSBXZhbHVlOmzqQWkKIXNwZWVjaC5nb29nbGVhcGlzLmNvbS9DdXN0b21DbGFzcxJEcHJv'
    'amVjdHMve3Byb2plY3R9L2xvY2F0aW9ucy97bG9jYXRpb259L2N1c3RvbUNsYXNzZXMve2N1c3'
    'RvbV9jbGFzc30=');

@$core.Deprecated('Use phraseSetDescriptor instead')
const PhraseSet$json = {
  '1': 'PhraseSet',
  '2': [
    {'1': 'name', '3': 1, '4': 1, '5': 9, '10': 'name'},
    {
      '1': 'phrases',
      '3': 2,
      '4': 3,
      '5': 11,
      '6': '.google.cloud.speech.v1.PhraseSet.Phrase',
      '10': 'phrases'
    },
    {'1': 'boost', '3': 4, '4': 1, '5': 2, '10': 'boost'},
  ],
  '3': [PhraseSet_Phrase$json],
  '7': {},
};

@$core.Deprecated('Use phraseSetDescriptor instead')
const PhraseSet_Phrase$json = {
  '1': 'Phrase',
  '2': [
    {'1': 'value', '3': 1, '4': 1, '5': 9, '10': 'value'},
    {'1': 'boost', '3': 2, '4': 1, '5': 2, '10': 'boost'},
  ],
};

/// Descriptor for `PhraseSet`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List phraseSetDescriptor = $convert.base64Decode(


blePrefix(61), encoding.EncodeBytesAscending(nil, []byte("☃")))
	specialBytesKeyB := makeKey(tenSysCodec.TablePrefix(61), encoding.EncodeBytesAscending(nil, []byte("☃⚠")))
	specialBytesKeyC := makeKey(tenSysCodec.TablePrefix(61), encoding.EncodeBytesAscending(nil, []byte{0xff, 0x00}))
	specialBytesKeyD := makeKey(tenSysCodec.TablePrefix(61), encoding.EncodeBytesAscending(nil, []byte{0xff, 0xfe}))

	testCases := []struct {
		start, end roachpb.Key
		maxChars   int
		expected   redact.RedactableString
	}{
		{key, nil, 20, "‹a›"},
		{tableKey, nil, 10, "/Table/61…"},
		{tableKey, specialBytesKeyB, 20, `/Table/61/{4-‹"☃›…}`},
		{tableKey, specialBytesKeyB, 30, `/Table/61/{4-‹"☃⚠"›}`},
		{tableKey, specialBytesKeyB, 50, `/Table/61/{4-‹"☃⚠"›}`},
		{specialBytesKeyA, specialBytesKeyB, 20, `/Table/61/‹"☃›…`},
		{specialBytesKeyA, specialBytesKeyB, 25, `/Table/61/‹"☃›{‹"›-‹⚠"›}`},
		{specialBytesKeyA, specialBytesKeyB, 30, `/Table/61/‹"☃›{‹"›-‹⚠"›}`},
		// Note: the PrettyPrintRange() algorithm operates on the result
		// of PrettyPrint(), which already turns special characters into
		// hex sequences. Therefore, it can merge and truncate the hex
		// codes. To improve this would require making PrettyPrint() take
		// a bool flag to return un-escaped bytes, and let
		// PrettyPrintRange() escape the output adequately.
		//
		// Since all of this is best-effort, we'll accept the status quo
		// for now.
		{specialBytesKeyC, specialBytesKeyD, 20, `/Table/61/‹"\xff\x›…`},
		{specialBytesKeyC, specialBytesKeyD, 30, `/Table/61/‹"\xff\x›{‹00"›-‹fe"›}`},
		{specialBytesKeyB, specialBytesKeyD, 20, `/Table/61/‹"›{‹☃›…-‹\›…}`},
		{specialBytesKeyB, specialBytesKeyD, 30, `/Table/61/‹"›{‹☃⚠"›-‹\xff\x›…}`},
		{specialBytesKeyB, specialBytesKeyD, 50, `/Table/61/‹"›{‹☃⚠"›-‹\xff\xfe"›}`},
		{tenTableKey, nil, 20, "/Tenant/5/Table/61/…"},
		{key, key2, 20, "{‹a›-‹z›}"},
		{keys.MinKey, tableKey, 8, "/{M…-T…}"},
		{keys.MinKey, tableKey, 15, "/{Min-Tabl…}"},
		{keys.MinKey, tableKey, 20, "/{Min-Table/6…}"},
		{keys.MinKey, tableKey, 25, "/{Min-Table/61/4}"},
		{keys.MinKey, tenTableKey, 8, "/{M…-T…}"},
		{keys.MinKey, tenTableKey, 15, "/{Min-Tena…}"},
		{keys.MinKey, tenTableKey, 20, "/{Min-Tenant/…}"},
		{keys.MinKey, tenTableKey, 25, "/{Min-Tenant/5/…}"},
		{keys.MinKey, tenTableKey, 30, "/{Min-Tenant/5/Tab…}"},
		{tableKey, tableKey2, 8, "/Table/…"},
		{tableKey, tableKey2, 15, "/Table/61/…"},
		{tableKey, tableKey2, 20, "/Table/


.025a9.427 9.427 0 00-5 0C7.612 5.958 6.775 6.22 6.775 6.22a3.593 3.593 0 00-.1 2.65 3.892 3.892 0 00-1.025 2.687c0 3.825 2.325 4.688 4.55 4.938a2.106 2.106 0 00-.638 1.337 2.137 2.137 0 01-2.91-.82l-.002-.005a2.001 2.001 0 00-1.538-1.025c-.837.013-.337.475.013.663.451.38.803.865 1.025 1.412.2.563.85 1.638 3.362 1.175 0 .838.013 1.625.013 1.863 0 .259-.185.551-.67.475z" opacity=".5"/><path fill="currentColor" d="M12 2.083c-5.523 0-10 4.477-10 10 0 4.423 2.875 8.169 6.855 9.488.485.075.67-.216.67-.475 0-.238-.012-1.025-.012-1.863-2.513.463-3.163-.612-3.363-1.175a3.637 3.637 0 00-1.025-1.412c-.35-.188-.85-.65-.013-.663a2 2 0 011.538 1.025l.003.006a2.137 2.137 0 002.91.82c.043-.51.27-.984.637-1.338-2.225-.25-4.55-1.113-4.55-4.938a3.892 3.892 0 011.025-2.687 3.594 3.594 0 01.1-2.65s.837-.263 2.75 1.025a9.427 9.427 0 015 0c1.912-1.3 2.75-1.025 2.75-1.025.37.838.406 1.786.1 2.65a3.87 3.87 0 011.025 2.687c0 3.838-2.338 4.688-4.562 4.938.482.49.729 1.164.675 1.85 0 1.337-.013 2.412-.013 2.75a.493.493 0 00.643.476C19.124 20.253 22 16.507 22 12.083c0-5.523-4.477-10-10-10z"/></svg>';
  static const String github_alt =
      '<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="M20.116 5.901a3.883 3.883 0 00-.26-.31 4.413 4.413 0 00.21-.76 5.284 5.284 0 00-.35-2.8s-1.12-.35-3.69 1.38a12.477 12.477 0 00-3.35-.45 12.604 12.604 0 00-3.36.45c-2.57-1.75-3.69-1.38-3.69-1.38a5.263 5.263 0 00-.35 2.77 4.21 4.21 0 00.22.79c-.09.1-.18.21-.26.31a5.14 5.14 0 00-1.12 3.3 7.686 7.686 0 00.04.85c.32 4.43 3.27 5.46 6.08 5.78a2.558 2.558 0 00-.77 1.39 4.022 4.022 0 00-.13 1.09v1.31c-1.119.1-2.267-.063-2.623-1.061a5.695 5.695 0 00-1.834-2.413 1.179 1.179 0 01-.17-.112 1.001 1.001 0 00-.93-.645h-.005a1 1 0 00-1 .995c-.003.812.81 1.337 1.143 1.515a4.466 4.466 0


hese machines will upgrade them to the advanced version keeping the same amount of slots they had previously. This
means you won't lose the materials used to upgrade regular providers to extended providers in the process.

## Advanced Pattern Provider Capacity Upgrade

<ItemImage id="advanced_ae:adv_pattern_provider_capacity_upgrade" scale="3"></ItemImage>

Capacity upgrades are used to upgrade regular Pattern Providers directly to an Advanced Pattern Provider with 36 pattern
slots.
---
navigation:
  parent: aae_intro/aae_intro-index.md
  title: Monitor de rendimiento ME
  icon: advanced_ae:throughput_monitor
categories:
  - advanced items
item_ids:
  - advanced_ae:throughput_monitor
  - advanced_ae:throughput_monitor_configurator
---

# Monitor de rendimiento ME

<GameScene zoom="8" background="transparent">
<ImportStructure src="../structure/throughput_monitors.snbt"></ImportStructure>
<IsometricCamera yaw="195" pitch="30" />
</GameScene>

Los <ItemLink id="advanced_ae:throughput_monitor" /> son un subtipo de monitor. Proporcionan las mismas funcionalidades que un <ItemLink id="ae2:storage_monitor" />,
con la adición de un medidor de rendimiento. Hará un seguimiento de un solo tipo de objeto/fluido y monitoreará los cambios en su
cantidad, mostrando la cantidad por segundo al usuario.

*No* requiere un canal.

## Combinaciones de teclas

*   Haz clic derecho con un objeto o haz doble clic derecho con un contenedor de fluidos para configurar el monitor en ese objeto/fluido.
*   Haz clic derecho con la mano vacía para borrar el monitor.
*   Haz shift + clic derecho con la mano vacía para bloquear el monitor.

## Configurador del monitor de rendimiento

<ItemImage id="advanced_ae:throughput_monitor_configurator" scale="4"></ItemImage>

El <ItemLink id="advanced_ae:throughput_monitor_configurator" /> es una herramienta que se puede usar para cambiar los datos presentados. Haciendo clic derecho en un monitor
con uno en la mano, se alternará entre tres opciones:

* Objetos por tic
* Objetos por segundo
* Objetos por minuto

Nota: ¡Puede tomar algún tiempo antes de que las lecturas se estabilicen al cambiar los modos, así que no confíes en los valores iniciales!---
navigation:
  parent: aae_intro/aae_intro-index.md
  title: Conjunto de armadura cuántica
  icon: advanced_ae:quantum_helmet
categories:
  - advanced items
item_ids:
  - advanced_ae:quantum_helmet
  - advanced_ae:quantum_chestplate
  - advanced_ae:quantum_leggings
  - advanced_ae:quantum_boots
  - advanced_ae:quantum_upgrade_base
  - advanced_ae:walk_speed_card
  - advanced_ae:sprint_speed_card
  - advanced_ae:step_assist_card
  - advanced_ae:jump_height_card
  - advanced_ae:lava_immunity_card
  - advanced_ae:flight_card
  - advanced_ae:water_breathing_card
  - advanced_ae:auto_feeding_card
  - advanced_ae:auto_stock_card
  - advanced_ae:magnet_card
  - advanced_ae:hp_buffer_card
  - advanced_ae:evasion_card
  - advanced_ae:regeneration_card
  - advanced_ae:strength_card
  - advanced_ae:attack_speed_card
  - advanced_ae:luck_card
  - advanced_ae:reach_card
  - advanced_ae:swim_speed_card
  - advanced_ae:night_vision_card
  - advanced_ae:flight_drift_card
  - advanced_ae:recharging_card
  - advanced_ae:portable_workbench_card
  - advanced_ae:pick_craft_card
---

# Conjunto de armadura cuántica

<Row gap="


oop, this);

    textureAtlas = new createjs.SpriteSheet({

        "images": [
            assets.getResult('atlas')
        ],

        "frames": [
            [1, 1, 226, 178, 0, 0, 0],
            [1, 181, 175, 59, 0, 0, 0],
            [178, 181, 175, 59, 0, 0, 0],
            [229, 1, 175, 59, 0, 0, 0],
            [229, 62, 175, 59, 0, 0, 0],
            [406, 1, 62, 62, 0, 0, 0],
            [229, 123, 62, 51, 0, -3, -9],
            [406, 65, 62, 51, 0, -3, -9],
            [293, 123, 62, 51, 0, -3, -9],
            [357, 123, 81, 68, 0, 0, 0]
        ],

        "animations": {
            "cloud": { "frames": [0] },
            "gotomenu": { "frames": [1] },
            "instructions": { "frames": [2] },
            "playagain": { "frames": [3] },
            "playgame": { "frames": [4] },
            "island": { "frames": [5] },
            "plane": {
                "frames": [6, 7, 8],
                "speed": 0.5
            },
            "parcel": { "frames": [9] }
        }
    })

    // Set initial scene to MENU scene and call changeScene().
    scene = config.Scene.MENU;
    changeScene();
}

/**
 * Main game loop function which handles what happens with each "tick" or frame
 *
 * @method gameLoop
 * @param {createjs.TickerEvent} event
 * @return {void}
 */
function gameLoop(event: createjs.Event): void {
    // Update whatever scene is currently active.
    if (tempScene != null) {
        tempScene.update()
    } else {
        currentScene.update();
    }
    stage.update();
}

/**
 * This function is used as a View Switcher to switch between different scenes
 * within the application.
 *
 * @method changeScene
 * @return {void}
 */
function changeScene(): void {

    // Simple state machine pattern to define scene swapping.
    switch (scene) {
        case config.Scene.MENU:
            stage.removeAllChildren();
            currentScene = new scenes.Menu();
            console.log("Starting MENU scene");
            break;
        case config.Scene.INSTRUCTIONS:
            stage.removeAllChildren();
            currentScene = new scenes.Instructions();
            console.log("Starting Instructions scene");
            break;
        case config.Scene.LEVEL1:
            stage.removeAllEventListeners()
            stage.removeAllChildren();
            currentScene = new scenes.Level1();
            console.log("Starting LEVEL1 scene");
            break;
        case config.Scene.LEVEL2:
            stage.removeAllEventListeners()
            stage.removeAllChildren();
            currentScene = new scenes.Level2();
            console.log("Starting LEVEL2 scene");
            break;
        case config.Scene.GAMEOVER:
            stage.removeAllChildren();
            currentScene = new scenes.GameOver();
            console.log("Starting GAMEOVER scene");
            break;
        case config.Scene.GAMEWIN:
            stage.removeAllChildren();
            currentScene = new scenes.GameWin();
            console.log("Starting GAMEWIN scene");
            break;
        case config.Scene.LOADING1:
            stage.removeAllChildren();
            currentScene = new scenes.LoadingScreen1();
            console.log("Starting LOADING1 scene");
            break;
        case config.Scene.LOADING2:
            stage.removeAllChildren();
            currentScene = new scenes.LoadingScreen2();
            console.log("Starting


                    }
                    if (sku != null && name != null) label = 'SKU: $sku • $name';
                    else if (sku != null) label = 'SKU: $sku';
                    else if (name != null) label = name;
                  } catch (_) {}
                  if (label == null) return const SizedBox.shrink();
                  return Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        label,
                        style: TextStyle(fontSize: 12, color: Colors.grey[600]),
                        maxLines: 1,
                        overflow: TextOverflow.ellipsis,
                      ),
                      const SizedBox(height: 4),
                    ],
                  );
                }),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Text(
                      CurrencyFormatter.format(product.priceData.currentPrice),
                      style: const TextStyle(
                        fontSize: 14,
                        fontWeight: FontWeight.w600,
                        color: Color(0xFF4CAF50),
                      ),
                    ),
                    Text(
                      'x${product.quantity}',
                      style: TextStyle(
                        fontSize: 12,
                        color: Colors.grey[600],
                      ),
                    ),
                  ],
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }

  Widget _buildTotalSummary() {
    final deliveryFee = deliveryState is DeliveryLoaded
        ? (deliveryState as DeliveryLoaded).totalDeliveryFee
        : 0.0;
    double discountedSubtotal = 0;
    for (final shop in previewOrderData.listCartItem) {
      final applied = appliedVouchers?[shop.shopId];
      if (applied != null && applied.isApplied) {
        discountedSubtotal += applied.finalAmount;
      } else {
        discountedSubtotal += shop.totalPriceInShop;
      }
    }
    final double voucherDiscount = (previewOrderData.subTotal - discountedSubtotal).clamp(0, double.infinity);
    final double finalTotal = discountedSubtotal + deliveryFee;

    return Padding(
      padding: const EdgeInsets.all(16),
      child: Column(
        children: [
          _buildSummaryRow(
            'Tạm tính',
            CurrencyFormatter.format(previewOrderData.subTotal),
          ),
          const SizedBox(height: 8),
      _buildDeliveryFeeRow(deliveryFee),
          const SizedBox(height: 8),
      if (voucherDiscount > 0) ...[
            _buildSummaryRow(
              'Giảm giá',
        '-${CurrencyFormatter.format(voucherDiscount)}',
              isDiscount: true,
            ),
            const SizedBox(height: 8),
          ],
          const Divider(),
          const SizedBox(height: 8),
          _buildSummaryRow(
            'Tổng cộng',
            CurrencyFormatter.format(finalTotal),
            isTotal: true,
          ),
        ],
      ),
    );
  }

  Widget _buildDeliveryFeeRow(double deliveryFee) {
    if (deliveryState is! DeliveryLoaded) {
      return _buildSummaryRow(
        'Phí vận chuyển',
        'Tính khi chọn',
        isDeliveryFee: true,
      );
    }

    return _buildSummaryRow(
      'Phí vận chuyển',
      deliveryFee > 0
          ? CurrencyFormatter.format(deliveryFee)
          : 'Chưa chọn',
      isDeliveryFee: true,
    );
  }

  Widget _buildSummaryRow(
    String label,
    String value, {
    bool isTotal = false,
    bool isDiscount = false,
    bool isDeliveryFee = false,
  }) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Text(
          label,
          style: TextStyle(
            fontSize: isTotal ? 16 : 14,


player
    AAvatar *avatar = Cast<AAvatar>(
        UGameplayStatics::GetPlayerPawn(GetWorld(), 0));
    if (!avatar) return;

    FVector playerPos = avatar->GetActorLocation();
    FVector toPlayer = playerPos - GetActorLocation();
    float distanceToPlayer = toPlayer.Size();
    AMonsterAIController* controller = Cast<AMonsterAIController>(GetController());

    // If the player is not the SightSphere of the monster,
    // go back
    if (distanceToPlayer > SightSphere->GetScaledSphereRadius())
    {
        // If the player is OS, then the enemy cannot chase
        if (controller != nullptr)
        {
            controller->SetAttackRange(false);
            controller->SetFollowRange(false);
        }
        return;
    }

    toPlayer /= distanceToPlayer;  // normalizes the vector

                                   // At least face the target
                                   // Gets you the rotator to turn something
                                   // that looks in the `toPlayer` direction
    FRotator toPlayerRotation = toPlayer.Rotation();
    toPlayerRotation.Pitch = 0; // 0 off the pitch
    RootComponent->SetWorldRotation(toPlayerRotation);

    if (isInAttackRange(distanceToPlayer))
    {
        if (controller != nullptr)
        {
            controller->SetAttackRange(true);
        }

        // Perform the attack
        if (!TimeSinceLastStrike)
        {
            Attack(avatar);
        }

        TimeSinceLastStrike += DeltaSeconds;
        if (TimeSinceLastStrike > AttackTimeout)
        {
            TimeSinceLastStrike = 0;
        }

        return;  // nothing else to do
    }
    else
    {
        // not in attack range, so walk towards player
        //AddMovementInput(toPlayer, Speed*DeltaSeconds);

        if (controller != nullptr)
        {
            controller->SetAttackRange(false);
            controller->SetFollowRange(true);
        }
    }
}
```

The changes are to set the values for both the attack and follow ranges. The code for attacking is still in there, but if you move TimeSinceLastStrike and AttackTimeout into the Blackboard, you can use that to move all that functionality into a `BTTask`. Now make sure everything compiles.

*   一旦编译完成，你需要打开`BP_Monster`蓝图，这样设置行为树(如果你想让单个怪物不一样，也可以在单个怪物上设置):

![](img/c3c7768e-704d-47e1-a96d-31ae6e04bce5.png)

还要确保人工智能控制器设置为 MonsterAIController。如果你在这一点上运行游戏，功能应该是相同的，但是行为树将控制玩家的跟随。

如果你想了解更多，考虑将`Attack`代码移入`BTTask`类，并研究当你在范围之外的时候怪物能做什么(阅读下一节中可能有帮助的内容)。

# 环境查询系统

**环境查询系统** ( **EQS** )是新的，仍处于试验阶段。它们允许您在行为树中创建一个查询，以便在一个级别中搜索项目，并找到最符合


        Json json = new Json();
        json.setMsg("获取数据成功。");
        json.setCode(0);
        json.setCount(num);
        json.setData(list);
        json.setSuccess(true);
        this.writeJson(response,json);
    }

    /**
     * @Description: findList
     * @Param: [request, response]
     * @return: void
     * @Author: 青锋
     * @Date: 2018-12-30 20:41
     */
    @RequestMapping(value = "/findList", method = RequestMethod.GET)
    public void findList(HttpServletRequest request,HttpServletResponse response) throws IOException  {
        PageData pd = new PageData(request);

        List<PageData> list = familyService.findList(pd);
        Json json = new Json();
        json.setMsg("获取数据成功。");
        json.setData(list);
        json.setSuccess(true);
        this.writeJson(response,json);
    }

    /**
     * @Description: findInfo
     * @Param: [map, request]
     * @return: java.lang.String
     * @Author: 青锋
     * @Date: 2018-12-30 20:41
     */
    @RequestMapping(value = "/findInfo", method = RequestMethod.GET)
    public String findInfo(ModelMap map,HttpServletRequest request)  {
        PageData pd = new PageData(request);
        PageData p = familyService.findInfo(pd);
        map.addAttribute("p",p);
        return "web/gen/family/family_info";
    }

    /**
     * @Description: toAdd
     * @Param: [map, request]
     * @return: java.lang.String
     * @Author: 青锋
     * @Date: 2018-12-30 20:41
     */
    @RequestMapping(value = "/toAdd", method = RequestMethod.GET)
    public String toAdd(ModelMap map,HttpServletRequest request)  {
        PageData pd = new PageData(request);
        map.put("pd",pd);
        return "web/gen/family/family_add";
    }

    /**
     * @Description: save
     * @Param: [request, response, session]
     * @return: void
     * @Author: 青锋
     * @Date: 2018-12-30 20:42
     */
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public void save(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException  {
        PageData pd = new PageData(request);

        String time = DateTimeUtil.getDateTimeStr();
        pd.put("create_time", time);
        pd.put("update_time", time);
        pd.put("status","Y");
        //处理数据权限
        PageData user = (PageData) session.getAttribute("loginUser");
        pd.put("create_user",user.get("id"));
        pd.put("create_organize",user.get("organize_id"));
        pd.put("create_org_cascade",user.get("org_cascade"));
        int num = familyService.save(pd);
        Json json = new Json();
        json.setCode(num);
        json.setSuccess(true);
        json.setMsg("操作成功。");
        this.writeJson(response,json);
    }

    /**
     * @Description: toUpdate
     * @Param: [map, request]
     * @return: java.lang.String
     * @Author: 青锋
     * @Date: 2018-12-30 20:42
     */
    @RequestMapping(value = "/toUpdate", method = RequestMethod.GET)
    public String toUpdate(ModelMap map,HttpServletRequest request)  {
        PageData pd = new PageData(request);
        PageData p = family


#ifndef _NODETYPE_INCLUDED_
#define _NODETYPE_INCLUDED_

typedef USHORT NODE_TYPE_CODE;
typedef NODE_TYPE_CODE *PNODE_TYPE_CODE;
typedef CSHORT NODE_BYTE_SIZE;

#ifndef NodeType
#define NodeType(Ptr) (*((PNODE_TYPE_CODE)(Ptr)))
#endif

typedef struct _NODE_TYPE_CODE_AND_SIZE_NO_REFCOUNT
{
    NODE_TYPE_CODE NodeTypeCode;
    NODE_BYTE_SIZE NodeByteSize;
}  NODE_TYPE_CODE_AND_SIZE_NO_REFCOUNT;

typedef struct _NODE_TYPE_CODE_AND_SIZE
{
    NODE_TYPE_CODE_AND_SIZE_NO_REFCOUNT;
    volatile ULONG NodeReferenceCount;
} NODE_TYPE_CODE_AND_SIZE, *PNODE_TYPE_AND_SIZE;

#define ZeroAndInitializeNodeType(Node, Type, Size) \
{ \
        RtlZeroMemory(Node, Size); \
        ((NODE_TYPE_CODE_AND_SIZE *)(Node))->NodeTypeCode = Type; \
        ((NODE_TYPE_CODE_AND_SIZE *)(Node))->NodeByteSize = (CSHORT)Size; \
}

#define RDBSS_STORAGE_NTC(x) (0xec00 + (x))

typedef enum _RX_FILE_TYPE
{
    FileTypeNotYetKnown = 0,
    FileTypeDirectory = 2,
    FileTypeFile = 3
} RX_FILE_TYPE;

#define RDBSS_NTC_STORAGE_TYPE_UNKNOWN ((NODE_TYPE_CODE)0xec00)
#define RDBSS_NTC_STORAGE_TYPE_DIRECTORY ((NODE_TYPE_CODE)0xec02)
#define RDBSS_NTC_STORAGE_TYPE_FILE ((NODE_TYPE_CODE)0xec03)
#define RDBSS_NTC_OPENTARGETDIR_FCB ((NODE_TYPE_CODE)0xecff)
#define RDBSS_NTC_IPC_SHARE ((NODE_TYPE_CODE)0xecfe)
#define RDBSS_NTC_MAILSLOT ((NODE_TYPE_CODE)0xecfd)
#define RDBSS_NTC_SPOOLFILE ((NODE_TYPE_CODE)0xecfc)
#define RDBSS_NTC_SRVCALL ((NODE_TYPE_CODE)0xeb10)
#define RDBSS_NTC_NETROOT ((NODE_TYPE_CODE)0xeb11)
#define RDBSS_NTC_V_NETROOT ((NODE_TYPE_CODE)0xeb12)
#define RDBSS_NTC_VOLUME_FCB ((NODE_TYPE_CODE)0xeb1f)
#define RDBSS_NTC_SRVOPEN ((NODE_TYPE_CODE)0xeb1c)
#define RDBSS_NTC_INTERNAL_SRVOPEN ((NODE_TYPE_CODE)0xeb1d)
#define RDBSS_NTC_DEVICE_FCB ((NODE_TYPE_CODE)0xeb9a)
#define RDBSS_NTC_DATA_HEADER ((NODE_TYPE_CODE)0xeb00)
#define RDBSS_NTC_VCB ((NODE_TYPE_CODE)0xeb01)
#define RDBSS_NTC_FOBX ((NODE_TYPE_CODE)0xeb07)
#define RDBSS_NTC_RX_CONTEXT ((NODE_TYPE_CODE)0xeb08)
#define RDBSS_NTC_PREFIX_TABLE ((NODE_TYPE_CODE)0xeb0d)
#define RDBSS_NTC_PREFIX_ENTRY ((NODE_TYPE_CODE)0xeb0e)
#define RDBSS_NTC_FCB_TABLE ((NODE_TYPE_CODE)0xeb09)
#define RDBSS_NTC_FCB_TABLE_ENTRY ((NODE_TYPE_CODE)0xeb0a)
#define RDBSS_NTC_NONPAGED_FCB ((NODE_TYPE_CODE)0xebfd)
#define RDBSS_NTC_MINIRDR_DISPATCH ((NODE_TYPE_CODE)0xebff)

#define RDBSS_NTC_FCB RDBSS_NTC_STORAGE_TYPE_FILE

#define NodeTypeIsFcb(FCB) ((((NodeType(FCB) & 0xff00) == RDBSS_NTC_STORAGE_TYPE_UNKNOWN)) || ((NodeType(FCB) & 0xfff0) == 0xeb90))

#define RX_SCAVENGER_MASK (0x1000)

typedef enum _RDBSS_BUG_CHECK_CODES
{
     RDBSS_BUG_CHECK_FCBSTRUC = 0xfcb00000,
     RDBSS_BUG_CHECK_CACHESUP = 0xca550000,
     RDBSS_BUG_CHECK_CLEANUP = 0xc1ee0000,
     RDBSS_BUG_CHECK_CLOSE = 0xc10e0000,
     RDBSS_BUG_CHECK_NTEXCEPT = 0xbaad0000,
#ifdef __REACTOS__
     RDBSS_BUG_CHECK_ASSERT = 0xa55a0000,
#endif
} RDBSS_BUG_CHECK_CODES;

#define RDBSS_FILE_SYSTEM RDR_FILE_SYSTEM

#define RxBugCheck(A, B, C) KeBugCheckEx(RDBSS_FILE_SYSTEM, BugCheckFileId | ((ULONG)(__LINE__)), A, B, C)

#endif


TX_DMA, DISTORTOS_CHIP_SPI1_TX_DMA_CHANNEL),
		DISTORTOS_CHIP_SPI1_TX_DMA_REQUEST
};

#else	// !def DISTORTOS_CHIP_SPI1_DMA_BASED

SpiMasterLowLevelInterruptBased spi1 {spi1Peripheral};

/**
 * \brief SPI1 interrupt handler
 */

extern "C" void SPI1_IRQHandler()
{
	spi1.interruptHandler();
}

#endif	// !def DISTORTOS_CHIP_SPI1_DMA_BASED

#endif	// def DISTORTOS_CHIP_SPI1_ENABLE

#ifdef DISTORTOS_CHIP_SPI2_ENABLE

/*---------------------------------------------------------------------------------------------------------------------+
| SPI2
+---------------------------------------------------------------------------------------------------------------------*/

namespace
{

/**
 * \brief Low-level chip initializer for SPI2
 *
 * This function is called before constructors for global and static objects via BIND_LOW_LEVEL_INITIALIZER().
 */

void spi2LowLevelInitializer()
{
#if defined(RCC_APB1ENR_SPI2EN)
	RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;
#elif defined(RCC_APB2ENR_SPI2EN)
	RCC->APB2ENR |= RCC_APB2ENR_SPI2EN;
#else
	#error "Unsupported bus for SPI2!"
#endif
}

BIND_LOW_LEVEL_INITIALIZER(50, spi2LowLevelInitializer);

/// raw SPI2 peripheral
const SpiPeripheral spi2Peripheral {SPI2_BASE};

}	// namespace

#ifdef DISTORTOS_CHIP_SPI2_DMA_BASED

SpiMasterLowLevelDmaBased spi2
{
		spi2Peripheral,
		DMA_CHANNEL(DISTORTOS_CHIP_SPI2_RX_DMA, DISTORTOS_CHIP_SPI2_RX_DMA_CHANNEL),
		DISTORTOS_CHIP_SPI2_RX_DMA_REQUEST,
		DMA_CHANNEL(DISTORTOS_CHIP_SPI2_TX_DMA, DISTORTOS_CHIP_SPI2_TX_DMA_CHANNEL),
		DISTORTOS_CHIP_SPI2_TX_DMA_REQUEST
};

#else	// !def DISTORTOS_CHIP_SPI2_DMA_BASED

SpiMasterLowLevelInterruptBased spi2 {spi2Peripheral};

/**
 * \brief SPI2 interrupt handler
 */

extern "C" void SPI2_IRQHandler()
{
	spi2.interruptHandler();
}

#endif	// !def DISTORTOS_CHIP_SPI2_DMA_BASED

#endif	// def DISTORTOS_CHIP_SPI2_ENABLE

}	// namespace chip

}	// namespace distortos
/**
 * \file
 * \brief Definitions of low-level DMA channel drivers for DMAv2 in ST,NUCLEO-F767ZI (ST,STM32F767ZI chip)
 *
 * \author Copyright (C) 2018-2019 Kamil Szczygiel https://distortec.com https://freddiechopin.info
 *
 * \par License
 * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not
 * distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
 *
 * \warning
 * Automatically generated file - do not edit!
 */

#include "distortos/chip/dmas.hpp"

#include "distortos/chip/DmaChannel.hpp"
#include "distortos/chip/STM32-DMAv2-DmaChannelPeripheral.hpp"
#include "distortos/chip/STM32-DMAv2-DmaPeripheral.hpp"

#include "distortos/BIND_LOW_LEVEL_INITIALIZER.h"

namespace distortos
{

namespace chip
{

#ifdef DISTORTOS_CHIP_DMA1_ENABLE

/*---------------------------------------------------------------------------------------------------------------------+
| DMA1
+---------------------------------------------------------------------------------------------------------------------*/

namespace
{

/**
 * \brief Low-level chip initializer for DMA1
 *
 * This function is called before constructors for global and static objects via BIND_LOW_LEVEL_INITIALIZER().
 */

void dma1LowLevelInitializer()
{
#if defined(RCC_AHB1ENR_DMA1EN)
	RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN;
#elif defined(RCC_AHBENR_DMA1EN)
	RC


if (Model.CanRename && Title != value)
                {
                    if (!string.IsNullOrEmpty(value))
                    {
                        Model.Name = value;
                    }
                    else
                    {
                        throw new Exception("Name must have a length of at least 1.");
                    }
                }
            }
        }

        protected new T Model
        {
            get { return (T)base.Model; }
            set { base.Model = value; }
        }
    }
}


,pixel_eqs_str:'a.it=.3*a.bass_att;a.radm=500*a.rad;a.rot=div(-.02*Math.tan(30*(a.radm+a.it)),500*(a.rad+.1)*a.bass_att);a["var"]=2-Math.atan(4*a.bass_att);a.mod=Math.atan(a.ang*a["var"])+2*a.bass_att;a.mod=a.mod*Math.cos(a.rad)-Math.cos(a.ang);a.zoom=.89+Math.abs(.02*a.mod)+.01*a.bass_att;',warp:" shader_body { \n  vec2 my_uv_1;\n  float dy_2;\n  float dx_3;\n  vec3 ret_4;\n  vec2 tmpvar_5;\n  tmpvar_5 = (texsize.zw * 12.0);\n  vec2 tmpvar_6;\n  tmpvar_6.x = (((texture (sampler_blur2, \n    ((uv + (vec2(1.0, 0.0) * tmpvar_5)) - floor((uv + (vec2(1.0, 0.0) * tmpvar_5))))\n  ).xyz * scale2) + bias2) - ((texture (sampler_blur2, \n    ((uv - (vec2(1.0, 0.0) * tmpvar_5)) - floor((uv - (vec2(1.0, 0.0) * tmpvar_5))))\n  ).xyz * scale2) + bias2)).y;\n  tmpvar_6.y = (((texture (sampler_blur2, \n    ((uv + (vec2(0.0, 1.0) * tmpvar_5)) - floor((uv + (vec2(0.0, 1.0) * tmpvar_5))))\n  ).xyz * scale2) + bias2) - ((texture (sampler_blur2, \n    ((uv - (vec2(0.0, 1.0) * tmpvar_5)) - floor((uv - (vec2(0.0, 1.0) * tmpvar_5))))\n  ).xyz * scale2) + bias2)).y;\n  vec2 tmpvar_7;\n  tmpvar_7 = (uv - (tmpvar_6 * 0.08));\n  ret_4.y = texture (sampler_fc_main, (tmpvar_7 - floor(tmpvar_7))).y;\n  ret_4.y = (ret_4.y + ((\n    (ret_4.y - ((texture (sampler_blur1, (tmpvar_7 - \n      floor(tmpvar_7)\n    )).xyz * scale1) + bias1).y)\n   * 0.125) + 0.02));\n  dx_3 = (((\n    ((texture (sampler_blur2, (uv + vec2(0.01, 0.0))).xyz * scale2) + bias2)\n   - \n    ((texture (sampler_blur2, (uv - vec2(0.01, 0.0))).xyz * scale2) + bias2)\n  ).x * 1280.0) * texsize.z);\n  dy_2 = (((\n    ((texture (sampler_blur2, (uv + vec2(0.0, 0.01))).xyz * scale2) + bias2)\n   - \n    ((texture (sampler_blur2, (uv - vec2(0.0, 0.01))).xyz * scale2) + bias2)\n  ).x * 1024.0) * texsize.w);\n  vec2 tmpvar_8;\n  tmpvar_8.x = dx_3;\n  tmpvar_8.y = dy_2;\n  my_uv_1 = (uv + (tmpvar_8 * 0.01));\n  ret_4.x = texture (sampler_fw_main, my_uv_1).


rt function div(a: AutoGradNode | number, b: AutoGradNode | number) {
    return new AutoGradNode(AutoGradNodeType.DIV, [wrap(a), wrap(b)]);
}

export function pow(a: AutoGradNode | number, b: number) {
    return new AutoGradNode(AutoGradNodeType.POW, [wrap(a), wrap(b)]);
}

export function exp(a: AutoGradNode | number) {
    return new AutoGradNode(AutoGradNodeType.EXP, [wrap(a)]);
}

export function log(a: AutoGradNode | number) {
    return new AutoGradNode(AutoGradNodeType.LOG, [wrap(a)]);
}

export function reLU(a: AutoGradNode | number) {
    return new AutoGradNode(AutoGradNodeType.RE_LU, [wrap(a)]);
}

export function tanh(a: AutoGradNode | number) {
    return new AutoGradNode(AutoGradNodeType.TANH, [wrap(a)]);
}

export function forward(...nodes: AutoGradNode[]) {
    const headStack: AutoGradNode[] = [...nodes];
    const tailStack: AutoGradNode[] = [];
    const calculated: Set<AutoGradNode> = new Set<AutoGradNode>();
    for (; ;) {
        let childrenCalculated = false;
        let node = headStack.pop();
        if (!node) {
            node = tailStack.pop();
            childrenCalculated = true;
        }
        if (!node) {
            break;
        }
        if (node.type === AutoGradNodeType.VARIABLE) {
            continue;
        }
        if (calculated.has(node)) {
            continue;
        }
        if (!childrenCalculated) {
            tailStack.push(node);
            node.children?.forEach(child => headStack.push(child));
        } else {
            nodeProcessFunctions[node.type].forward(node);
            calculated.add(node);
        }
    }
}

export function zeroGrad(...nodes: AutoGradNode[]) {
    const headStack: AutoGradNode[] = [...nodes];
    const tailStack: AutoGradNode[] = [];
    for (; ;) {
        let childrenVisited = false;
        let node = headStack.pop();
        if (!node) {
            node = tailStack.pop();
            childrenVisited = true;
        }
        if (!node) {
            break;
        }
        if (!childrenVisited) {
            tailStack.push(node);
            node.children?.forEach(child => headStack.push(child));
        } else {
            node.grad = 0;
        }
    }
}

export function backward(...nodes: AutoGradNode[]) {
    const headStack: AutoGradNode[] = [...nodes];
    const tailStack: AutoGradNode[] = [];
    const visited: Set<AutoGradNode> = new Set<AutoGradNode>();
    const topo: AutoGradNode[] = [];
    for (; ;) {
        let childrenVisited = false;
        let node = headStack.pop();
        if (!node) {
            node = tailStack.pop();
            childrenVisited = true;
        }
        if (!node) {
            break;
        }
        if (visited.has(node)) {
            continue;
        }
        if (!childrenVisited) {
            tailStack.push(node);
            node.children?.forEach(child => headStack.push(child));
        } else {
            visited.add(node);
            topo.unshift(node);
        }
    }
    topo.forEach(node => {
        if (node.type !== AutoGradNodeType.VARIABLE) {
            nodeProcessFunctions[node.type].backward(node);
        }
    });
}
import { Router, Request, Response } from "express";
import { default as bcrypt


u003eTime evolution of the characteristic wave numbers \u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"\u003e\u003cmo stretchy=\"false\"\u003e(\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ek\u003c/mi\u003e\u003cmo stretchy=\"false\"\u003e∥\u003c/mo\u003e\u003c/msub\u003e\u003cmo\u003e,\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ek\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003eB\u003c/mi\u003e\u003cmo\u003e·\u003c/mo\u003e\u003cmi\u003eJ\u003c/mi\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003cmo\u003e,\u003c/mo\u003e\u003cmsub\u003e\u003cmi\u003ek\u003c/mi\u003e\u003cmrow\u003e\u003cmi\u003eB\u003c/mi\u003e\u003cmo\u003e×\u003c/mo\u003e\u003cmi\u003eJ\u003c/mi\u003e\u003c/mrow\u003e\u003c/msub\u003e\u003cmo stretchy=\"false\"\u003e)\u003c/mo\u003e\u003c/math\u003e describing the magnetic field [see Eq. (\u003ca href=\"#d19\"\u003e19\u003c/a\u003e)] and \u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"\u003e\u003cmsub\u003e\u003cmi\u003ek\u003c/mi\u003e\u003cmi\u003eu\u003c/mi\u003e\u003c/msub\u003e\u003c/math\u003e describing the small-scale structure of the velocity field [see Eq. (\u003ca href=\"#d20\"\u003e20\u003c/a\u003e)] at \u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"\u003e\u003cmi\u003ePm\u003c/mi\u003e\u003cmo\u003e=\u003c/mo\u003e\u003cmn\u003e10\u003c/mn\u003e\u003c/math\u003e and resolutions \u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"\u003e\u003cmsup\u003e\u003cmn\u003e560\u003c/mn\u003e\u003cmn\u003e3\u003c/mn\u003e\u003c/msup\u003e\u003c/math\u003e and \u003cmath xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"inline\"\u003e\u003cmsup\u003e\u003cmn\u003e2240\u003c/mn\u003e\u003cmn\u003e3\u003c/mn\u003e\u003c/msup\u003e\u003c/math\u003e.\u003c/p\u003e","xml":"\u003ccaption xmlns:m=\"http://www.w3.org/1998/Math/MathML\" xmlns:mml=\"http://www.w3.org/1998/Math/MathML\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"\u003e\n\u003cp\u003eTime evolution of the characteristic wave numbers \u003cinline-formula\u003e\u003cmml:math display=\"inline\"\u003e\u003cmml:mo stretchy=\"false\"\u003e(\u003c/mml:mo\u003e\u003cmml:msub\u003e\u003cmml:mi\u003ek\u003c/mml:mi\u003e\u003cmml:mo stretch


\
T\x8b'\xd3\xb0\xd8th\x8dro\x02\xea\x03\x9a2\
\xf7\xfe\xca\xa0\xcb\x9c+?4e\x18\xc2\x9c\x80e\x02\
$[c\x8f\xdd\x0e\xf6\xa3\xf9j\x14)\x19\xd5\x8c\x04\
\x22\xa1']m\xa0\x87\x96\xd9\x01\xd4\x5c1\x87\xe1h\
\x8f\x98\x83s\x82.\xec\xddM+\x09\xb8\xea\xcc\xa3W\
\x9e\xdc\xfe$\xfc\x9cqHO\xb2\xdc\xc0[\xa7O\xc7\
r\xf3\x02s\xdf\x90\xfa\x81\xb5f\x9c\x8a\xe3\xf560\
\x00\x1cG\xc3z:Cu\xa0\x80\xbd\xe1~8\xf2X\
`0\xdc.'\xdc<\xbbE\x8f\x03\xe8\x8b\xf7;\x1e\
\x1f\xef\xe1\x98x\xfd\xee\xbb8\xd9\x80y\x87er\x08\
\x87\x184sO\xdf\xc1\xa0\xc9\xe3\xbd\xcf\xc3\xbf\xa8\xe8\
\xfb\x03\x96\xb5b=\xdf\xa2\xe6\x15\xa7R\xf1\xfa\xe1\x15\
\xd2\x17_\xc1\x8d\x09\xb6\xa2\x19\xfbh\xb01q\xff@\
\x0f\xbe\xfb\x1d\xa4\x1a\xa6t\x0eFM cG\x8a\xb5\
jIg\xdc\xefw\x90\xfe\x80\x84g\x91\xdb\x80`\x10\
\x0e@ivQWJ\xa0Sz\x22\x00\xa9&\x0eq\
\xf7\x07TKA\x97\x06\x80\x81\x94\x18\xf3\x96WC\x9f\
\xe40L\x11\xf4\xe6d\x14l\x1btLtY\xe0\xbd\
A\xe7\x06LA)\x19\xdd\x04\xed\xf1\xc0\xe9\xf6\x05\xee\
B\x999\x1c\x90N4\xfc\xf9\xb4@\x92\xe0\xbd\xc7\x03\
5)\x9e\x9d\x15\x19\x19\x1fy\xe7\x19\x9e\xdd\x18\xb5\x02\
V\xf1\xee\x17\xdeE\xdb\x1c\xb5T\x98\x90\xc0TKA\
^\x16\xbc\xbe\x7f\x84:8[J\x5c\x8b\x8a\x17\x98\x14\
\x88\xd1\x04\x07\x89\x10Z\xb5\xa8\x02,Z\x81XM\x8f\
\xc1T_\x01\x83M\x06\xb8\xad\x02\xd0E1mb(\
\x09L\x22\x06\xb5\x11\x97\xa5\x02V\xd1\x1c\xaf\xf0\x9b\xfc\
\xf5\x0f=\x00\x1c\xf2\x8b}\x1c_\x8f9BC\xbfc\
\x09[\xa8\xaa\x22'AV`D@\x88\xcdA\x00\x82\
\xf2\xc3\x18`\xce\x9djaY-\xbc\xf95\x0b0\x9c\
\x0f\xc7\x10\x5c\xb6\x8d\xed\x81\x0b#\x94S\x22\xf8\xd1\x12\
\xb7n\xbd\x01I\xde\x1fB\x0dV\x17\x92\x08\xd3\xdc\x8f\
\x86\xa9\x065\xde\x5cs:\xd6%\xe3a{\x80\xe8\x82\
\xe6@Q\xaa\xcfL\x15\xb5\xd8\x13\x92L\xc5\xb8\xba\x1a\
,\xf9\xe9?\xa0\xb2\xef\x8a\xc2\xeas\xf2\xd4n-\xd2\
\x84\x98\xb17\x86#\x89S\xb81&\x1e\x1ev,\xcf\
\xc24\x92*\xc4\xef\x90\x94\xc9\xb0\x13FHG\xa6\x96\
\xc1L\x89\x1c\x9f\x1b\x9e\xad\x8a\xb7\x9e=\xc7\xfd\x0e\xd4\
\xf3\x09\xf7\x1b\xff\x9cU'0\x1cu\xbd\xc1\x17\xee\xef\
\x91\x8b`\x11\xa7q\xc7\xa8t,\xeb\x09\x8f\xaf7\xe4\
4\x88\x89\x9a\x1e\xf6`EUA\x9a\x0d\xed\xee\x0e6\
6\xa8\x18>\xf7\xf2\x01\xaa\x19o\xdezx\xcc\x13T\
\x17\xdc\xef\xc0M\x1f\x90E8\xe9\x1e\x1dV\x15\x96&\
Rr\xb4\x83-\xd5q\xecd&\x0ea\xab\x00@\x0c\
\xf0\xc6\xf4\xa2R+\xe6p\x8c\xd1\xe0\x98Xonq\
\xb9\xbf\xe3\xfc\x03\xc0\xbe]`L\x19}Zo\xf51\
h\xd5\x96h\xb1J\xc2<\x1cyI\x94:\x8f\x86\xcb\
\xe3K\xa4T\xc8\x1d\xd8\x1fQ\xd0q\xb8A]\x90\xe0\
\xc8:p\x5c.x~^py`\xdea\xae\x19\x8f\
_|\x0f\xd6/\xb8\xad\x86\xdf\xf5\xe1\x0a\x9d\x07\x9e\x9d\
\x12NK\xa5p\xab5h*\x10U\xbc\xf7\xea\x01\xaf\
\xef\x1e\xf1\xe17\x9f!\x17\xc3\xf9\xfc\x1cuQLI\
x|u\x07\x1b\x01\xff\xc5\xa8\xd4\xac.\x00\x00 \x00\
IDAT\x84(\xa0\xceD)\x05`\xd9\xd0\x1a\xb7\
C\xd3\x19\xd4\xe2\xfd\x80&V\x95\xd7\x16\x90\xceY`\
\x1a[\xa8\x949\xf3R\x07\xb2V\xb4FQ\x10d{\
zEE\x153U\x88\xd5\xff\xf57\xfb\x00\xf8\x87f\
\x03zJ\x7f9\x9d\xce()al;!!Ua\
\xd1\xc7\x9a\x09R\x9a\xc8\x16B\x9a\xe8o\x8e1\xd1\xc7\
@V&\xcc\xceI\xd0\x03s\xd8\x88\x0e\x03(Xi\
~\x00\x22\xa8\x86\xc8K\x17\xf6I\xee\x8cH\x12~\xa8\
\x16\xc9\xb3\x10\x85\x8a\xa1\xb7\x8e\x9c\x88\xebv\xd0m\xc6\
@\xd2\x86\xe1\x0d.\x07`\xc0\xd1'<\x0bZ\x1fX\
\x0b\xc5H\x22$\x1a%q\xd2x\xc3\xd2\xac\x16\xd2N\
u$\x9b\xcc$\x9c\x8e\xa4J\xc3\x93+\x1c,\xf9\xdd\
5z<\x85\x89\xe3\xd8.x\xf7s_\x80KF9\
=\x87h&\xd7M\xe9\x00\xbb\x7fl\x8c9\x9f\xa4\x17\
i\x08\x912e~\xd8\xef_\xe1v\xcd\x18\xdb=F\
\xdb\xf1p\xff\x881:^<?3\x16<e\xec\x9e\
1\xcb\x09\xcd\xc9\x09xc\xad(}\xa0\x0ag\x1aE\
\xe8\x94\x93\xbe#\xcb\xc4\xa9(\xaa?`\x95G\x14\x13\
d\x99\xc8e\xc5\xfd\xeexy\xf7\x80>\x1a\xb4d\xec\
n8\xb0\xe0\x18\x19\xc3-\x06_'L\xad\xe80\xec\
\x03\xe8\xe0\x01lY\x91L\x09r5\x9a`\xbc9r\
Za\xa5\xc2\xac2\x81X\xb8\x15\xb9l\x97@\xbe\x8d\
\xc8_0\xe4\xba\xe08\xf6\xa8\xa4$\x0e\xc6\x1ct%\
c\xaf,\xbc1%l\xb5\xb5\xde\xc0N\xcfX\x22O\
z\x08\xb24\xa4\xb9\xc3\xc6\x81s-\xf8\xd0[o\xa2\
\xf8\x81\xf3\xea\xc8r\xa0\xf4\x07\xfc\xce\xb7\xcf\xf8\xc8\x1b\
\x15/\x16`\xed\x17<\xcf#<\x12;\x8e\xfb;\x8c\
\x9dS\x9e\xfb\x87;\xbc\xf7\xc5\x97HZ\xa1\xa6\xa8\xa9\
p\xfa\xff\xec\x19\xee_\xde\xa1m\x1b\xe6\x95\xd2\x138\
{U\x12{L#\xc6>\xe0\xb8\xado\xacZ\x85\xcf\
2\x82\x98\x05\xa1em\x0c\xc7\xdc'|t\xb6:\xaa\
\x10\xa5\x91Lsz\xeaY-\xfe\x7fpKs\xe9\x9e\
\x7f\xf4\xb7\xb5\x02x\xdd\xc6\xa7r*8\x1e\x1f\xe1\xb3\
\xe18&\xf6\xad=\x81\x09\x99\xf2\x9bp\xb4Nn\x80\
\xf2m\xd2\xb8\x1dK\xce\xf01\x89Wv\xc2 a\x86\
\xd6\xb8zj\xada\x0e0$A\xa8\xac\xd3\x08H\xa1\
\xc8\xccQR\xc2\xde\x1a3\xd4\x87\xa3\xae9\x86q\x82\
9vL\x0f6\xc1\x1cH\x88,@(\xb6\xed@6\
&\xe1\x1a\x14\xa69VO\x13\xae\x13\xd7\x8e-\xa7\xc4\
\xa0\x12\xb3\x886\xe3\x8bnF\x11\x8a\x9a\x84\xd8\xa3\xc1\
L\xb1\x1d\x8d\xfa\xf49\x91\x8d/\xb1\x08\x83,\xef\xee\
\x1f\xf0\xeaq


from immlib import *

def main(args):

    imm = Debugger()

    bad_char_found = False

    # First argument is the address to begin our search
    address   = int(args[0],16)

    # Shellcode to verify
    shellcode        = "<<COPY AND PASTE YOUR SHELLCODE HERE>>"
    shellcode_length = len(shellcode)

    debug_shellcode = imm.readMemory( address, shellcode_length )
    debug_shellcode = debug_shellcode.encode("HEX")

    imm.log("Address: 0x%08x" % address)
    imm.log("Shellcode Length : %d" % length)

    imm.log("Attack Shellcode: %s"    % canvas_shellcode[:512])
    imm.log("In Memory Shellcode: %s" % id_shellcode[:512])

    # Begin a byte-by-byte comparison of the two shellcode buffers
    count = 0
    while count <= shellcode_length:

        if debug_shellcode[count] != shellcode[count]:

            imm.log("Bad Char Detected at offset %d" % count)
            bad_char_found = True
            break

        count += 1

    if bad_char_found:
        imm.log("[*****] ")
        imm.log("Bad character found: %s" % debug_shellcode[count])
        imm.log("Bad character original: %s" % shellcode[count])
        imm.log("[*****] ")

    return "[*] !badchar finished, check Log window."


instead"
			},
			[2]={
				limit={
					[1]={
						[1]=100,
						[2]="#"
					}
				},
				text="In Heists Orbs of Alteration drop as Chaos Orbs instead"
			}
		},
		stats={
			[1]="heist_currency_alteration_drops_as_chaos_%"
		}
	},
	[6268]={
		[1]={
			[1]={
				limit={
					[1]={
						[1]=1,
						[2]="#"
					}
				},
				text="{0}% chance in Heists for Orbs of Alteration to drop as Regal Orbs instead"
			},
			[2]={
				limit={
					[1]={
						[1]=100,
						[2]="#"
					}
				},
				text="In Heists Orbs of Alteration drop as Regal Orbs instead"
			}
		},
		stats={
			[1]="heist_currency_alteration_drops_as_regal_%"
		}
	},
	[6269]={
		[1]={
			[1]={
				limit={
					[1]={
						[1]=1,
						[2]="#"
					}
				},
				text="{0}% chance in Heists for Orbs of Augmentation to drop as Orbs of Alchemy instead"
			},
			[2]={
				limit={
					[1]={
						[1]=100,
						[2]="#"
					}
				},
				text="In Heists Orbs of Augmentation drop as Orbs of Alchemy instead"
			}
		},
		stats={
			[1]="heist_currency_augmentation_drops_as_alchemy_%"
		}
	},
	[6270]={
		[1]={
			[1]={
				limit={
					[1]={
						[1]=1,
						[2]="#"
					}
				},
				text="{0}% chance in Heists for Orbs of Augmentation to drop as Chaos Orbs instead"
			},
			[2]={
				limit={
					[1]={
						[1]=100,
						[2]="#"
					}
				},
				text="In Heists Orbs of Augmentation drop as Chaos Orbs instead"
			}
		},
		stats={
			[1]="heist_currency_augmentation_drops_as_chaos_%"
		}
	},
	[6271]={
		[1]={
			[1]={
				limit={
					[1]={
						[1]=1,
						[2]="#"
					}
				},
				text="{0}% chance in Heists for Orbs of Augmentation to drop as Regal Orbs instead"
			},
			[2]={
				limit={
					[1]={
						[1]=100,
						[2]="#"
					}
				},
				text="In Heists Orbs of Augmentation drop as Regal Orbs instead"
			}
		},
		stats={
			[1]="heist_currency_augmentation_drops_as_regal_%"
		}
	},
	[6272]={
		[1]={
			[1]={
				limit={
					[1]={
						[1]=1,
						[2]="#"
					}
				},
				text="{0}% chance in Heists for Chaos Orbs to drop as Blessed Orbs instead"
			},
			[2]={
				limit={
					[1]={
						[1]=100,
						[2]="#"
					}
				},
				text="In Heists Chaos Orbs drop as Blessed Orbs instead"
			}
		},
		stats={
			[1]="heist_currency_chaos_drops_as_blessed_%"
		}
	},
	[6273]={
		[1]={
			[1]={
				limit={
					[1]={
						[1]=1,


450321": "阳朔县",
    "450323": "灵川县",
    "450324": "全州县",
    "450325": "兴安县",
    "450326": "永福县",
    "450327": "灌阳县",
    "450328": "龙胜各族自治县",
    "450329": "资源县",
    "450330": "平乐县",
    "450332": "恭城瑶族自治县",
    "450381": "荔浦市"
  },
  "450400": {
    "450401": "市辖区",
    "450403": "万秀区",
    "450405": "长洲区",
    "450406": "龙圩区",
    "450421": "苍梧县",
    "450422": "藤县",
    "450423": "蒙山县",
    "450481": "岑溪市"
  },
  "450500": {
    "450501": "市辖区",
    "450502": "海城区",
    "450503": "银海区",
    "450512": "铁山港区",
    "450521": "合浦县"
  },
  "450600": {
    "450601": "市辖区",
    "450602": "港口区",
    "450603": "防城区",
    "450621": "上思县",
    "450681": "东兴市"
  },
  "450700": {
    "450701": "市辖区",
    "450702": "钦南区",
    "450703": "钦北区",
    "450721": "灵山县",
    "450722": "浦北县"
  },
  "450800": {
    "450801": "市辖区",
    "450802": "港北区",
    "450803": "港南区",
    "450804": "覃塘区",
    "450821": "平南县",
    "450881": "桂平市"
  },
  "450900": {
    "450901": "市辖区",
    "450902": "玉州区",
    "450903": "福绵区",
    "450921": "容县",
    "450922": "陆川县",
    "450923": "博白县",
    "450924": "兴业县",
    "450981": "北流市"
  },
  "451000": {
    "451001": "市辖区",
    "451002": "右江区",
    "451003": "田阳区",
    "451022": "田东县",
    "451023": "平果县",
    "451024": "德保县",
    "451026": "那坡县",
    "451027": "凌云县",
    "451028": "乐业县",
    "451029": "田林县",
    "451030": "西林县",
    "451031": "隆林各族自治县",
    "451081": "靖西市"
  },
  "451100": {
    "451101": "市辖区",
    "451102": "八步区


enquanto um crescimento de 2.5% sobre uma população de 1000
pessoas resultará em 1025 pessoas. Além disso, não utilize variáveis de
precisão simples para as taxas de crescimento.

- Saída

Imprima, para cada caso de teste, quantos anos levará para que a cidade A
ultrapasse a cidade B em número de habitantes. Obs.: se o tempo for mais do
que 100 anos o programa deve apresentar a mensagem: Mais de 1 século. Neste
caso, é melhor interromper o programa imediatamente após passar de 100 anos,
caso contrário você poderá receber como resposta da submissão deste problema
"Time Limit Exceeded".
*/

using System;

class minhaClasse {
    static void Main(string[] args) {
        int t = Convert.ToInt32(Console.ReadLine());
        double[] arrayList = new double[4];
        int pa, pb;
        double cpa, cpb;
        int anos;

        for (int i = 0; i < t; i++) {
            anos = 0;
            string[] valores = Console.ReadLine().Split();
            pa = int.Parse(valores[0]);
            pb = int.Parse(valores[1]);
            cpa = double.Parse(valores[2]);
            cpb = double.Parse(valores[3]);

            while (pa <= pb && anos < 101) {
                pa += (int)((pa * cpa) / 100);
                pb += (int)((pb * cpb) / 100);
                anos++;

                if (anos > 100) {
                    Console.WriteLine("Mais de 1 seculo.");
                }
            }

            if (anos <= 100) {
                Console.WriteLine(anos + " anos.");
            }
        }
    }
}


  x0, x0, x2, eq
        csel    x1, x1, x3, eq
        stp     x0, x1, [acc]

        ldp     x0, x1, [x10, 1*16]
        ldp     x2, x3, [x11, 1*16]
        csel    x0, x0, x2, eq
        csel    x1, x1, x3, eq
        stp     x0, x1, [acc+1*16]

        ldp     x0, x1, [x10, 2*16]
        ldp     x2, x3, [x11, 2*16]
        csel    x0, x0, x2, eq
        csel    x1, x1, x3, eq
        stp     x0, x1, [acc+2*16]

        ldp     x0, x1, [x10, 3*16]
        ldp     x2, x3, [x11, 3*16]
        csel    x0, x0, x2, eq
        csel    x1, x1, x3, eq
        stp     x0, x1, [acc+3*16]

        mov     x0, #1
        stp     x0, xzr, [acc+4*16]
        stp     xzr, xzr, [acc+5*16]

        ldp     x0, x1, [x10, 4*16]
        ldp     x2, x3, [x11, 4*16]
        csel    x0, x0, x2, eq
        csel    x1, x1, x3, eq
        stp     x0, x1, [acc+6*16]

        ldp     x0, x1, [x10, 5*16]
        ldp     x2, x3, [x11, 5*16]
        csel    x0, x0, x2, eq
        csel    x1, x1, x3, eq
        stp     x0, x1, [acc+7*16]

// The counter "i" tracks the bit position for which the scalar has
// already been absorbed, starting at 0 and going up in chunks of 4.
//
// The pointer "tab" points at the current block of the table for
// multiples (2^i * j) * B at the current bit position i; 1 <= j <= 8.
//
// The bias is always either 0 and 1 and needs to be added to the
// partially processed scalar implicitly. This is used to absorb 4 bits
// of scalar per iteration from 3-bit table indexing by exploiting
// negation: (16 * h + l) * B = (16 * (h + 1) - (16 - l)) * B is used
// when l >= 9. Note that we can't have any bias left over at the
// end because we made sure bit 251 is clear in the reduced scalar.

        mov     i, 0
        adr     tab, edwards25519_scalarmulbase_edwards25519_gtable
        mov     bias, xzr

// Start of the main loop, repeated 63 times for i = 0, 4, 8, ..., 248

edwards25519_scalarmulbase_scalarloop:

// Look at the next 4-bit field "bf", adding the previous bias as well.
// Choose the table index "ix" as bf when bf <= 8 and 16 - bf for bf >= 9,
// setting the bias to 1 for the next iteration in the latter case.

        lsr     x0, i, #6
        ldr     x2, [sp, x0, lsl #3]    // Exploiting scalar = sp exactly
        lsr     x2, x2, i
        and     x2, x2, #15
        add     bf, x2, bias

        cmp     bf, 9
        cset    bias, cs

        mov     x0, 16
        sub     x0, x0, bf
        cmp     bias, xzr
        csel    ix, x0, bf, ne

// Perform constant-time lookup in the table to get element number "ix".
// The table entry for the affine point (x,


�勒误差的标准差（单位：Hz）。
      stats-errdoppler
      默认值：1

      Process Noises

      Receiver Accel Horiz/Vertical

        设置接收机加速度的处理噪声标准差作为水平或垂直分量（单位：m/s2/sqrt(s)）。如果接收机动态设置为关闭，则不使用这些值。

        stats-

        prnaccelh,

        prnaccelv

      默认值：1，0.1

      Carrier-Phase Bias
      设置载波相位偏差（模糊度）的处理噪声标准差（单位：cycle/sqrt(s)）。
      stats-prnbias
      默认值：1E-4

      Vertical Ionospheric Delay
      设置每10公里基线的垂直电离层延迟的处理噪声标准差（单位：m/sqrt(s)）。
      stats-prniono
      默认值：1E-3

      Zenith Tropospheric Delay
      设置天顶对流层延迟的处理噪声标准差（单位：m/sqrt(s)）。
      stats-prntrop
      默认值：1E-4

      Other Term

      Satellite Clock Stability
      设置卫星钟的稳定性（单位：s/s）。该值用于插值基准站观测值。
      stats-clkstab
      默认值：5E-12

### 3.5.5 Positions

      选项
      描述
      配置名称
      备注

      Rover

      Lat/Lon/Height (deg/m)
      如果流动站天线是固定的，则设置流动站天线的位置。参见基站的相同字段。

        ant1-
        postype,
        pos1,
        pos2, pos3

      Antenna Type

        选择流动站天线的类


import numpy as np

"""
    R_yaw = | cos(yaw) -sin(yaw)  0 |
            | sin(yaw)  cos(yaw)  0 |
            |    0         0      1 |

    R_pitch = | cos(pitch)    0  sin(pitch) |
            |    0         1       0     |
            | -sin(pitch)   0  cos(pitch) |

    R_roll = |  1       0        0      |
            |  0   cos(roll) -sin(roll) |
            |  0   sin(roll)  cos(roll) |

    R_total = R_yaw * R_pitch * R_roll

    normal_vector = [ R_total[0][2], R_total[1][2], R_total[2][2] ]
"""

def rpy_to_normal_vector(roll, pitch, yaw):
    R_yaw = np.array([
        [np.cos(yaw), -np.sin(yaw), 0],
        [np.sin(yaw), np.cos(yaw), 0],
        [0, 0, 1]
    ])
    R_pitch = np.array([
        [np.cos(pitch), 0, np.sin(pitch)],
        [0, 1, 0],
        [-np.sin(pitch), 0, np.cos(pitch)]
    ])
    R_roll = np.array([
        [1, 0, 0],
        [0, np.cos(roll), -np.sin(roll)],
        [0, np.sin(roll), np.cos(roll)]
    ])

    R_total = R_yaw @ R_pitch @ R_roll
    normal_vector = R_total[:, 2]
    return normal_vector

roll = np.radians(0)
pitch = np.radians(20)
yaw = np.radians(0)
normal = rpy_to_normal_vector(roll, pitch, yaw)
print("Normal:\t", normal)
print("RPY in rad:\n\t", roll*(np.pi/180), '\n\t', pitch*(np.pi/180), '\n\t', yaw*(np.pi/180))


E5E;
  --quarto-hl-er-color: #AD0000;
  --quarto-hl-bn-color: #AD0000;
  --quarto-hl-al-color: #AD0000;
  --quarto-hl-va-color: #111111;
  --quarto-hl-bu-color: inherit;
  --quarto-hl-ex-color: inherit;
  --quarto-hl-pp-color: #AD0000;
  --quarto-hl-in-color: #5E5E5E;
  --quarto-hl-vs-color: #20794D;
  --quarto-hl-wa-color: #5E5E5E;
  --quarto-hl-do-color: #5E5E5E;
  --quarto-hl-im-color: #00769E;
  --quarto-hl-ch-color: #20794D;
  --quarto-hl-dt-color: #AD0000;
  --quarto-hl-fl-color: #AD0000;
  --quarto-hl-co-color: #5E5E5E;
  --quarto-hl-cv-color: #5E5E5E;
  --quarto-hl-cn-color: #8f5902;
  --quarto-hl-sc-color: #5E5E5E;
  --quarto-hl-dv-color: #AD0000;
  --quarto-hl-kw-color: #003B4F;
}

/* other quarto variables */
:root {
  --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
}

pre > code.sourceCode > span {
  color: #003B4F;
}

code span {
  color: #003B4F;
}

code.sourceCode > span {
  color: #003B4F;
}

div.sourceCode,
div.sourceCode pre.sourceCode {
  color: #003B4F;
}

code span.ot {
  color: #003B4F;
  font-style: inherit;
}

code span.at {
  color: #657422;
  font-style: inherit;
}

code span.ss {
  color: #20794D;
  font-style: inherit;
}

code span.an {
  color: #5E5E5E;
  font-style: inherit;
}

code span.fu {
  color: #4758AB;
  font-style: inherit;
}

code span.st {
  color: #20794D;
  font-style: inherit;
}

code span.cf {
  color: #003B4F;
  font-style: inherit;
}

code span.op {
  color: #5E5E5E;
  font-style: inherit;
}

code span.er {
  color: #AD0000;
  font-style: inherit;
}

code span.bn {
  color: #AD0000;
  font-style: inherit;
}

code span.al {
  color: #AD0000;
  font-style: inherit;
}

code span.va {
  color: #111111;
  font-style: inherit;
}

code span.bu {
  font-style: inherit;
}

code span.ex {
  font-style: inherit;
}

code span.pp {
  color: #AD0000;
  font-style: inherit;
}

code span.in {
  color: #5E5E5E;
  font-style: inherit;
}

code span.vs {
  color: #20794D;
  font-style: inherit;
}

code span.wa {
  color: #5E5E5E;
  font-style: italic;
}

code span.do {
  color: #5E5E5E;
  font-style: italic;
}

code span.im {
  color: #00769E;
  font-style: inherit;
}

code span.ch {


                                  editorPageShowingFileIsReady = editorPageShowingFileIsReady,
                                    needRefreshEditorPage = needRefreshEditorPage,
                                    editorPageTextEditorState = editorPageTextEditorState,
//                                editorPageShowSaveDoneToast,
                                    isSaving = editorPageIsSaving,
                                    isEdited = editorPageIsEdited,
                                    showReloadDialog = showReloadDialog,
                                    showCloseDialog=editorPageShowCloseDialog,
                                    closeDialogCallback = editorPageCloseDialogCallback,
//                                isLoading = editorPageIsLoading,
                                    doSave = doSave,
                                    loadingOn = editorPageLoadingOn,
                                    loadingOff = editorPageLoadingOff,
                                    editorPageRequest = editorPageRequestFromParent,
                                    editorPageSearchMode=editorPageSearchMode,
                                    editorPageMergeMode=editorPageMergeMode,
                                    editorPagePatchMode=editorPagePatchMode,
                                    readOnlyMode = editorReadOnlyMode,
                                    editorSearchKeyword = editorPageSearchKeyword.value.text,
                                    isSubPageMode = false,

                                    fontSize=editorFontSize,
                                    lineNumFontSize=editorLineNumFontSize,
                                    adjustFontSizeMode=editorAdjustFontSizeMode,
                                    adjustLineNumFontSizeMode=editorAdjustLineNumFontSizeMode,
                                    showLineNum = editorShowLineNum,
                                    undoStack = editorUndoStack.value,
                                    showUndoRedo = editorShowUndoRedo,
                                    editorNeedSave = editorNeedSave,
                                )
                            }
                        }else if(currentHomeScreen.intValue == Cons.selectedItem_ChangeList) {
                            if(!changeListPageFilterModeOn.value){
                                ChangeListPageActions(
                                    changeListCurRepo,
                                    changeListRequireRefreshFromParentPage,
                                    changeListHasIndexItems,
    //                                requirePull = changeListRequirePull,
    //                                requirePush = changeListRequirePush,
                                    changeListRequireDoActFromParent,
                                    changeListRequireDoActFromParentShowTextWhenDoingAct,
                                    changeListEnableAction,
                                    changeListCurRepoState,
                                    fromTo = changeListPageFromTo,
                                    changeListPageItemListState,
                                    scope,
                                    changeListPageNoRepo=changeListPageNoRepo,
                                    hasNoConflictItems = changeListPageHasNoConflictItems.value,
                                    changeListPageFilterModeOn= changeListPageFilterModeOn,
                                    changeListPageFilterKeyWord=changeListPageFilterKeyWord,
                                    rebaseCurOfAll = changeListPageRebaseCurOfAll.value,
                                    naviTarget = changeListNaviTarget
                                )

                            }
                        }else if(currentHomeScreen.intValue == Cons.selectedItem_Settings) {
//                            RefreshActions(refreshPage=refreshSettingsPage)
                        }else if(currentHomeScreen.intValue == Cons.selectedItem_Subscription) {
                            SubscriptionActions { // refreshPage
                                changeStateTriggerRefreshPage(subscriptionPageNeedRefresh)
                            }
                        }else if(currentHomeScreen.intValue == Cons.selectedItem_Service) {
                            RefreshActions(refreshServicePage)
                        }else if(currentHomeScreen.intValue == Cons.selectedItem_Automation){
                            RefreshActions(refreshAutomationPage)
                        }
                    },
                    scrollBehavior = homeTopBarScrollBehavior,
                )
            },
            floatingActionButton = {
                //因为以前是滚动页面才显示回到顶部浮动按钮，所以是否显示浮动按钮的变量名叫pageScrolled，但后来改成不检测是否滚动了，而这个变量已经传的到处都是，所以就将错就错了
                if(currentHomeScreen.intValue == Cons.selectedItem_Editor && editorIsPreviewModeOn.value && editorPreviewPageScrolled.value) {
                    GoToTopAndGoToBottomFab(
                        scope = scope,
                        listState = runBlocking { editorPreviewNavStack.value.getCurrentScrollState() },
                        listLastPosition = editorPreviewLastScrollPosition,
                        showFab = editorPreviewPageScrolled


ymm4,%ymm7,%ymm7
	vprold		$16,%ymm7,%ymm7

	# x2 += x3, x1 = rotl32(x1 ^ x2, 12)
	vpaddd		%ymm3,%ymm2,%ymm2
	vpxord		%ymm2,%ymm1,%ymm1
	vprold		$12,%ymm1,%ymm1

	vpaddd		%ymm7,%ymm6,%ymm6
	vpxord		%ymm6,%ymm5,%ymm5
	vprold		$12,%ymm5,%ymm5

	# x0 += x1, x3 = rotl32(x3 ^ x0, 8)
	vpaddd		%ymm1,%ymm0,%ymm0
	vpxord		%ymm0,%ymm3,%ymm3
	vprold		$8,%ymm3,%ymm3

	vpaddd		%ymm5,%ymm4,%ymm4
	vpxord		%ymm4,%ymm7,%ymm7
	vprold		$8,%ymm7,%ymm7

	# x2 += x3, x1 = rotl32(x1 ^ x2, 7)
	vpaddd		%ymm3,%ymm2,%ymm2
	vpxord		%ymm2,%ymm1,%ymm1
	vprold		$7,%ymm1,%ymm1

	vpaddd		%ymm7,%ymm6,%ymm6
	vpxord		%ymm6,%ymm5,%ymm5
	vprold		$7,%ymm5,%ymm5

	# x1 = shuffle32(x1, MASK(2, 1, 0, 3))
	vpshufd		$0x93,%ymm1,%ymm1
	vpshufd		$0x93,%ymm5,%ymm5
	# x2 = shuffle32(x2, MASK(1, 0, 3, 2))
	vpshufd		$0x4e,%ymm2,%ymm2
	vpshufd		$0x4e,%ymm6,%ymm6
	# x3 = shuffle32(x3, MASK(0, 3, 2, 1))
	vpshufd		$0x39,%ymm3,%ymm3
	vpshufd		$0x39,%ymm7,%ymm7

	sub		$2,%r8d
	jnz		.Ldoubleround4

	# o0 = i0 ^ (x0 + s0), first block
	vpaddd		%ymm11,%ymm0,%ymm10
	cmp		$0x10,%rcx
	jl		.Lxorpart4
	vpxord		0x00(%rdx),%xmm10,%xmm9
	vmovdqu		%xmm9,0x00(%rsi)
	vextracti128	$1,%ymm10,%xmm0
	# o1 = i1 ^ (x1 + s1), first block
	vpaddd		%ymm12,%ymm1,%ymm10
	cmp		$0x20,%rcx
	jl		.Lxorpart4
	vpxord		0x10(%rdx),%xmm10,%xmm9
	vmovdqu		%xmm9,0x10(%rsi)
	vextracti128	$1,%ymm10,%xmm1
	# o2 = i2 ^ (x2 + s2), first block
	vpaddd		%ymm13,%ymm2,%ymm10
	cmp		$0x30,%rcx
	jl		.Lxorpart4
	vpxord		0x20(%rdx),%xmm10,%xmm9
	vmovdqu		%xmm9,0x20(%rsi)
	vextracti128	$1,%ymm10,%xmm2
	# o3 = i3 ^ (x3 + s3), first block
	vpaddd		%ymm14,%ymm3,%ym


dnhYK5aVBeJrtLz7D/H33uD5jfBszERys949IYunDhCSnQPH7Ri14ke8P7XeWHE9II5F+bUAaLCh3EyZugLAY9BnwWNLQBqN7CWU7cHEHAQr4L04Sm9gc/+MHN57XfOzUTK8/UdxrY4ZSfmvcTLy8hBXEQrXlgmi+vXOG1/lYeiw20nNVJEMI8RHAHk7DnoJ2WJOC7MjFPMASELy4059ECNyayYOI/RDu19NECWvjAYTvQf7wnejAtM0j/9V//tWDzA55ZeulceZgjgbGXIMmGuL1hpmsjz8D8b96fvyXXE4oQ6AmuzaO5/CAIAo6aH4S21J2ARnX1+6TF801UOtPzWSUwx2n3ygnvv//+szCCcuYElivAn/7pn259td+CvrI04HNfstb/tf7XL4Rr/b+Mk7X+r/V/m0xvb2v9/42tJdb6f9l/rvV/b4u1/58zxdr/902hVdb+/27f0DZr/3/Zb9c6a/9/2VOv/f/a/xsXa/9/+dbSHuv8/6IYpz1aZwvhAjjXtXOr8trvKwNXep3/r/N//WGd/zea1vn/Ov+/y0e9uzLd9hODhumKmKJ8gx+ZP0jTwBV/4xvfKLgDmFjqyh+rzDTtMFho+coHGCygtJDmcoBhyk8pmDSTGZgWYWWim+Yl5DEfDMqfIYZ9eXyBT0gSAQPqkY985JbFhG5MwqlhMLVLY+IqgEmSVmx19Azv4aJhmUl1mqPT/DgtTTB/06Me9aiNCV09hfN3wVX/pz/96Y1xmDY+hh/N6OgrjxGU3x0Mwhhv5U9zw+GOWpMxx2yMMP56B/Q9LwEDZsThphZ/5dFzHzB9Dtc/5eU3XHw+Q/oaPPe5z93QCTQkyNE7HcvAa+dgMpzhKldIe5/gQSabK5eGa344wnt/2rgYYn24VFdax/M54oQPAJ/atKT1M8IBTDhXx0Zwc6NhP4Vj4P3vDwdTaOCFL3zhRuqdMLBB71e4IQ83Y3JqRaeVngZs5OowvoUuH3GA5QLM+gm/9mu/dk5G31jNfAjtcMxVYP4CPVucsMOznvUs0Q3UcwQ4fTKIycwKgjEpv7EcTe8j/cQnPjH0RttGCDKLBxEoN/tzeKG+QtM41xAsWhAUUCaovoQuZp6Dmvp79PcKlaufH/2BKyM/aUXptKXFM31O0CjTrXzcg/k+xTPnzx/4hOYDuDZL01c3fHXMOEGm8ELjQUggauKVmdC7wmG4109mmeJo/KbShQQR5pyP7ghTi75y5ldzT+ljmSPemsFah/k0Brsy0Qmz9gFPMO0azDXpmK+Otf7fd2pOqX3W+r8L3tQea/2vJe6OP9i1/u9ts9b/vR3MqWv9v7SF2Fr/T9v+aq3/a/9vPJgjXGv/f7Hit/b/F9eA9REhWPv/y5jpW33t/3droOaRYO3/1/6/vlC49v8P3bMZM+v8vx6yK4Ks8/+9PfSNzkVh1vn/Q8fPpedcYmv/v7eF/rP2/5e2EPt/Yf//fwBUxEqcFESvnQAAAABJRU5ErkJggg=="//>>built
define("dijit/focus", [
	"dojo/aspect",
	"dojo/_base/declare", // declare
	"dojo/dom", // domAttr.get dom.isDescendant
	"dojo/dom-attr", // domAttr.get dom.isDescendant
	"dojo/_base/lang", // lang.hitch
	"dojo/on",
	"dojo/ready",
	"dojo/_base/sniff", // has("ie")
	"dojo/Stateful",
	"dojo/_base/unload", // unload.addOnWindowUnload
	"dojo/_base/window", // win.body
	"dojo/window", // winUtils.get
	"./_base/manager",	// dijit.byId, dijit.isTabNavigable
	"."		// sets globals in dijit
], function(aspect, declare, dom, domAttr, lang, on, ready, has, Stateful, unload, win, winUtils, diji


.

## Language
- [SetraC4Ci/Gasy-Corpus-Crawler](https://github.com/SetraC4Ci/Gasy-Corpus-Crawler) - A collection of python scripts for scraping malagasy websites.
- [HarimbolaSantatra/mm-cli](https://github.com/HarimbolaSantatra/mm-cli) - Malagasy Encyclopedia and Dictionary on the command line.

[![crates.io](https://img.shields.io/crates/v/okey-cli?style=for-the-badge)](https://crates.io/crates/okey-cli)
![Build](https://img.shields.io/github/actions/workflow/status/luckasranarison/okey/ci.yml?style=for-the-badge&label=Build&labelColor=3b434b&color=30c352)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge&labelColor=3b434b&color=blue)](https://github.com/luckasRanarison/luckasranarison.github.io/blob/master/LICENSE)
![Stars](https://img.shields.io/github/stars/luckasranarison/okey?style=for-the-badge&label=Stars&labelColor=3b434b&color=yellow)

# okey

An advanced, easy-to-use key remapper for Linux written in Rust, inspired by [QMK](https://qmk.fm/).

> [!NOTE]
> This project is currently in its early stages of development. More comprehensive documentation will be available soon.

## Contents

1. [Features](#features)
2. [Installation](#installation)
3. [Usage](#usage)
4. [Configuration Schema](#configuration-schema)
    - [Defaults](#defaults-optional)
    - [Keyboards](#keyboards-array)
5. [License](#license)

## Features

> [!TIP]
> Click on the feature to expand the example configuration.

Easy-to-use: designed to be used as a systemd service, configured using simple YAML with IDE support (see schema).

```yaml
# yaml-language-server: $schema=https://raw.githubusercontent.com/luckasRanarison/okey/refs/heads/master/schema/okey.json

keyboards:
  - name: "My keyboard"

    keys:
      KEY_X: KEY_Y

    combos:
      - keys: [KEY_D, KEY_F]
        action: KEY_LEFTCTRL

    tap_dances:
      KEY_CAPSLOCK:
        tap: KEY_TAB
        hold: KEY_MOMLAYER

    layers:
      momentary:
        modifier: KEY_MOMLAYER

        keys:
          KEY_O: KEY_K
```

Key remapping: change the default global key actions.

```yaml
keyboards:
  - name: My keyboard

    keys:
      KEY_CAPSLOCK: KEY_TAB
      KEY_TAB: CUSTOM_KEYCODE # can be used to activate a layer or to trigger other actions
```

Macros: execute arbitrary key sequences with a single key stroke.

```yaml
keyboards:
  - name: My keyboard

    keys:
      KEY_F1: [KEY_H, KEY_E, KEY_L, KEY_L, KEY_O] # executes simple key sequences (press + release)
      KEY_F2: { string: "Hi, you!" } # inserts an ASCII string
      KEY_F3: { env: FOO } # inserts the value of the environment variable
      KEY_F4: { unicode: 🙂👍 } # inserts unicode characters using C


y, staticRetryPolicy, intercept, listResponseData1);
    addGeneralMockBehaviourToRestOpAndHttpOp(abfsRestOperation, httpOperation);

    Mockito.doReturn(listResponseData1).doReturn(listResponseData2)
        .when(spiedClient)
        .parseListPathResults(any(), any());

    functionRaisingIOE.apply(httpOperation);
  }

  /**
   * Sets up a mocked AbfsRestOperation for a flush operation in the Azure Blob File System (ABFS).
   * This method is primarily used in testing scenarios where specific behavior needs to be simulated
   * during a flush operation, such as returning a particular status code or triggering an exception.
   *
   * The method creates a mock AbfsRestOperation configured with the appropriate request headers
   * and parameters for a "PutBlockList" operation. It then uses the provided
   * {@code functionRaisingIOE} to modify the behavior of the mock AbfsRestOperation during execution.
   *
   * @param spiedClient          The spied instance of the AbfsClient used for making HTTP requests.
   * @param eTag                 The ETag of the blob, used in the If-Match header to ensure
   *                             conditional requests.
   * @param blockListXml         The XML string representing the block list to be uploaded.
   * @param functionRaisingIOE   A function that modifies the behavior of the AbfsRestOperation,
   *                             allowing the simulation of specific outcomes, such as HTTP errors
   *                             or connection resets.
   * @throws Exception           If an error occurs while setting up the mock operation.
   */
  public static void setMockAbfsRestOperationForFlushOperation(
      final AbfsClient spiedClient,
      String eTag,
      String blockListXml,
      AbfsOutputStream os,
      FunctionRaisingIOE<AbfsHttpOperation, AbfsHttpOperation> functionRaisingIOE)
      throws Exception {
    List<AbfsHttpHeader> requestHeaders = ITestAbfsClient.getTestRequestHeaders(
        spiedClient);
    String blobMd5 = null;
    MessageDigest blobDigest = os.getFullBlobContentMd5();
    if (blobDigest != null) {
      try {
        MessageDigest clonedMd5 = (MessageDigest) blobDigest.clone();
        byte[] digest = clonedMd5.digest();
        if (digest != null && digest.length != 0) {
          blobMd5 = Base64.getEncoder().encodeToString(digest);
        }
      } catch (CloneNotSupportedException ignored) {
      }
    }
    byte[] buffer = blockListXml.getBytes(StandardCharsets.UTF_8);
    requestHeaders.add(new AbfsHttpHeader(CONTENT_LENGTH, String.valueOf(buffer.length)));
    requestHeaders.add(new AbfsHttpHeader(CONTENT_TYPE, APPLICATION_XML));
    requestHeaders.add(new AbfsHttpHeader(IF_MATCH, eTag));
    requestHeaders.add(new AbfsHttpHeader(
        X_MS_BLOB_CONTENT_MD5,
        (spiedClient.isFullBlobChecksumValidationEnabled() && blobMd5 != null)
            ? blobMd5
            : spiedClient.computeMD5Hash(buffer, 0, buffer.length)
    ));
    final AbfsUriQueryBuilder abfsUriQueryBuilder = spiedClient.createDefaultUriQueryBuilder();
    abfsUriQueryBuilder.addQuery(QUERY_PARAM_COMP, BLOCKLIST);
    abfsUriQueryBuilder.addQuery(QUERY_PARAM_CLOSE, String.valueOf(false));
    final URL url = spiedClient.createRequestUrl("/test/file", abfsUriQueryBuilder.toString());
    AbfsRestOperation abfsRestOperation = Mockito.spy(new AbfsRestOperation(
        PutBlockList, spiedClient, HTTP_METHOD_PUT,
        url,


(const C(4));

-class Foo {}
+class Foo {
+  var d = const C(const C(4));
+  var c = const C(const C(3));
+  var b = const C(const C(2));
+  var a = const C(const C(1));
+}

 late Foo value;

*/
// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:expect/expect.dart';
import 'package:reload_test/reload_test_utils.dart';

import 'lib1.dart' show importedFunc;

// Adapted from:
// https://github.com/dart-lang/sdk/blob/9f465e5b6eab0dc3af96140189d4f0190e0ff925/runtime/vm/isolate_reload_test.cc#L1153

void helper() {
  Expect.equals(4, importedIntFunc());
}

Future<void> main() async {
  helper();
  await hotReload(expectRejection: true);
  helper();
  await hotReload(expectRejection: true);
  helper();
  await hotReload();
  helper();
}

/** DIFF **/
/*
 import 'package:expect/expect.dart';
 import 'package:reload_test/reload_test_utils.dart';

-import 'lib1.dart' show importedIntFunc;
+import 'lib1.dart' show importedFunc;

 // Adapted from:
 // https://github.com/dart-lang/sdk/blob/9f465e5b6eab0dc3af96140189d4f0190e0ff925/runtime/vm/isolate_reload_test.cc#L1153

 void helper() {
-  Expect.equals(4, importedFunc());
+  Expect.equals(4, importedIntFunc());
 }

 Future<void> main() async {
*/
// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:expect/expect.dart';
import 'package:reload_test/reload_test_utils.dart';

// Adapted from:
// https://github.com/dart-lang/sdk/blob/13f5fc6b168d8b6e5843d17fb9ba77f1343a7dfe/runtime/vm/isolate_reload_test.cc#L2733

var retained;
deleted() {
  return 'hello';
}

helper() {
  return retained();
}

Future<void> main() async {
  Expect.equals('hello', helper());
  await hotReload();

  Expect.throws<NoSuchMethodError>(
    helper,
    (error) => error.toString().contains('deleted'),
  );
}

/** DIFF **/
/*
 // https://github.com/dart-lang/sdk/blob/13f5fc6b168d8b6e5843d17fb9ba77f1343a7dfe/runtime/vm/isolate_reload_test.cc#L2733

 var retained;
-deleted<A, B, C>() {
+deleted() {
   return 'hello';
 }

 helper() {
-  retained = () => deleted<int, int, int>();
   return retained();
 }

*/
// Copyright (c) 2025, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:expect/expect.dart';
import 'package:reload_test/reload_test_utils.dart';

import 'library_a.dart';
import 'library_b.dart';

/// Tests for constant semantics across hot restart in DDC.
///
/// DDC has multiple layers of constant caching. Failing to clear them can


elf.Ctrl:SetState(Controller.MOVE_DOWN, true);
		end
	end

	-- Control right/left movement (the rocket will move sideways if rotated to the side)
	dist = SceneMan:ShortestDistance(self.Pos + self.Vel * 20, self.LZpos, false).X;
	change = self.XposPID:Update(dist, 0);
	local targetAng = 0;
	if self.Vel.Y > 0 then
		if change < -4 then
			targetAng = -math.max(change/40, -0.5);
		elseif change > 4 then
			targetAng = -math.min(change/40, 0.5);
		end
	else
		if change > 4 then
			targetAng = -math.max(change/40, -0.5);
		elseif change < -4 then
			targetAng = -math.min(change/40, 0.5);
		end
	end

	-- Control angle

	change = self.AngPID:Update(self.RotAngle + self.AngularVel, targetAng);
	-- Don't burst side thrusters from minimal tilt
	local tilted = math.floor(math.abs(self.RotAngle) + 0.9);
	if tilted ~= 0 then
		if change > 1.1 and not self.burstRight then
			self.burstRight = math.max(5 - change, 2); -- Wait n frames until next burst (lower -> better control)
		elseif change < -1.1 and not self.burstLeft then
			self.burstLeft = math.max(5 + change, 2);
		end
	end

	-- Trigger bursts
	if self.burstRight then
		self.burstRight = self.burstRight - SettingsMan.AIUpdateInterval;
		if self.burstRight < 0 then
			self.Ctrl:SetState(Controller.MOVE_RIGHT, true);
			if self.burstRight < -4 then	-- Fire for -n frames (higher -> better control)
				self.burstRight = nil;	-- Allow a new burst
			end
		end
	end

	if self.burstLeft then
		self.burstLeft = self.burstLeft - SettingsMan.AIUpdateInterval;
		if self.burstLeft < 0 then
			self.Ctrl:SetState(Controller.MOVE_LEFT, true);
			if self.burstLeft < -4 then
				self.burstLeft = nil;
			end
		end
	end

	if self.burstUp then
		self.burstUp = self.burstUp - SettingsMan.AIUpdateInterval;
		if self.burstUp < 0 then
			self.Ctrl:SetState(Controller.MOVE_UP, true);
			if self.burstUp < -16 then
				self.burstUp = nil;
			end
		end
	end

	if self.AIMode == Actor.AIMODE_STAY then
		self.StuckTimer:Reset();
		-- Don't burst main thruster when stationary, as it results in hatches closing
		if self.Vel.Largest < 6 and self.AIMode == Actor.AIMODE_STAY then
			self.Ctrl:SetState(Controller.MOVE_UP, false);
		end
	elseif self.Vel.Largest > 3 then
		self.StuckTimer:Reset();
	-- If we are hopelessly stuck, self destruct
	elseif self.AIMode == Actor.AIMODE_SCUTTLE or self.StuckTimer:IsPastSimMS(40000) then
		self:GibThis();
	end
end


(publishers))
	}

	pub := publishers[0]
	if len(pub.Books) != 1 {
		t.Fatalf("Expected 1 Book for Publishers %s, but got %v", *pub.Name, len(pub.Books))
	}

	if *publishers[0].Id != 1 {
		t.Fatalf("The result order for publisher is not correct. Expected record with id 1 in the first position, but got %v", *publishers[0].Id)
	}

	book := pub.Books[0]
	if len(book.Authors) != 1 {
		t.Fatalf("Expected 1 Author for Book %s, but got %v", book.Name, len(book.Authors))
	}

	pub = publishers[1]
	if len(pub.Books) != 2 {
		t.Fatalf("Expected 2 Book for Publishers %s, but got %v", *pub.Name, len(pub.Books))
	}

	book = pub.Books[0]
	if len(book.Authors) != 2 {
		t.Fatalf("Expected 2 Author for Book %s, but got %v", book.Name, len(book.Authors))
	}

	book = pub.Books[1]
	if len(book.Authors) != 2 {
		t.Fatalf("Expected 2 Author for Book %s, but got %v", book.Name, len(book.Authors))
	}

	if *book.Authors[0].Id != 2 {
		t.Fatalf("The result order of authors is not correct. Expected record with id 2 in the first position, but got %v", *publishers[0].Id)
	}

	for k, v := range publishers {
		logger.Debugf("publishers[%v] = %s", k, v.String())
		if v.Id == nil {
			t.Fatal("Expected a valid Id, but got nil")
		}
	}
}

func (tt Tester) RunOuterFetchOrderAs(t *testing.T) {
	ResetDB(tt.Tm)

	logger.Debugf("Running RunOuterFetchOrderAs")

	store := tt.Tm.Store()
	result, err := store.Query(PUBLISHER).
		All().
		Outer(PUBLISHER_A_BOOKS).As("book").
		Outer(BOOK_A_AUTHORS).As("auth").
		Fetch().
		Order(PUBLISHER_C_ID). // main table
		OrderAs(BOOK_C_ID.For("book")).
		OrderAs(AUTHOR_C_ID.For("auth")).Desc().
		ListTreeOf((*Publisher)(nil))
	if err != nil {
		t.Fatalf("Failed RunOuterFetchOrderAs: %s", err)
	}

	publishers := result.AsSlice().([]*Publisher)

	if len(publishers) != 2 {
		t.Fatalf("Expected 2 Publishers, but got %v", len(publishers))
	}

	pub := publishers[0]
	if len(pub.Books) != 1 {
		t.Fatalf("Expected 1 Book for Publishers %s, but got %v", *pub.Name, len(pub.Books))
	}

	if *publishers[0].Id != 1 {
		t.Fatalf("The result order for publisher is not correct. Expected record with id 1 in the first position, but got %v", *publishers[0].Id)
	}

	book := pub.Books[0]
	if len(book.Authors) != 1 {
		t.Fatalf("Expected 1 Author for Book %s, but got %v", book.Name, len(book.Authors))
	}

	pub = publishers[1]
	if len(pub.Books) != 2 {
		t.Fatalf("Expected 2 Book for Publishers %s, but got %v", *pub.Name, len(pub.Books))
	}

	book = pub.Books[0]
	if len(book.Authors) != 2 {
		t.Fatalf("Expected 2 Author for Book %s, but got


artMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});import * as React from 'react';
import Paper from '@mui/material/Paper';
import Typography from '@mui/material/Typography';
import Button from '@mui/material/Button';
import Grid from '@mui/material/Grid';
import TextField from '@mui/material/TextField';
import Card from '@mui/material/Card';
import CardActions from '@mui/material/CardActions';
import CardContent from '@mui/material/CardContent';
import CardHeader from '@mui/material/CardHeader';
import ChatIcon from '@mui/icons-material/Chat';
import Dialog from '@mui/material/Dialog';
import DialogActions from '@mui/material/DialogActions';
import DialogContent from '@mui/material/DialogContent';
import DialogTitle from '@mui/material/DialogTitle';
import Input from '@mui/material/Input';
import swal from 'sweetalert';
import { useNavigate } from "react-router";
import Stack from '@mui/material/Stack';
import Tooltip from '@mui/material/Tooltip';
import ListItem from '@mui/material/ListItem';
import ListItemText from '@mui/material/ListItemText';
import IconButton from '@mui/material/IconButton';
import ListItemAvatar from '@mui/material/ListItemAvatar';
import List from '@mui/material/List';
import Avatar from '@mui/material/Avatar';
import FilePresentIcon from '@mui/icons-material/FilePresent';
import InputAdornment from '@mui/material/InputAdornment';
import CloudDownloadIcon from '@mui/icons-material/CloudDownload';
import ClearIcon from '@mui/icons-material/Clear';
import Axios from "axios"
import DialogContentText from '@mui/material/DialogContentText';
import config from '../../../../config'

async function store_FA_control_comment(credentials) {
  return fetch(config.http + '/store_FA_control_comment', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json; charset=utf-8',
      'Accept': 'application/json'
    },
    body: JSON.stringify(credentials)
  })
    .then(data => data.json())
}

async function stroe_FA_control_Path(credentials) {
  return fetch(config.http + '/stroe_FA_control_Path', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json; charset=utf-8',
      'Accept': 'application/json'
    },
    body: JSON.stringify(credentials


ing entry in the
    OrderedMap, then the following
    two sentences would suffice:

An object <var>map</var> implementing OrderedMap
        supports indexed properties with indices in the range
        0 ≤ <var>index</var> < map.size.

Such objects also support a named property for every name that,
        if passed to get(), would return a non-null value.

As described in § 3.9 Legacy platform objects,
    an ECMAScript implementation would create
    properties on a legacy platform object implementing
    OrderedMap that correspond to
    entries in both the named and indexed property sets.
    These properties can then be used to interact
    with the object in the same way as invoking the object’s
    methods, as demonstrated below:

<c- c1>// Assume map is a legacy platform object implementing the OrderedMap interface.</c->
<c- a>var</c-> map <c- o>=</c-> getOrderedMap<c- p>();</c->
<c- a>var</c-> x<c- p>,</c-> y<c- p>;</c->

x <c- o>=</c-> map<c- p>[</c-><c- mf>0</c-><c- p>];</c->       <c- c1>// If map.length > 0, then this is equivalent to:</c->
                  <c- c1>//</c->
                  <c- c1>//   x = map.getByIndex(0)</c->
                  <c- c1>//</c->
                  <c- c1>// since a property named "0" will have been placed on map.</c->
                  <c- c1>// Otherwise, x will be set to undefined, since there will be</c->
                  <c- c1>// no property named "0" on map.</c->

map<c- p>[</c-><c- mf>1</c-><c- p>]</c-> <c- o>=</c-> <c- kc>false</c-><c- p>;</c->   <c- c1>// This will do the equivalent of:</c->
                  <c- c1>//</c->
                  <c- c1>//   map.setByIndex(1, false)</c->

y <c- o>=</c-> map<c- p>.</c->apple<c- p>;</c->    <c- c1>// If there exists a named property named "apple", then this</c->
                  <c- c1>// will be equivalent to:</c->
                  <c- c1>//</c->
                  <c- c1>//   y = map.get('apple')</c->
                  <c- c1>//</c->
                  <c- c1>// since a property named "apple" will have been placed on</c->
                  <c- c1>// map.  Otherwise, y will be set to undefined, since there</c->
                  <c- c1>// will be no property named "apple" on map.</c->

map<c- p>.</c->berry <c- o>=</c-> <c- mf>123</c-><c- p>;</c