r"""
Nonlinear Poisson's equation example demonstrating the nonlinear diffusion
and nonlinear volume force terms.

The example is an adaptation of:
:ref:`diffusion-poisson_field_dependent_material`.

Find :math:`T` such that:

.. math::
   \int_{\Omega} c(T) \nabla s \cdot \nabla T + \int_{\Omega} g(T) \cdot s
    = 0
    \;, \quad \forall s \;.

where :math:`c(T)` and :math:`g(T)`  are the :math:`T` dependent coefficients.
"""
from sfepy import data_dir
import numpy as np

filename_mesh = data_dir + '/meshes/3d/cylinder.mesh'

def get_conductivity(T):
    """
    Calculates the conductivity as (1 + T**4) and returns it.
    """
    val = 1 + T**4
    return val

def d_get_conductivity(T):
    """
    Calculates the derivative of get_conductivity and returns it.
    """
    val = 4*T**3
    return val

def nl_src(T):
    """
    Calculates a non linear source term as np.sinh(T) and returns it.
    """
    val = np.sinh(T)
    return val

def d_nl_src(T):
    """
    Calculates the derivative of the nl_src term and returns it.
    """
    val = np.cosh(T)
    return val

materials = {
}

fields = {
    'temperature' : ('real', 1, 'Omega', 1),
}

variables = {
    'T' : ('unknown field', 'temperature', 0),
    's' : ('test field',    'temperature', 'T'),
}

regions = {
    'Omega' : 'all',
    'Gamma_Left' : ('vertices in (x < 0.00001)', 'facet'),
    'Gamma_Right' : ('vertices in (x > 0.099999)', 'facet'),
}

ebcs = {
    'T1' : ('Gamma_Left', {'T.0' : 2.0}),
    'T2' : ('Gamma_Right', {'T.0' : -2.0}),
}

integrals = {
    'i' : 10,
}

equations = {
    'Temperature' : """
       dw_nl_diffusion.i.Omega(get_conductivity, d_get_conductivity, s, T)
     + dw_volume_nvf.i.Omega(nl_src, d_nl_src, s, T) = 0
     """
}

solvers = {
    'ls' : ('ls.scipy_direct', {}),
    'newton' : ('nls.newton', {
        'i_max' : 15,
        'eps_a' : 1e-10,
        'eps_r' : 1.0,
        'ls_on' : 10,
    }),
}

options = {
    'nls' : 'newton',
    'ls' : 'ls',
    'save_times' : 'all',
}


    //        _output.WriteLine(n.ToString(formatter));
    //    }

    //    _output.WriteLine();
    //    _output.WriteLine("RDF/XML Sort Order:");
    //    nodes.Sort(new RdfXmlTripleComparer());
    //    foreach (INode n in nodes)
    //    {
    //        _output.WriteLine(n.ToString(formatter));
    //    }
    //}

    [Fact]
    public void NodeCompareToEquivalentLiterals1()
    {
        var g = new Graph();
        ILiteralNode canonical = (1).ToLiteral(g);
        ILiteralNode alternate =
            g.CreateLiteralNode("01", UriFactory.Root.Create(XmlSpecsHelper.XmlSchemaDataTypeInteger));

        var ns = new List<INode>()
        {
            canonical,
            alternate
        };

        Assert.NotEqual(canonical, alternate);
        Assert.Equal(0, canonical.CompareTo(alternate));

        ShowOrdering(ns);
        CheckCombinations(ns);
        CheckCombinations<ILiteralNode>(ns.OfType<ILiteralNode>().ToList());
        CheckCombinations(ns, new FastNodeComparer());
    }

    [Fact]
    public void NodeCompareToEquivalentLiterals2()
    {
        var g = new Graph();
        ILiteralNode canonical = (true).ToLiteral(g);
        ILiteralNode alternate =
            g.CreateLiteralNode("TRUE", UriFactory.Root.Create(XmlSpecsHelper.XmlSchemaDataTypeBoolean));

        var ns = new List<INode>()
        {
            canonical,
            alternate
        };

        Assert.NotEqual(canonical, alternate);
        Assert.Equal(0, canonical.CompareTo(alternate));

        ShowOrdering(ns);
        CheckCombinations(ns);
        CheckCombinations<ILiteralNode>(ns.OfType<ILiteralNode>().ToList());
        CheckCombinations(ns, new FastNodeComparer());
    }

    [Fact]
    public void NodeCompareToEquivalentLiterals3()
    {
        var g = new Graph();
        ILiteralNode canonical = (1d).ToLiteral(g);
        ILiteralNode alternate =
            g.CreateLiteralNode("1.00000", UriFactory.Root.Create(XmlSpecsHelper.XmlSchemaDataTypeDouble));

        var ns = new List<INode>()
        {
            canonical,
            alternate
        };

        Assert.NotEqual(canonical, alternate);
        Assert.Equal(0, canonical.CompareTo(alternate));

        ShowOrdering(ns);
        CheckCombinations(ns);
        CheckCombinations<ILiteralNode>(ns.OfType<ILiteralNode>().ToList());
        CheckCombinations(ns, new FastNodeComparer());
    }
}


 {
                queue.enqueue({vertex: neighbor, visitedKeys}, -currentCost);
            }
        });
        if (isHasNoVisitedNeighbors && globalMin <= Math.abs(cost)) {
            globalMin = Math.abs(cost);
            globalMinPath = visitedKeys;
        }
    }
    return { cost: globalMin, path: globalMinPath };
}

function getLb<T>(
    graph: Graph<T>,
    visitedKeys: Array<string>,
    currentVertex: GraphVertex<T>,
    vertices: Array<GraphVertex<T>>){
    let sumCost = 0;
    for (let index = 0; index < visitedKeys.length - 1; index++) {
        // tslint:disable-next-line:no-shadowed-variable
        const currentVertex = graph.findVertex(visitedKeys[index]);
        sumCost += currentVertex.getEdge(visitedKeys[index + 1]).Weight;
    }
    // 已经经历过的路径花费的两倍
    const firstVertex = graph.findVertex(visitedKeys[0]);
    const lastVertex = graph.findVertex(visitedKeys[visitedKeys.length - 1]);
    sumCost += lastVertex.getEdge(currentVertex.Key).Weight;
    sumCost *= 2;
    const tempSet = HashSet.fromArray(visitedKeys);
    tempSet.add(currentVertex.Key);
    // 起点最近花费
    let firstOutMin = getMin(firstVertex, tempSet);
    // 终点最近花费
    let lastOutMin = getMin(currentVertex, tempSet);
    // 都访问过，证明已回到起点
    if (!lastOutMin){
        firstOutMin = lastOutMin = currentVertex.getEdge(visitedKeys[0]);
    }
    if (!firstOutMin){
        return Infinity;
    }
    sumCost += (firstOutMin.Weight + lastOutMin.Weight);
    // 未经过点的最小的出度和入度
    vertices.forEach(function(vertex) {
        if (!tempSet.has(vertex.Key)) {
            const minVertices = getTwoMin(linkListToArray(vertex.getEdges()));
            sumCost += (minVertices.firstMin.Weight + minVertices.secondMin.Weight);
        }
    });
    return sumCost / 2;
}

function linkListToArray<T>(linkList: LinkList<T>){
    let head = linkList.getHeadNode();
    const arr: Array<T> = [];
    while (head){
        arr.push(head.Value);
        head = head.Next;
    }
    return arr;
}

function getDown<T>(vertices: Array<GraphVertex<T>>){
    return vertices.reduce(function(ori, vertex){
        const minVertices = getTwoMin(linkListToArray(vertex.getEdges()));
        return ori + (minVertices.firstMin.Weight + minVertices.secondMin.Weight);
    }, 0) / 2;
}

/**
 * 获取上界（贪心算法）
 * @param vertex
 * @param length
 */
function getUp<T>(vertex: GraphVertex<T>, length: number){
    let currentVertex = vertex;
    let lastEdge;
    const visitedSet = new HashSet(length);
    visitedSet.add(currentVertex.Key);
    let count = 1;
    let sumWeight = 0;
    while (count < length) {
        lastEdge = getMin(currentVertex, visitedSet);
        if (!lastEdge) {
            throw new Error("the graph is not connected");
        }
        currentVertex = lastEdge.EndVertex;
        visitedSet.add(currentVertex.Key);
        sumWeight += lastEdge.Weight;
        count++;
    }
    const circleEdge = currentVertex.getEdge(vertex.Key);
    if (!circleEdge) {
        throw new Error("the graph is not connected");
    }
    sumWeight += circleEdge.Weight;
    visit


q-27 0-45.5 18.5T896 960h-64q0-27-18.5-45.5t-45-18.5-45.5 18.5-19 45.5h-64q0-27-18.5-45.5T576 896t-45.5 18.5T512 960h-64q0-27-18.5-45.5T384 896t-45.5 18.5T320 960h-64q0-27-19-45.5T191.5 896t-45 18.5T128 960H64q0-27-18.5-45.5T0 896v-64q26 0 45-19t19-45.5-18.5-45T0 704v-64q27 0 45.5-19T64 575.5t-18.5-45T0 512v-64q26 0 45-19t19-45.5-18.5-45T0 320v-64q26 0 45-19t19-45.5-19-45T0 128V64q27 0 45.5-19T64 0h64q0 26 18.5 45t45 19T237 45t19-45h64q0 26 18.5 45T384 64t45.5-19T448 0h64q0 26 18.5 45T576 64t45.5-19T640 0h64q0 26 19 45t45.5 19 45-19T832 0h64q0 26 18.5 45T960 64v64q-26 0-45 18.5t-19 45 19 45.5 45 19v64q-27 0-45.5 18.5t-18.5 45 19 45.5 45 19v64q-27 0-45.5 18.5t-18.5 45 18.5 45.5 45.5 19v64q-27 0-45.5 18.5t-18.5 45 19 45.5 45 19zM832 160q0-13-9.5-22.5T800 128H160q-13 0-22.5 9.5T128 160v640q0 13 9.5 22.5T160 832h640q13 0 22.5-9.5T832 800V160zm-90 608H218q-11 0-18.5-7.5T192 742V218q0-11 7.5-18.5T218 192h524q11 0 18.5 7.5T768 218v524q0 11-7.5 18.5T742 768z"/></svg>';
  static const String stampalt =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="960" height="960" preserveAspectRatio="xMidYMid meet" viewBox="0 0 960 960"><path fill="currentColor" d="M960 832v64q-26 0-45 18.5T896 960h-64q0-26-18.5-45t-45-19-45.5 18.5-19 45.5h-64q0-27-18.5-45.5t-45-18.5-45.5 19-19 45h-64q0-27-18.5-45.5t-45-18.5-45.5 18.5-19 45.5h-64q0-26-18.5-45t-45-19-45.5 18.5-19 45.5H64q0-27-18.5-45.5T0 896v-64q27 0 45.5-18.5t18.5-45T45.5 723 0 704v-64q27 0 45.5-18.5t18.5-45T45.5 531 0 512v-64q27 0 45.5-19T64 383.5t-18.5-45T0 320v-64q27 0 45.5-19T64 191.5t-18.5-45T0 128V64q27 0 45.5-18.5T64 0h64q0 27 19 45.5T192.5 64t45-19T256 0h64q0 27 19 45.5T384.5 64t45-18.5T448 0h64q0 26 19 45t45.5 19 45-18.5T640 0h64q0 27 19 45.5T768.5


ode !== "undefined" && elem.getAttributeNode("id");

        			return elem.nodeType === 1 && node && node.nodeValue === match;
        		};
        	}

        	root.removeChild( form );

        	// release memory in IE
        	root = form = null;
        })();

        (function(){
        	// Check to see if the browser returns only elements
        	// when doing getElementsByTagName("*")

        	// Create a fake element
        	var div = document.createElement("div");
        	div.appendChild( document.createComment("") );

        	// Make sure no comments are found
        	if ( div.getElementsByTagName("*").length > 0 ) {
        		Expr.find.TAG = function( match, context ) {
        			var results = context.getElementsByTagName( match[1] );

        			// Filter out possible comments
        			if ( match[1] === "*" ) {
        				var tmp = [];

        				for ( var i = 0; results[i]; i++ ) {
        					if ( results[i].nodeType === 1 ) {
        						tmp.push( results[i] );
        					}
        				}

        				results = tmp;
        			}

        			return results;
        		};
        	}

        	// Check to see if an attribute returns normalized href attributes
        	div.innerHTML = "";

        	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
        			div.firstChild.getAttribute("href") !== "#" ) {

        		Expr.attrHandle.href = function( elem ) {
        			return elem.getAttribute( "href", 2 );
        		};
        	}

        	// release memory in IE
        	div = null;
        })();

        if ( document.querySelectorAll ) {
        	(function(){
        		var oldSizzle = Sizzle,
        			div = document.createElement("div"),
        			id = "__sizzle__";

        		div.innerHTML = "

";

        		// Safari can't handle uppercase or unicode characters when
        		// in quirks mode.
        		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
        			return;
        		}

        		Sizzle = function( query, context, extra, seed ) {
        			context = context || document;

        			// Only use querySelectorAll on non-XML documents
        			// (ID selectors don't work in non-HTML documents)
        			if ( !seed && !Sizzle.isXML(context) ) {
        				// See if we find a selector to speed up
        				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );

        				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
        					// Speed-up: Sizzle("TAG")
        					if ( match[1] ) {
        						return makeArray( context.getElementsByTagName( query ), extra );

        					// Speed-up: Sizzle(".CLASS")
        					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
        						return makeArray( context.getElementsByClassName( match[2] ), extra );
        					}
        				}

        				if ( context.nodeType === 9 ) {
        					// Speed-up: Sizzle("body")
        					// The body element only exists once, optimize finding it
        					if ( query === "body" && context.body ) {
        						return makeArray( [ context.body ], extra );

        					// Speed-up: Sizzle("#ID")
        					} else if ( match && match[3] ) {
        						var


/ wx.wxUSE_XPM

--if wx.wxUSE_PNM then
    image:Destroy()

    if ( not image:LoadFile( dir .. "horse.pnm", wx.wxBITMAP_TYPE_PNM ) ) then
        wx.wxLogError("Can't load PNM image")
    else
        this.my_horse_pnm = wx.wxBitmap( image )
    end

    image:Destroy()

    if ( not image:LoadFile( dir .. "horse_ag.pnm", wx.wxBITMAP_TYPE_PNM ) ) then
        wx.wxLogError("Can't load PNM image")
    else
        this.my_horse_asciigrey_pnm = wx.wxBitmap( image )
    end

    image:Destroy()

    if ( not image:LoadFile( dir .. "horse_rg.pnm", wx.wxBITMAP_TYPE_PNM ) ) then
        wx.wxLogError("Can't load PNM image")
    else
        this.my_horse_rawgrey_pnm = wx.wxBitmap( image )
    end
--end --// wx.wxUSE_PNM

--if wx.wxUSE_LIBTIFF then
    image:Destroy()

    if ( not image:LoadFile( dir .. "horse.tif", wx.wxBITMAP_TYPE_TIF ) ) then
        wx.wxLogError("Can't load TIFF image")
    else
        this.my_horse_tiff = wx.wxBitmap( image )
    end
--end --// wx.wxUSE_LIBTIFF

--if wx.wxUSE_LIBTIFF then
    image:Destroy()

    if ( not image:LoadFile( dir .. "horse.tga", wx.wxBITMAP_TYPE_TGA ) ) then
        wx.wxLogError("Can't load TGA image")
    else
        this.my_horse_tga = wx.wxBitmap( image )
    end
--end --// wx.wxUSE_LIBTIFF

    this:CreateAntiAliasedBitmap()

    this.my_smile_xbm = wx.wxBitmap( smile_bits_str, smile_width,
                                 smile_height, 1 )
    this.my_smile_xbm = wx.wxBitmap( smile_bits, smile_width,
                                 smile_height, 1 )

    --// demonstrates XPM automatically using the mask when saving
    if ( this.m_bmpSmileXpm:Ok() ) then
        this.m_bmpSmileXpm:SaveFile(dir .. "saved.xpm", wx.wxBITMAP_TYPE_XPM)
    end

--if wx.wxUSE_ICO_CUR then
    image:Destroy()

    if ( not image:LoadFile( dir .. "horse.ico", wx.wxBITMAP_TYPE_ICO, 0 ) ) then
        wx.wxLogError("Can't load first ICO image")
    else
        this.my_horse_ico32 = wx.wxBitmap( image )
    end

    image:Destroy()

    if ( not image:LoadFile( dir .. "horse.ico", wx.wxBITMAP_TYPE_ICO, 1 ) ) then
        wx.wxLogError("Can't load second ICO image")
    else
        this.my_horse_ico16 = wx.wxBitmap( image )
    end

    image:Destroy()

    if ( not image:LoadFile( dir .. "horse.ico" ) ) then
        wx.wxLogError("Can't load best ICO image")
    else
        this.my_horse_ico = wx.wxBitmap( image )
    end

    image:Destroy()

    if ( not image:LoadFile( dir .. "horse.cur", wx.wxBITMAP_TYPE_CUR ) ) then
        wx.wxLogError("Can't load best ICO image")
    else
        this.my_horse_cur = wx.wxBitmap( image )
        this.xH = 30 + image:GetOptionInt(wx.wxIMAGE_OPTION_CUR_HOTSPOT_X)
        this.yH = 2420


Deprecated('Use oneStringDescriptor instead')
const OneString$json = const {
  '1': 'OneString',
  '2': const [
    const {'1': 'data', '3': 1, '4': 1, '5': 9, '10': 'data'},
  ],
};

/// Descriptor for `OneString`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List oneStringDescriptor =
    $convert.base64Decode('CglPbmVTdHJpbmcSEgoEZGF0YRgBIAEoCVIEZGF0YQ==');
@$core.Deprecated('Use moreStringDescriptor instead')
const MoreString$json = const {
  '1': 'MoreString',
  '2': const [
    const {'1': 'data', '3': 1, '4': 3, '5': 9, '10': 'data'},
  ],
};

/// Descriptor for `MoreString`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List moreStringDescriptor =
    $convert.base64Decode('CgpNb3JlU3RyaW5nEhIKBGRhdGEYASADKAlSBGRhdGE=');
@$core.Deprecated('Use oneBytesDescriptor instead')
const OneBytes$json = const {
  '1': 'OneBytes',
  '2': const [
    const {'1': 'data', '3': 1, '4': 1, '5': 12, '10': 'data'},
  ],
};

/// Descriptor for `OneBytes`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List oneBytesDescriptor =
    $convert.base64Decode('CghPbmVCeXRlcxISCgRkYXRhGAEgASgMUgRkYXRh');
@$core.Deprecated('Use moreBytesDescriptor instead')
const MoreBytes$json = const {
  '1': 'MoreBytes',
  '2': const [
    const {'1': 'data', '3': 1, '4': 3, '5': 12, '10': 'data'},
  ],
};

/// Descriptor for `MoreBytes`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List moreBytesDescriptor =
    $convert.base64Decode('CglNb3JlQnl0ZXMSEgoEZGF0YRgBIAMoDFIEZGF0YQ==');
@$core.Deprecated('Use int32MessageDescriptor instead')
const Int32Message$json = const {
  '1': 'Int32Message',
  '2': const [
    const {'1': 'data', '3': 1, '4': 1, '5': 5, '10': 'data'},
  ],
};

/// Descriptor for `Int32Message`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List int32MessageDescriptor =
    $convert.base64Decode('CgxJbnQzMk1lc3NhZ2USEgoEZGF0YRgBIAEoBVIEZGF0YQ==');
@$core.Deprecated('Use uint32MessageDescriptor instead')
const Uint32Message$json = const {
  '1': 'Uint32Message',
  '2': const [
    const {'1': 'data', '3': 1, '4': 1, '5': 13, '10': 'data'},
  ],
};

/// Descriptor for `Uint32Message`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List uint32MessageDescriptor =
    $convert.base64Decode('Cg1VaW50MzJNZXNzYWdlEhIKBGRhdGEYASABKA1SBGRhdGE=');
@$core.Deprecated('Use int64MessageDescriptor instead')
const Int64Message$json = const {
  '1


      : never
  >;
  stores: Array<
    S extends [Store<infer A>, Store<infer B>]
      ? Equal<A, B> extends true
        ? S
        : never
      : never
  >;
}) {
  for (const [fromEvent, toEvent, mapFn] of config.events) {
    if (mapFn) forward({ from: fromEvent.map(mapFn), to: toEvent });
    else forward({ from: fromEvent, to: toEvent });
  }

  for (const [fromStore, toStore] of config.stores) {
    forward({ from: fromStore, to: toStore });

    toStore.defaultState = fromStore.defaultState;

    // It's overrides initial value on toStore
    // https://t.me/c/1489066599/4652
    (toStore as any).stateRef.before = [
      {
        type: 'map',
        fn: (state: unknown) => state,
        from: (fromStore as any).stateRef,
      },
    ];
  }
}
import { Inote } from "@/interface/Interface";

const dbName = "NoteDB";
const storeName = "NoteStore";

/**
 * DB処理をまとめたクラス
 */
export class NoteRepository {
    private Notes: Inote[] = [];
    private Database: IDBDatabase | null = null;

    /**
     * DB open
     * @return
     */
    openDb(): Promise<void> {
        return new Promise(resolve => {
            const indexedDB = window.indexedDB;
            const openReq = indexedDB.open(dbName, 4);
            // eslint-disable-next-line @typescript-eslint/no-explicit-any
            openReq.onsuccess = (event: any) => {
                // onupgradeneededの後に実行。更新がない場合はこれだけ実行
                if (event && event.target) {
                    this.Database = event.target.result as IDBDatabase;
                }
                resolve();
            };

            // オブジェクトストアを生成
            openReq.onupgradeneeded = e => {
                if (!e || !e.target) return;
                // eslint-disable-next-line @typescript-eslint/no-explicit-any
                const db = (e.target as any).result as IDBDatabase;
                const stored = db.createObjectStore(storeName, {
                    keyPath: "id"
                });
                stored.createIndex("index", "id");
            };

            openReq.onerror = e => {
                // 接続に失敗
                if (!e || !e.target) return;
                throw new Error("接続に失敗しました");
            };
        });
    }

    /**
     * 保存する
     * @param note
     */
    save(note: Inote): void {
        if (!this.Database) {
            return;
        }
        const trans = this.Database.transaction(storeName, "readwrite");
        const store = trans.objectStore(storeName);
        store.put(note);
    }

    /**
     * 一時削除する 一覧からごみ箱へ移す deleteFlgを1にする
     * @param note
     */
    updates(note: Inote): void | Promise<void> {
        if (!this.Database) {
            return;
        }
        const trans = this.Database.transaction(storeName, "readwrite");
        const store = trans.objectStore(storeName);

        return new Promise(resolve => {
            store.get(note.id).onsuccess = () => {
                note.deleteFlg = 1;
                store.put(note).onsuccess = () => {
                    resolve();
                };
            };
        });
    }

    /**
     * ごみ箱から一覧に戻す deleteFlgを0にする
     * @param note
     */
    backupdates(note: Inote): void | Promise<void> {
        if (!this.Database) {
            return;
        }
        const trans = this.Database.transaction(storeName,


`   | Vim jump list Older ↔ Newer  |
|`KC_J` ↔ `KC_K`               | Down ↔ Up                    |
|`KC_H` ↔ `KC_L`               | Left ↔ Right                 |
|`KC_W` ↔ `KC_B`               | Forward ↔ Backward by Word   |

(where above, "mod" is Ctrl, Alt, or GUI)

## Defining alternate keys

Use the `get_alt_repeat_key_keycode_user()` callback to define the "alternate"
for additional keys or override the default definitions. For example, to define
Ctrl + Y as the alternate of Ctrl + Z, and vice versa, add the following in
keymap.c:

```c
uint16_t get_alt_repeat_key_keycode_user(uint16_t keycode, uint8_t mods) {
    if ((mods & MOD_MASK_CTRL)) {  // Was Ctrl held?
        switch (keycode) {
            case KC_Y: return C(KC_Z);  // Ctrl + Y reverses to Ctrl + Z.
            case KC_Z: return C(KC_Y);  // Ctrl + Z reverses to Ctrl + Y.
        }
    }

    return KC_TRNS;  // Defer to default definitions.
}
```

The `keycode` and `mods` args are the keycode and mods that were active with the
last pressed key. The meaning of the return value from this function is:

* `KC_NO` – do nothing (any predefined alternate key is not used);
* `KC_TRNS` – use the default alternate key if it exists;
* anything else – use the specified keycode. Any keycode may be returned
  as an alternate key, including custom keycodes.

Another example, defining Shift + Tab as the alternate of Tab, and vice versa:

```c
uint16_t get_alt_repeat_key_keycode_user(uint16_t keycode, uint8_t mods) {
    bool shifted = (mods & MOD_MASK_SHIFT);  // Was Shift held?
    switch (keycode) {
        case KC_TAB:
            if (shifted) {        // If the last key was Shift + Tab,
                return KC_TAB;    // ... the reverse is Tab.
            } else {              // Otherwise, the last key was Tab,
                return S(KC_TAB); // ... and the reverse is Shift + Tab.
            }
    }

    return KC_TRNS;
}
```

#### Eliminating SFBs

Alternate Repeat can be configured more generally to perform an action that
"complements" the last key. Alternate Repeat is not limited to reverse
repeating, and it need not be symmetric. You can use it to eliminate cases of
same-finger bigrams in your layout, that is, pairs of letters typed by the same
finger. The following addresses the top 5 same-finger bigrams in English on
QWERTY, so that for instance "`ed`" may be typed as E, Alt
Repeat.

```c
uint16_t get_alt_repeat_key_keycode_user(uint16_t keycode, uint8_t mods) {
    switch (keycode) {
        case KC_E: return KC_D;  // For "ED" bigram.
        case KC_D: return KC_E;  // For "DE" bigram.
        case KC_C: return KC_E;  // For "CE" bigram.
        case KC_L: return KC_O;  // For "LO" bigram.
        case KC_U: return KC_N;  // For "UN" bigram.
    }

    return KC_TRNS;
}
```

#### Typing shortcuts

A useful possibility is having Alternate Repeat press [a
macro](feature_macros.md). This way macros can be used without having to
dedicate keys to them. The following defines a couple shortcuts.

* Typing K, Alt Repeat produces "`key


sensusGroupSize:       1,
		MinNumberOfEligibleShardNodes: 1,
		MinNumberOfEligibleMetaNodes:  1,
		NumOfShards:                   1,
		Owners: map[string]*OwnerStats{
			owner1: owner1Stats,
			owner2: owner2Stats,
			owner3: owner3Stats,
		},
		MaxNodesChangeConfig: []config.MaxNodesChangeConfig{
			{
				EpochEnable:            0,
				MaxNumNodes:            8,
				NodesToShufflePerShard: 1,
			},
		},
	}
	node := NewTestMetaProcessorWithCustomNodes(cfg)
	node.EpochStartTrigger.SetRoundsPerEpoch(4)

	// 1.1 Check initial config is correct
	currNodesConfig := node.NodesConfig
	require.Len(t, getAllPubKeys(currNodesConfig.eligible), 4)
	require.Len(t, getAllPubKeys(currNodesConfig.waiting), 4)
	require.Len(t, currNodesConfig.eligible[core.MetachainShardId], 2)
	require.Len(t, currNodesConfig.waiting[core.MetachainShardId], 2)
	require.Len(t, currNodesConfig.eligible[0], 2)
	require.Len(t, currNodesConfig.waiting[0], 2)

	owner1StakingQueue := owner1Stats.StakingQueueKeys
	owner3StakingQueue := owner3Stats.StakingQueueKeys
	queue := make([][]byte, 0)
	queue = append(queue, owner1StakingQueue...)
	queue = append(queue, owner3StakingQueue...)
	require.Len(t, currNodesConfig.queue, 3)
	requireSameSliceDifferentOrder(t, currNodesConfig.queue, queue)

	require.Empty(t, currNodesConfig.shuffledOut)
	require.Empty(t, currNodesConfig.auction)

	// NewOwner0 stakes 1 node with top up = 0 before staking v4; should be sent to staking queue
	newOwner0 := "newOwner0"
	newNodes0 := map[string]*NodesRegisterData{
		newOwner0: {
			BLSKeys:    [][]byte{generateAddress(333)},
			TotalStake: big.NewInt(nodePrice),
		},
	}

	// 1.2 Check staked node before staking v4 is sent to staking queue
	node.ProcessStake(t, newNodes0)
	queue = append(queue, newNodes0[newOwner0].BLSKeys...)
	currNodesConfig = node.NodesConfig
	require.Len(t, currNodesConfig.queue, 4)
	requireSameSliceDifferentOrder(t, currNodesConfig.queue, queue)

	// NewOwner1 stakes 1 node with top up = 2*node price; should be sent to auction list
	newOwner1 := "newOwner1"
	newNodes1 := map[string]*NodesRegisterData{
		newOwner1: {
			BLSKeys:    [][]byte{generateAddress(444)},
			TotalStake: big.NewInt(3 * nodePrice),
		},
	}
	// 2. Check config after staking v4 init when a new node is staked
	node.Process(t, 4)
	node.ProcessStake(t, newNodes1)
	node.ProcessReStake(t, queue)
	currNodesConfig = node.NodesConfig
	queue = append(queue, newNodes1[newOwner1].BLSKeys...)
	require.Empty(t, currNodesConfig.queue)
	require.Empty(t, currNodesConfig.leaving)
	require.Len(t, currNodesConfig.auction, 5)
	requireSameSliceDifferentOrder(t, currNodesConfig.auction, queue)

	// NewOwner2 stakes 2 node with top up = 2*node price; should be sent to auction list
	newOwner2 := "newOwner2"
	newNodes2 := map[string]*NodesRegisterData{
		newOwner2: {
			BLSKeys:    [][]byte{generateAddress


  constructor(domObject: { tag: TagName, props?: PropType, children?: ChildrenType }) {
    this._tag = domObject.tag;
    this._props = domObject.props;
    this._children = domObject.children;
  }
  times(times: number): DomObjectType[] {
    return Array(times).fill(cloneDeep(this.getDomObject()));
  }
  join(domObjectBuilder: DomObjectBuilder | DomObjectBuilder[]): DomObjectType[] {
    if (Array.isArray(domObjectBuilder)) {
      return [this.getDomObject(), ...domObjectBuilder.map(builder => builder.getDomObject())];
    }
    return [this.getDomObject(), domObjectBuilder.getDomObject()];
  }
  append(domObjectBuilder: DomObjectBuilder | DomObjectBuilder[] | string): DomObjectBuilder {
    const children = this._children ? this._children : [];
    if (Array.isArray(domObjectBuilder)) {
      this._children = [...children, ...domObjectBuilder.map(builder => builder.getDomObject())];
    }
    else if (typeof domObjectBuilder === 'string') {
      this._children = [...children, domObjectBuilder];
    }
    else {
      this._children = [...children, domObjectBuilder.getDomObject()];
    }
    return this;
  }
  setProps(props: PropType) {
    this._props = props;
  }
  getDomObject(): DomObjectType {
    const obj = Object.create(null);
    obj.tag = this._tag;
    if (this._children) {
      obj.children = this._children;
    }
    if (this._props) {
      obj.props = this._props;
    }
    return obj
  }
}import * as std from "../../index";
import { Temporary } from "../../base/Temporary";

export function test_linear_containers(): void
{
    _Test_linear(new std.Vector<number>());
    _Test_linear(new std.Deque<number>());
    _Test_linear(new std.List<number>());

    _Test_linear(std.begin(new Array<number>()).source());
}

function _Test_linear<
        SourceT extends std.base.ILinearContainer<number, SourceT, IteratorT, ReverseT>,
        IteratorT extends std.base.Iterator<number, SourceT, IteratorT, ReverseT>,
        ReverseT extends std.base.ReverseIterator<number, SourceT, IteratorT, ReverseT>>
    (vec: SourceT): void
{
    //----
    // CONSTRUCT ELEMENTS
    //----
    // 0 ~ 9
    vec.assign(10, 0);
    std.iota(vec.begin(), vec.end(), 0);

    //----
    // ELEMENTS I/O
    //----
    // ERASE AN ELEMENT
    let it: IteratorT = std.advance(<Temporary>vec.begin(), 3); // STEP TO 3
    it = vec.erase(it); // AND ERASE THE 3

    if (it.value !== 4) // MUST BE 4
        throw new std.DomainError("It's wrong");

    // INSERT AN ELEMENT
    it = std.advance(<Temporary>vec.begin(), 2);
    it = vec.insert(it, -1); // insert -1

    if (it.value !== -1)
        throw new std.DomainError("It's wrong");

    // ERASE RANGE
    it = std.advance(<Temporary>vec.begin(), 6);
    it = vec.erase(it, std.advance(<Temporary>it, 3)); // erase from 6 to 9

    if (it.value !== 9)
        throw new std.DomainError("It's wrong");

    //----
    // FINAL VALIDATION
    //----
    _Validate_linear_elements(vec, [0, 1, -1, 2, 4, 5, 9]);
}

function _Validate_linear_elements<
        SourceT extends std.base.ILinearContainer<number, SourceT, IteratorT, ReverseT>,
        IteratorT extends std.base.Iterator<number, SourceT, IteratorT, ReverseT>,
        ReverseT ex


      border-radius: 10px;
          transition: all 0.3s ease;
          box-shadow: 0 2px 5px rgba(0,0,0,0.1);
          padding: 14px; /* 从12px增加到14px */
          box-sizing: border-box;
          text-align: center;
        }

        /* 开启状态样式 - 显著区分颜色 */
        input:checked + .tile {
          background-color: #2196F3; /* 开启状态使用蓝色背景 */
          box-shadow: 0 3px 8px rgba(33, 150, 243, 0.3);
        }

        /* 开启状态下的图标和文字颜色 */
        input:checked + .tile .tile-icon,
        input:checked + .tile .tile-label {
          color: white; /* 开启状态使用白色文字和图标，提高对比度 */
        }

        /* 增大图标尺寸 */
        .tile-icon {
          font-size: 26px; /* 从22px增大到26px */
          margin-right: 12px;
          color: #555; /* 关闭状态下深一点的颜色 */
          transition: all 0.3s ease;
        }

        /* 增大文字尺寸 */
        .tile-label {
          font-weight: 500;
          font-size: 20px; /* 从18px增大到20px */
          color: #444; /* 关闭状态下深一点的颜色 */
          transition: all 0.3s ease;
          line-height: 1.2;
        }

        /* 悬停效果增强 */
        .tile:hover {
          transform: translateY(-3px);
          box-shadow: 0 4px 10px rgba(0,0,0,0.2);
        }

        /* 修复黑暗模式下的一些样式 */
        body.dark-mode .tile {
          background-color: #2d2d2d;
        }

        body.dark-mode .tile-icon,
        body.dark-mode .tile-label {
          color: #aaa;
        }

        body.dark-mode input:checked + .tile {
          background-color: #1976d2;
        }

        /* 响应式调整也需要更新 */
        @media only screen and (max-width: 767px) {
          .tile {
            height: 75px;
            padding: 10px;
          }

          .tile-icon {
            font-size: 22px;
          }

          .tile-label {
            font-size: 18px;
          }
        }

        .switch-item {
          flex: 1 1 30%;
          min-width: 160px; /* 增加最小宽度以适应水平布局 */
          margin: 10px;
        }

        .switch-item.empty {
          visibility: hidden;
        }

        /* 响应式调整 - 在小屏幕上改为两列 */
        @media (max-width: 768px) {
          .switch-item {
            flex: 1 1 45%; /* 在中等屏幕上两列显示 */
          }
        }

        @media (max-width: 480px) {
          .switch-item {
            flex: 1 1 100%; /* 在小屏幕上单列显示 */
          }
        }

        /* 确保在手机强制桌面视图中布局正确 */
        @media only screen and (max-width: 767px) {
          .tile {
            height: 75px; /* 在小屏幕上进一步减小高度 */
            padding: 10px;
          }

          .tile-icon {
            font-size: 22px;
          }

          .tile-label {
            font-


ETHODIMP AXPlatformNodeWin::accLocation(LONG* physical_pixel_left,
                                              LONG* physical_pixel_top,
                                              LONG* width,
                                              LONG* height,
                                              VARIANT var_id) {
  AXPlatformNodeWin* target;
  COM_OBJECT_VALIDATE_VAR_ID_4_ARGS_AND_GET_TARGET(
      var_id, physical_pixel_left, physical_pixel_top, width, height, target);

  gfx::Rect bounds = target->GetDelegate()->GetBoundsRect(
      AXCoordinateSystem::kScreenPhysicalPixels,
      AXClippingBehavior::kUnclipped);
  *physical_pixel_left = bounds.x();
  *physical_pixel_top = bounds.y();
  *width = bounds.width();
  *height = bounds.height();

  if (bounds.IsEmpty())
    return S_FALSE;

  return S_OK;
}

IFACEMETHODIMP AXPlatformNodeWin::accNavigate(LONG nav_dir,
                                              VARIANT start,
                                              VARIANT* end) {
  AXPlatformNodeWin* target;
  COM_OBJECT_VALIDATE_VAR_ID_1_ARG_AND_GET_TARGET(start, end, target);
  end->vt = VT_EMPTY;
  if ((nav_dir == NAVDIR_FIRSTCHILD || nav_dir == NAVDIR_LASTCHILD) &&
      V_VT(&start) == VT_I4 && V_I4(&start) != CHILDID_SELF) {
    // MSAA states that navigating to first/last child can only be from self.
    return E_INVALIDARG;
  }

  IAccessible* result = nullptr;
  switch (nav_dir) {
    case NAVDIR_FIRSTCHILD:
      if (GetDelegate()->GetChildCount() > 0)
        result = GetDelegate()->GetFirstChild();
      break;

    case NAVDIR_LASTCHILD:
      if (GetDelegate()->GetChildCount() > 0)
        result = GetDelegate()->GetLastChild();
      break;

    case NAVDIR_NEXT: {
      AXPlatformNodeBase* next = target->GetNextSibling();
      if (next)
        result = next->GetNativeViewAccessible();
      break;
    }

    case NAVDIR_PREVIOUS: {
      AXPlatformNodeBase* previous = target->GetPreviousSibling();
      if (previous)
        result = previous->GetNativeViewAccessible();
      break;
    }

    case NAVDIR_DOWN: {
      // This direction is not implemented except in tables.
      if (!GetTableRow() || !GetTableRowSpan() || !GetTableColumn())
        return E_NOTIMPL;

      AXPlatformNodeBase* next = target->GetTableCell(
          *GetTableRow() + *GetTableRowSpan(), *GetTableColumn());
      if (!next)
        return S_OK;

      result = next->GetNativeViewAccessible();
      break;
    }

    case NAVDIR_UP: {
      // This direction is not implemented except in tables.
      if (!GetTableRow() || !GetTableColumn())
        return E_NOTIMPL;

      AXPlatformNodeBase* next =
          target->GetTableCell(*GetTableRow() - 1, *GetTableColumn());
      if (!next)
        return S_OK;

      result = next->GetNativeViewAccessible();
      break;
    }

    case NAVDIR_LEFT: {
      // This direction is not implemented except in tables.
      if (!GetTableRow() || !GetTableColumn())
        return E_NOTIMPL;

      AXPlatformNodeBase* next =
          target->GetTableCell(*GetTableRow(), *GetTableColumn() - 1);
      if (!next)
        return S_OK;

      result = next->GetNativeViewAccessible();
      break;
    }

    case NAVDIR_RIGHT: {
      // This direction is not implemented except in tables.

      if (!GetTableRow() || !GetTableColumn() || !GetTableColumnSpan())
        return E_NOTIMPL;

      AXPlatformNodeBase* next = target->GetTableCell(
          *GetTableRow


local Translations = {
    error = {
        not_give = "Verilen id ye eşya verilemedi.",
        givecash = "Kullanım: /givecash [ID] [MİKTAR]",
        wrong_id = "Yanlış ID.",
        dead = "Öldün.",
        too_far_away = "Çok uzaksın.",
        not_enough = "Bu miktara sahip değilsiniz.",
        invalid_amount = "Geçersiz Miktar Verildi"
    },
    success = {
        debit_card = "Başarıyla bir Banka Kartı sipariş ettiniz.",
        cash_deposit = "Başarıyla nakit para yatırdınız. Miktar: $%{value}",
        cash_withdrawal = "Para çekme işlemini başarıyla gerçekleştirdiniz. Miktar: $%{value}",
        updated_pin = "Banka kartı şifrenizi başarıyla güncellediniz.",
        savings_deposit = "Başarılı bir şekilde tasarruf hesabına para yatırdınız. Miktar $%{value}",
        savings_withd


()

async def regular_sync():
    """
    Regular synchronization process.
    """
    while True:
        logging.info('No flag file found. Triggering regular synchronization...')
        trigger_sync()
        # Sleep for 30 minutes
        await asyncio.sleep(1800)

async def main():
    # Create tasks for coroutines
    flag_task = asyncio.create_task(check_for_flag_file_forever())
    sync_task = asyncio.create_task(regular_sync())

    # Await the tasks using asyncio.wait
    await asyncio.wait([flag_task, sync_task])

async def check_for_flag_file_forever():
    """
    Check for the flag file continuously.
    """
    while True:
        check_for_flag_file()
        await asyncio.sleep(1)

if __name__ == '__main__':
    TickTickClient._login = new_login
    auth_client = OAuth2(client_id='QXVUXrt7ppuQ982g0q',
                        client_secret='1#L(c1I9nVL9xb^#$C*dJvh7dlKT4e5J',
                        redirect_uri='https://127.0.0.1:8080'
                        )
    client = TickTickClient(username, password, auth_client)

    # asyncio.run(main())


'},
    {HashIs = 79051028, ModNam = 'v_20_rubbermat'},
    {HashIs = 360511623, ModNam = 'v_20_sm01'},
    {HashIs = 1781977939, ModNam = 'v_20_stairwell_det01'},
    {HashIs = 859980781, ModNam = 'v_20_wall_light003'},
    {HashIs = -1990168528, ModNam = 'v_20_wall_light004'},
    {HashIs = 1609178436, ModNam = 'v_20_wall_light005'},
    {HashIs = -1408780930, ModNam = 'v_20_wall_light006'},
    {HashIs = 2051396091, ModNam = 'v_20_wall_light007'},
    {HashIs = -1203089917, ModNam = 'v_20_wall_light008'},
    {HashIs = 1599995977, ModNam = 'v_20_wall_light01'},
    {HashIs = -1375572224, ModNam = 'v_20_wep_lo'},
    {HashIs = 2098308325, ModNam = 'v_21_dummybox'},
    {HashIs = -2130895084, ModNam = 'v_22_ao_room'},
    {HashIs = -1432249240, ModNam = 'v_22_bullets'},
    {HashIs = 1755624762, ModNam = 'v_22_cables1'},
    {HashIs = 978147468, ModNam = 'v_22_cables2'},
    {HashIs = -1343448250, ModNam = 'v_22_g2_shell'},
    {HashIs = 2103117968, ModNam = 'v_22_g2_vents'},
    {HashIs = 1874496076, ModNam = 'v_22_glass01'},
    {HashIs = -1685528088, ModNam = 'v_22_glass02'},
    {HashIs = -783790750, ModNam = 'v_22_glass03'},
    {HashIs = 2129668279, ModNam = 'v_22_glass04'},
    {HashIs = 884053051, ModNam = 'v_22_glass05'},
    {HashIs = 1682142046, ModNam = 'v_22_glass06'},
    {HashIs = -1713709428, ModNam = 'v_22_glass07'},
    {HashIs = 1201191433, ModNam = 'v_22_glass08'},
    {HashIs = 569503416, ModNam = 'v_22_glass09'},
    {HashIs = -79818067, ModNam = 'v_22_glass10'},
    {HashIs = -244056295, ModNam = 'v_22_glass11'},
    {HashIs = -542352502, ModNam = 'v_22_glass12'},
    {HashIs = -2112322594, ModNam = 'v_22_gunsneon'},
    {HashIs = -1882883884, ModNam = 'v_22_handguns'},
    {HashIs = 601807338, ModNam = 'v_22_merch01'},
    {HashIs = 1377272428, ModNam = 'v_22_merchglass003'},
    {HashIs = 1139861023, ModNam = 'v_22_merchglass004'},
    {HashIs = 1580604025, ModNam = 'v_22_merchglass005'},
    {HashIs = -1827077066, ModNam = 'v_22_merchglass009'},
    {HashIs = 1285617263, ModNam = 'v_22_merchglass010'},
    {HashIs = 525573077, ModNam = 'v_22_merchglass011'},
    {HashIs = 1135617594, ModNam = 'v_22


Id < this._frameCount; frameId++)
            for (int trackId = 0; trackId < trackCount; trackId++)
            {
                // Try to get the frame buffer for the given joint, create it if it doesn't exist
                uint jointHash = jointHashes[trackId];
                if (!this._jointFrames.TryGetValue(jointHash, out UncompressedFrame[] jointFrames))
                {
                    jointFrames = new UncompressedFrame[this._frameCount];
                    this._jointFrames[jointHash] = jointFrames;
                }

                jointFrames[frameId] = new()
                {
                    TranslationId = br.ReadUInt16(),
                    ScaleId = br.ReadUInt16(),
                    RotationId = br.ReadUInt16()
                };
            }
    }

    private void ReadLegacy(BinaryReader br)
    {
        uint skeletonId = br.ReadUInt32();

        int trackCount = br.ReadInt32();
        this._frameCount = br.ReadInt32();
        this.Fps = br.ReadInt32();
        this.Duration = this._frameCount / this.Fps;

        this._jointFrames = new Dictionary<uint, UncompressedFrame[]>(trackCount);
        this._quatPalette = new Quaternion[this._frameCount * trackCount];
        this._vectorPalette = new Vector3[this._frameCount * trackCount + 1];
        this._vectorPalette[0] = Vector3.One; // add artificial static scale vector

        for (int i = 0; i < trackCount; i++)
        {
            string trackName = br.ReadPaddedString(32);
            uint flags = br.ReadUInt32();

            uint jointHash = Elf.HashLower(trackName);
            UncompressedFrame[] jointFrames = new UncompressedFrame[this._frameCount];
            this._jointFrames[jointHash] = jointFrames;

            for (int j = 0; j < this._frameCount; j++)
            {
                int index = i * this._frameCount + j;
                this._quatPalette[index] = br.ReadQuaternion();
                this._vectorPalette[index + 1] = br.ReadVector3();

                jointFrames[j] = new UncompressedFrame
                {
                    RotationId = (ushort)index,
                    ScaleId = 0,
                    TranslationId = (ushort)(index + 1)
                };
            }
        }
    }

    /// <inheritdoc/>
    public void Evaluate(float time, IDictionary<uint, (Quaternion Rotation, Vector3 Translation, Vector3 Scale)> pose)
    {
        ThrowIfDisposed();

        float frameDuration = 1 / this.Fps;
        int maxFrame = this._frameCount - 1;
        int evaluationFrame = Math.Min(maxFrame, (int)(time / frameDuration));
        int nextFrame = Math.Min(maxFrame, evaluationFrame + 1);

        float evaluationFrameTime = evaluationFrame * frameDuration;
        float interpolationDuration = (nextFrame * frameDuration) - evaluationFrameTime;


ORM_MAX_LENGTH, &maxlen);

		if (maxlen == 0) {
			os::Printer::log("GLSL: failed to retrieve uniform information", ELL_ERROR);
			return false;
		}

		// seems that some implementations use an extra null terminator.
		++maxlen;
		std::vector<c8> buf(maxlen);

		UniformInfo.clear();
		UniformInfo.reserve(num);

		for (GLint i = 0; i < num; ++i) {
			SUniformInfo ui;
			memset(buf.data(), 0, buf.size());

			GLint size;
			GL.GetActiveUniform(Program, i, maxlen, 0, &size, &ui.type, reinterpret_cast<GLchar *>(buf.data()));

			// array support, workaround for some bugged drivers.
			for (s32 i = 0; i < maxlen; ++i) {
				if (buf[i] == '[' || buf[i] == '\0')
					break;

				ui.name += buf[i];
			}

			ui.location = GL.GetUniformLocation(Program, buf.data());

			UniformInfo.push_back(std::move(ui));
		}
	}

	return true;
}

void COpenGL3MaterialRenderer::setBasicRenderStates(const SMaterial &material,
		const SMaterial &lastMaterial,
		bool resetAllRenderstates)
{
	Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
}

s32 COpenGL3MaterialRenderer::getVertexShaderConstantID(const c8 *name)
{
	return getPixelShaderConstantID(name);
}

s32 COpenGL3MaterialRenderer::getPixelShaderConstantID(const c8 *name)
{
	for (u32 i = 0; i < UniformInfo.size(); ++i) {
		if (UniformInfo[i].name == name)
			return i;
	}

	return -1;
}

bool COpenGL3MaterialRenderer::setVertexShaderConstant(s32 index, const f32 *floats, int count)
{
	return setPixelShaderConstant(index, floats, count);
}

bool COpenGL3MaterialRenderer::setVertexShaderConstant(s32 index, const s32 *ints, int count)
{
	return setPixelShaderConstant(index, ints, count);
}

bool COpenGL3MaterialRenderer::setVertexShaderConstant(s32 index, const u32 *ints, int count)
{
	return setPixelShaderConstant(index, ints, count);
}

bool COpenGL3MaterialRenderer::setPixelShaderConstant(s32 index, const f32 *floats, int count)
{
	if (index < 0 || UniformInfo[index].location < 0)
		return false;

	bool status = true;

	switch (UniformInfo[index].type) {
	case GL_FLOAT:
		GL.Uniform1fv(UniformInfo[index].location, count, floats);
		break;
	case GL_FLOAT_VEC2:
		GL.Uniform2fv(UniformInfo[index].location, count / 2, floats);
		break;
	case GL_FLOAT_VEC3:
		GL.Uniform3fv(UniformInfo[index].location, count / 3, floats);
		break;
	case GL_FLOAT_VEC4:
		GL.Uniform4fv(UniformInfo[index].location, count / 4, floats);
		break;
	case GL_FLOAT_MAT2:
		GL.UniformMatrix2fv(UniformInfo[index].location, count / 4, false, floats);
		break;
	case GL_FLOAT_MAT3:
		GL.UniformMatrix3fv(UniformInfo[index].location, count / 9, false, floats);
		break;
	case GL_FLOAT_MAT4:
		GL.UniformMatrix4fv(UniformInfo[index].location, count / 16, false, floats);
		break;
	case GL_SAMPLER_2D:
	case GL_SAMPLER_CUBE: {
		if (floats) {
			const GLint id = (GLint)(*floats);
			GL.Uniform1iv(UniformInfo[index].location, 1, &


);
}
yt-card-item-text-renderer[left-margin=CARD_ITEM_UX_SPACE_1],.yt-card-item-text-renderer[left-margin=CARD_ITEM_UX_SPACE_1] {
    margin-left: var(--ytd-margin-base);
}
yt-card-item-text-renderer[right-margin=CARD_ITEM_UX_SPACE_1],.yt-card-item-text-renderer[right-margin=CARD_ITEM_UX_SPACE_1] {
    margin-right: var(--ytd-margin-base);
}
yt-card-item-text-renderer[top-margin=CARD_ITEM_UX_SPACE_2],.yt-card-item-text-renderer[top-margin=CARD_ITEM_UX_SPACE_2] {
    margin-top: var(--ytd-margin-2x);
}
yt-card-item-text-renderer[bottom-margin=CARD_ITEM_UX_SPACE_2],.yt-card-item-text-renderer[bottom-margin=CARD_ITEM_UX_SPACE_2] {
    margin-bottom: var(--ytd-margin-2x);
}
yt-card-item-text-renderer[left-margin=CARD_ITEM_UX_SPACE_2],.yt-card-item-text-renderer[left-margin=CARD_ITEM_UX_SPACE_2] {
    margin-left: var(--ytd-margin-2x);
}
yt-card-item-text-renderer[right-margin=CARD_ITEM_UX_SPACE_2],.yt-card-item-text-renderer[right-margin=CARD_ITEM_UX_SPACE_2] {
    margin-right: var(--ytd-margin-2x);
}
yt-card-item-text-renderer[top-margin=CARD_ITEM_UX_SPACE_3],.yt-card-item-text-renderer[top-margin=CARD_ITEM_UX_SPACE_3] {
    margin-top: var(--ytd-margin-3x);
}
yt-card-item-text-renderer[bottom-margin=CARD_ITEM_UX_SPACE_3],.yt-card-item-text-renderer[bottom-margin=CARD_ITEM_UX_SPACE_3] {
    margin-bottom: var(--ytd-margin-3x);
}
yt-card-item-text-renderer[left-margin=CARD_ITEM_UX_SPACE_3],.yt-card-item-text-renderer[left-margin=CARD_ITEM_UX_SPACE_3] {
    margin-left: var(--ytd-margin-3x);
}
yt-card-item-text-renderer[right-margin=CARD_ITEM_UX_SPACE_3],.yt-card-item-text-renderer[right-margin=CARD_ITEM_UX_SPACE_3] {
    margin-right: var(--ytd-margin-3x);
}
yt-card-item-text-renderer[top-margin=CARD_ITEM_UX_SPACE_4],.yt-card-item-text-renderer[top-margin=CARD_ITEM_UX_SPACE_4] {
    margin-top: var(--ytd-margin-4x);
}
yt-card-item-text-renderer[bottom-margin=CARD_ITEM_UX_SPACE_4],.yt-card-item-text-renderer[bottom-margin=CARD_ITEM_UX_SPACE_4] {
    margin-bottom: var(--ytd-margin-4x);
}
yt-card-item-text-renderer[left-margin=CARD_ITEM_UX_SPACE_4],.yt-card-item-text-renderer[left-margin=CARD_ITEM_UX_SPACE_4] {
    margin-left: var(--ytd-margin-4x);
}
yt-card-item-text-rend


"""
=========================================
Reading NEXRAD Data from Google Cloud
=========================================

Within this example, we show how you can remotely access Next Generation Weather Radar (NEXRAD) Data from Google Cloud Storage
and plot quick looks of the datasets.

"""

print(__doc__)

# Author: Zach Sherman
# License: BSD 3 clause

import tarfile

# This example requires installation of the gcsfs library
import gcsfs
import matplotlib.pyplot as plt

import pyart

######################################
# Read NEXRAD Level 2 Data
# ------------------------
#
# Let's start first with NEXRAD Level 2 data, which is ground-based radar data collected
# by the National Oceanic and Atmospheric Administration (NOAA), as a part of the National Weather Service
# ### Configure our Filepath for NEXRAD Level 2 Data
# We will access data from Google cloud storage, with the data organized as:
#
#    ``gcp-public-data-nexrad-l2/year/month/day/radarsite/NWS_NEXRAD_NXL2DPBL_{radarsite}_{year}{month}{date}{hour}0000_{year}{month}{date}{hour}{minute}.tar``
#
# Where in our case, we are using a sample data file from Miami, Florida (KAMX)
# on October 7, 2016, at 0401:25 UTC. This means our path would look like:

gcs_path = "gcp-public-data-nexrad-l2/2016/10/07/KAMX/NWS_NEXRAD_NXL2DPBL_KAMX_20161007040000_20161007045959.tar"

#######################################
# First we can create a file system and retrieve the tar file to our current directory.
fs = gcsfs.GCSFileSystem()
fs.get(gcs_path, ".")

#######################################
# The we can use the tarfile module to extract the files within.

file = tarfile.open("NWS_NEXRAD_NXL2DPBL_KAMX_20161007040000_20161007045959.tar")
members = file.getmembers()

# This case we are getting only the first file.
file.extract(members[0].name, ".", filter="data")
file.close()

#######################################
# We can use the **pyart.io.read_nexrad_archive** module to access our data, passing in the member filepath.

radar = pyart.io.read_nexrad_archive(members[0].name)

#######################################
# Let's take a look at a summary of what fields are available.

print(list(radar.fields))

#######################################
# Let's plot the reflectivity field as a first step to investigating our dataset.

fig = plt.figure(figsize=(12, 4))
display = pyart.graph.RadarMapDisplay(radar)

display.plot_ppi_map("reflectivity")
plt.show()


) == 0);
            out.println("     <-- RECODE TEST 3");
        }

        {
            out.println("     --> RECODE TEST 4: invalid character set");
            ByteBuffer my_word_latin1    = char2bb(cmy_word_latin1);
            ByteBuffer result_buff       = ByteBuffer.allocateDirect(16);
            int[] lengths = new int[]  { 6 , 16 };
            int rr4 = csmap.recode(lengths, 0, 999, my_word_latin1, result_buff);
            out.println("          Return code: " + rr4);
            assert(rr4 == CharsetMapConst.RecodeStatus.RECODE_BAD_CHARSET);
            out.println("     <-- RECODE TEST 4");
        }

        {
            out.println("     --> RECODE TEST 5: source string is ill-formed UTF-8");
            ByteBuffer my_bad_utf8       = char2bb(cmy_bad_utf8);
            ByteBuffer result_buff       = ByteBuffer.allocateDirect(16);
            int[] lengths = new int[]  { 5 , 16 };
            int rr5 = csmap.recode(lengths, utf8_num, latin1_num,
                                   my_bad_utf8, result_buff);
            out.println("          Return code: " + rr5);
            assert(rr5 == CharsetMapConst.RecodeStatus.RECODE_BAD_SRC);
            out.println("     <-- RECODE TEST 5");
        }

        {
            out.println("     --> RECODE TEST 6: convert an actual java string to UTF-8");
            // Load the string into a ByteBuffer
            ByteBuffer str_bb = ByteBuffer.allocateDirect(16);
            CharBuffer cb = str_bb.asCharBuffer();
            cb.append("\u00FClker");
            cb.rewind();
            ByteBuffer result_buff       = ByteBuffer.allocateDirect(16);
            int[] lengths = new int[]  { 12 , 16 };

            int rr6 = csmap.recode(lengths, utf16_num, utf8_num,
                                   str_bb, result_buff);
            printRecodeResult(rr6, lengths, str_bb, result_buff);
            assert(lengths[0]) == 12;
            assert(lengths[1]) == 7;
            assert(bbncmp(result_buff, char2bb(cmy_word_utf8), 6) == 0);
            out.println("     <-- RECODE TEST 6");
        }

        out.println();

        {
            out.println("     --> IS MULTIBYTE TEST");
            boolean[] result = csmap.isMultibyte(latin1_num);
            assert(!result[0]);
            result = csmap.isMultibyte(utf16_num);
            assert(result[0]);
            result = csmap.isMultibyte(utf8_num);
            assert(result[0]);
            int nNull = 0, nSingle = 0, nMulti = 0;
            for(int i = 0; i < 256 ; i++) {
              result = csmap.isMultibyte(i);
              if(result == null) nNull++;
              else {
                if(result[0]) nMulti++;
                else nSingle++;
              }
            }
            out.println("          Unused: " + nNull +
                        " single-byte: " +nSingle + " multi-byte: " + nMulti  );

            assert(nNull > 0);
            assert(nSingle > 0);
            assert(nMulti > 0);
            out.println("     <-- IS MULTIBYTE TEST");
        }
        out.println("<-- MySqlUtilsCharsetMapTest.test()");
    };

    static public void main(String[] args) throws Exception {
        out.println("--> MySqlUtilsCharsetMapTest.main()");

        out.println();
        MySqlUtilsCharsetMapTest test = new MySqlUtilsCharsetMapTest();
        test.test();

        out.println();
        out.println("<-- MySqlUtilsChar


log_ = logit(mp_.p_min_);
  mp_.clamp_max_log_ = logit(mp_.p_max_);
  mp_.min_occupancy_log_ = logit(mp_.p_occ_);
  mp_.unknown_flag_ = 0.01;

  // cout << "hit: " << mp_.prob_hit_log_ << endl;
  // cout << "miss: " << mp_.prob_miss_log_ << endl;
  // cout << "min log: " << mp_.clamp_min_log_ << endl;
  // cout << "max: " << mp_.clamp_max_log_ << endl;
  // cout << "thresh log: " << mp_.min_occupancy_log_ << endl;
  // cout << "unknown_flag_: " << mp_.unknown_flag_ << endl;

  for (int i = 0; i < 3; ++i) mp_.map_voxel_num_(i) = ceil(mp_.map_size_(i) / mp_.resolution_);

  mp_.map_min_boundary_ = mp_.map_origin_;
  mp_.map_max_boundary_ = mp_.map_origin_ + mp_.map_size_;

  mp_.map_min_idx_ = Eigen::Vector3i::Zero();
  mp_.map_max_idx_ = mp_.map_voxel_num_ - Eigen::Vector3i::Ones();

  // initialize data buffers

  int buffer_size = mp_.map_voxel_num_(0) * mp_.map_voxel_num_(1) * mp_.map_voxel_num_(2);

  md_.occupancy_buffer_ = vector<double>(buffer_size, mp_.clamp_min_log_ - mp_.unknown_flag_);
  md_.occupancy_buffer_neg = vector<char>(buffer_size, 0);
  md_.occupancy_buffer_inflate_ = vector<char>(buffer_size, 0);

  md_.distance_buffer_ = vector<double>(buffer_size, 10000);
  md_.distance_buffer_neg_ = vector<double>(buffer_size, 10000);
  md_.distance_buffer_all_ = vector<double>(buffer_size, 10000);

  md_.count_hit_and_miss_ = vector<short>(buffer_size, 0);
  md_.count_hit_ = vector<short>(buffer_size, 0);
  md_.flag_rayend_ = vector<char>(buffer_size, -1);
  md_.flag_traverse_ = vector<char>(buffer_size, -1);

  md_.tmp_buffer1_ = vector<double>(buffer_size, 0);
  md_.tmp_buffer2_ = vector<double>(buffer_size, 0);
  md_.raycast_num_ = 0;

  md_.proj_points_.resize(640 * 480 / mp_.skip_pixel_ / mp_.skip_pixel_);
  md_.proj_points_cnt = 0;

  /* init callback */
  // use odometry and point cloud

  indep_cloud_sub_ =
      nh.subscribe<sensor_msgs::PointCloud2>("/mock_map", 10, &SDFMap::cloudCallback, this);
  indep_odom_sub_ =
      nh.subscribe<nav_msgs::Odometry>("/particle0/odom", 10, &SDFMap::odomCallback, this);

  occ_timer_ = nh.createTimer(ros::Duration(0.05), &SDFMap::updateOccupancyCallback, this);
  esdf_timer_ = nh.createTimer(ros::Duration(0.05), &SDFMap::updateESDFCallback, this);
  vis_timer_ = nh.createTimer(ros::Duration(1.0), &SDFMap::visCallback, this);

  map_pub_ = nh.advertise<sensor_msgs::PointCloud2>("/sdf_map/occupancy", 10);
  map_inf_pub_ = nh.advertise<sensor_msgs::PointCloud2>("/sdf_ma


rt,t),this.m_originalCount++
},e.prototype.AddModifiedElement=function(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_modifiedCount++},e.prototype.getChanges=function(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes},e.prototype.getReverseChanges=function(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes},e}(),a=function(){function e(e,t,n){void 0===n&&(n=null),this.OriginalSequence=e,this.ModifiedSequence=t,this.ContinueProcessingPredicate=n,this.m_forwardHistory=[],this.m_reverseHistory=[]}return e.prototype.ElementsAreEqual=function(e,t){return this.OriginalSequence.getElementAtIndex(e)===this.ModifiedSequence.getElementAtIndex(t)},e.prototype.OriginalElementsAreEqual=function(e,t){return this.OriginalSequence.getElementAtIndex(e)===this.OriginalSequence.getElementAtIndex(t)},e.prototype.ModifiedElementsAreEqual=function(e,t){
return this.ModifiedSequence.getElementAtIndex(e)===this.ModifiedSequence.getElementAtIndex(t)},e.prototype.ComputeDiff=function(e){return this._ComputeDiff(0,this.OriginalSequence.getLength()-1,0,this.ModifiedSequence.getLength()-1,e)},e.prototype._ComputeDiff=function(e,t,n,i,o){var r=this.ComputeDiffRecursive(e,t,n,i,[!1]);return o?this.ShiftChanges(r):r},e.prototype.ComputeDiffRecursive=function(e,t,i,r,s){for(s[0]=!1;e<=t&&i<=r&&this.ElementsAreEqual(e,i);)e++,i++;for(;t>=e&&r>=i&&this.ElementsAreEqual(t,r);)t--,r--;if(e>t||i>r){var a=void 0;return i<=r?(o.Assert(e===t+1,"originalStart should only be one more than originalEnd"),a=[new n.DiffChange(e,0,i,r-i+1)]):e<=t?(o.Assert(i===r+1,"modifiedStart should only be one more than modifiedEnd"),a=[new n.DiffChange(e,t-e+1,i,0)]):(o.Assert(e===t+1,"originalStart should only be one more than originalEnd"),o.Assert(i===r+1,"modifiedStart should only be one more than modifiedEnd"),a=[]),a}var l=[0],u=[0],d=this.ComputeRecursionPoint(e,t,i,r,l,u,s),c=l[0],h=u[0]
;if(null!==d)return d;if(!s[0]){var p=this.ComputeDiffRecursive(e,c,i,h,s),f=[];return f=s[0]?[new n.DiffChange(c+1,t-(c+1)+1,h+1,r-(h+1)+1)]:this.ComputeDiffRecursive(c+1,t,h+1,r,s),this.ConcatenateChanges(p,f)}return[new n.DiffChange(e,t-e+1,i,r-i+1)]},e.prototype.WALKTRACE=function(e,t,i,o,r,a,l,u,d,c,h,p,f,g,m,v,_,y){var C,b=null,S=null,w=new s,E=t,L=i,x=f[0]-v[0]-o,N=Number.MIN_VALUE,I=this.m_forwardHistory.length-1;do{(C=x+e)===E||C<L&&d[C-1]<d[C+1]?(g=(


: 140%;}
a {color: #fbf5d0; text-decoration: none;}

.clear { clear: both;}
.code { font-family: monospace; margin: 10px;  font-size: 10pt;  color: #ff8; background-color: #111; }
.clickable { cursor: pointer; cursor: hand; }

#header_side {background-position: 0px 0px;background-repeat: repeat-x;background-image: url(../images/header_side.jpg);float: left;position: absolute;width: 100%;height: 97px;z-index: -1;}

#header { background-position: 0px 0px; background-repeat: repeat-x; background-image: url(../images/header.jpg); margin: 0 auto; width: 700px; height: 97px; }
#header #name {color: #ffffff; font-size: 48pt;  padding: 40px 0 0 10px; }
#header ol {list-style: none; position: absolute; top: 77px; font-size: 10pt;margin-left: 10px;}
#header li { display: inline; color: #f0f0f0;margin-left:10px;}

#content_wrapper { background-position: 0px 0px; background-repeat: repeat-y; background-image: url(../images/content_shadow.png); width: 729px; margin: 0 auto;}

#content { width: 700px; background-color: #ffffff; margin-left: 15px; }
#content ol {list-style-type: none; margin-left: 20px;}
#content li {margin-top: 10px;}
#content #blurb { width: 320px; float: right; margin: 10px; clear: none; font-size: 16pt; color: #d8d8d8;}
#content #guts > div {margin:20px; padding: 10px; }
#content #guts p {padding-bottom: 20px; display: block;}
#content #banner { background-position: 0px 0px; background-repeat: no-repeat; background-image: url(../images/banner.jpg); width: 700px; height: 202px;}

#sidebar { float: right; width: 300px; margin: 20px; clear: none; background-color: #FDFEEE; padding: 10px;}
@charset "UTF-8";

// New set of variables from Core Design Kit
@import "~prestakit/scss/root";

//Compass is required to pre-compile this stylesheets to .css
@import "~bourbon";

@import "modules/variables";

@import "vendor/bi-app/bi-app-ltr";

@import "vendor/animate";
@import "vendor/font-awesome/font-awesome";

//Bootstrap Core : Variables + Mixins + Reset + Print
@import "vendor/bootstrap-sass/variables";
@import "vendor/bootstrap-sass/mixins";
// Mixin and mixin override
@import "modules/mixins";
@import "vendor/bootstrap-sass/normalize";

//import fonts
@import "~open-sans-fonts/open-sans-regular";
@import "~open-sans-fonts/open-sans-semibold";
@import "~open-sans-fonts/open-sans-bold";
@import "font";

//Bootstrap's rules applied only on div#content.bootstrap, nav.bootstrap, header.bootstrap, footer.bootstrap
.bootstrap {	//Core CSS
  @import "vendor/bootstrap-sass/scaffolding";
  @import "vendor/bootstrap-sass/type";
  @import "vendor/bootstrap-sass/code";
  @import "vendor/bootstrap-sass/grid";
  @import "vendor/bootstrap-sass/tables";
  @import "vendor/bootstrap-sass/forms";
  @import "vendor/bootstrap-sass/buttons";
  //Components
  @import "vendor/bootstrap-sass/component-animations";
  @import "vendor/bootstrap-sass/dropdowns";
  @import "vendor/bootstrap-sass/button-groups";
  @


temp_selection["sumAvg"] = temp_selection["sumTotal"] / numListFlattenned.length;

		const numListCol = lines[0].match(NUMERIC_NUMBERS)
		let numberOfCol = 0;
		if (numListCol !== null) {
			numberOfCol = numListCol.length;
		}

		let colData: {[key: string]: {[key: string]: number}} = {};

		for (let i = 0; i < numberOfCol; i++) {
			colData["Col" + i] = {
				sumTotal: 0,
				sumAvg: 0,
				sumMax: 0,
				sumMin: Infinity
			};
		}

		lines.forEach((line) => {
			const allNumsS = line.match(NUMERIC_NUMBERS);
			for (let i = 0; i < numberOfCol; i++) {
				if (allNumsS && allNumsS[i]) {
					colData["Col" + i].sumTotal += +(allNumsS[i]);
					colData["Col" + i].sumMax = Math.max(+(allNumsS[i]), colData["Col" + i].sumMax);
					colData["Col" + i].sumMin = Math.min(+(allNumsS[i]), colData["Col" + i].sumMin);
				}
			}

			for (let i = 0; i < numberOfCol; i++) {
				colData["Col" + i].sumAvg = colData["Col" + i].sumTotal / lines.length;
			}
		})

		temp_selection["sumCol"] = colData;

		this._wordCount.sumSelection = temp_selection;
	}

	public extractWordCount(text: string) {
		const lines = text.trim().split("\n");

		const numList: number[][] = lines.map((line) => {
			const allNumsS = line.match(NUMERIC_NUMBERS);
			if (allNumsS && allNumsS.length > 0) {
				// Parse all numbers to float
				return allNumsS.map((numS) => {
					return +(numS);
				});
			} else {
				return [];
			}
		});

		// flatten multidimensional array into 1d array
		// consisting of all the numbers highlighted
		let numListFlattenned: number[] = [];
		numListFlattenned = numListFlattenned.concat(... numList);

		this._wordCount.sumTotal =  numListFlattenned.reduce((prev, curr) => {
			return prev + curr;
		});
		this._wordCount.sumMax = Math.max(... numListFlattenned);
		this._wordCount.sumMin = Math.min(... numListFlattenned);
		this._wordCount.sumAvg = this._wordCount.sumTotal / numListFlattenned.length;

	}

	private updateColInfo(text: string) {
		const lines = text.trim().split("\n");

		const numList = lines[0].match(NUMERIC_NUMBERS)
		let numberOfCol = 0;
		if (numList !== null) {
			numberOfCol = numList.length;
		}

		let colData: {[key: string]: {[key: string]: number}} = {};

		for (let i = 0; i < numberOfCol; i++) {
			colData["Col" + i] = {
				sumTotal: 0,
				sumAvg: 0,
				sumMax: 0,
				sumMin: Infinity,
				startLoc: numList ? lines[0].indexOf(numList[i]) : 0
			};
		}

		lines.forEach((line) => {
			const allNumsS = line.match(NUMERIC_NUMBERS);
			for (let i = 0; i < numberOfCol; i++) {
				if (allNumsS && allNumsS[i]) {
					colData["Col" + i].sumTotal += +(allNumsS[i]);
					colData["Col" + i].sumMax = Math.max(+(allNumsS[i]), colData["Col" + i].sumMax);
					colData["Col" + i].sumMin = Math.min(+(allNumsS[i]), colData["Col" + i].sumMin);
				}
			}

			for (let i = 0; i < numberOfCol; i++) {
				colData["Col" + i].sumAvg = colData


_ Min ago"] = ""
-- L["If checked, partial stacks of herbs/ore will automatically be combined."] = ""
-- L["If checked, the Destroying window will automatically be shown when there's items to destroy in your bags. Otherwise, you can open it up by typing '/tsm destroy'."] = ""
-- L["Ignored Item"] = ""
-- L["Ignored Items"] = ""
-- L["Ignoring all %s permanently. You can undo this in the Destroying options."] = ""
-- L["Ignoring all %s this session (until your UI is reloaded)."] = ""
-- L["Item"] = ""
-- L["Maximum Disenchant Quality"] = ""
-- L["Nothing to destroy in your bags."] = ""
-- L["now"] = ""
-- L["Opens the Destroying frame if there's stuff in your bags to be destroyed."] = ""
-- L["Options"] = ""
-- L["Removed %s from the permanent ignore list."] = ""
-- L["Result"] = ""
-- L["Right click on this row to remove this item from the permanent ignore list."] = ""
-- L["Select what format Destroying should use to display times in the Destroying log."] = ""
-- L["Show Destroying Frame Automatically"] = ""
-- L["Spell"] = ""
-- L["%sRight-Click|r to ignore this item for this session. Hold %sshift|r to ignore permanently. You can remove items from permanent ignore in the Destroying options."] = ""
-- L["Stack Size"] = ""
-- L["The destroying log will throw out any data that is older than this many days."] = ""
-- L["Time"] = ""


ro</option>
                <option value="Gato" {% if pet.pet_type == 'Gato' %}selected{% endif %}>Gato</option>
            </select>

            Data da Consulta:
            <input type="date" id="consultation_date" name="consultation_date" value="{{ pet.consultation_date|date:'Y-m-d' }}">

            Vacina:
            <select id="vaccine" name="vaccine" onchange="toggleVaccineDate()">
                <option value="" disabled>Selecione a vacina</option>
                <option value="V8" {% if pet.vaccine == 'V8' %}selected{% endif %}>V8</option>
                <option value="V10" {% if pet.vaccine == 'V10' %}selected{% endif %}>V10</option>
                <option value="Não Vacinado" {% if pet.vaccine == 'Não Vacinado' %}selected{% endif %}>Não Vacinado</option>
            </select>

            Data da última vacina:
<input type="date" id="last_vaccine_date" name="last_vaccine_date" value="{{ pet.last_vaccine_date|date:'Y-m-d' }}">

            <button type="submit">Atualizar Pet</button>
        </form>

    Voltar para Consulta

<!DOCTYPE html>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Clima - Temperatura e Umidade</title>


\u0f60\u0f74\u0f0b\u0f5b\u0f72\u0f0b\u0f63\u0f7a\u0f53\u0f4c\u0f0b\u0f42\u0f72\u0f0b\u0f51\u0f44\u0f74\u0f63\u0f0b \u0f4c\u0f7c\u0f0b\u0f63\u0f62" },
            { "omr", "\u0f68\u0f7c\u0f0b\u0f58\u0f71\u0f53\u0f0b\u0f42\u0fb1\u0f72\u0f0b\u0f51\u0f44\u0f74\u0f63\u0f0b \u0f62\u0f72\u0f0b\u0f68\u0f71\u0f63" },
            { "pab", "\u0f54\u0f0b\u0f53\u0f0b\u0f58\u0f0b\u0f42\u0f72\u0f0b\u0f51\u0f44\u0f74\u0f63\u0f0b \u0f56\u0f71\u0f63\u0f0b\u0f56\u0f7c\u0f0b\u0f5d" },
            { "pen", "\u0f54\u0f0b\u0f62\u0f74\u0f0b\u0f42\u0f72\u0f0b\u0f51\u0f44\u0f74\u0f63\u0f0b \u0f53\u0f74\u0f0b\u0f56\u0f7c\u0f0b \u0f66\u0f71\u0f7c\u0f63" },
            { "php", "\u0f55\u0f72\u0f0b\u0f63\u0f72\u0f0b\u0f54\u0f72\u0f53\u0f66\u0f0b\u0f42\u0fb1\u0f72\u0f0b\u0f51\u0f44\u0f74\u0f63\u0f0b \u0f54\u0f7a\u0f0b\u0f66\u0f7c" },
            { "pkr", "\u0f54\u0f0b\u0f40\u0f72\u0f66\u0f0b\u0f4f\u0f71\u0f53\u0f0b\u0f42\u0fb1\u0f72\u0f0b\u0f51\u0f44\u0f74\u0f63\u0f0b \u0f62\u0f74\u0f0b\u0f54\u0f72" },
            { "pln", "\u0f54\u0f7c\u0f0b\u0f63\u0f7a\u0f53\u0f4c\u0f0b\u0f40\u0fb1\u0f72\u0f0b\u0f51\u0f44\u0f74\u0f63 \u0f5b\u0f84\u0f63\u0f7c\u0f0b\u0f4a\u0f72" },
            { "qar", "\u0f40\u0f0b\u0f4a\u0f62\u0f0b\u0f42\u0fb1\u0f72\u0f0b\u0f51\u0f44\u0f74\u0f63\u0f0b \u


na prática: entendendo a tomada de decisões (https://cursos.alura.com.br/course/Microsservicos-pratica-tomada-decisoes)

Go - Debugging:

Aprender a utilizar as ferramentas de debugging disponíveis para Go.

Compreender técnicas eficazes para identificar e resolver bugs em Go.

Explorar melhores práticas para prevenir erros comuns em desenvolvimento Go.

Conteúdos

Artigo How To Debug Go Code with Visual Studio Code (https://www.digitalocean.com/community/tutorials/debugging-go-code-with-visual-studio-code)

Streaming:

Streaming é o processamento e transmissão contínua de dados em tempo real, à medida que são gerados. Diferentemente do armazenamento tradicional, onde os dados são coletados e processados posteriormente, o streaming permite a análise e o uso imediato dos dados à medida que são recebidos. Essa abordagem é ideal para lidar com grandes volumes de dados em alta velocidade, permitindo a detecção de padrões em tempo real, tomada de decisões instantâneas e resposta rápida a eventos em andamento.

O streaming desempenha um papel essencial na engenharia de dados, capacitando as organizações a processar, analisar e tomar decisões com base em dados em tempo real. Isso resulta em maior agilidade, escalabilidade e reatividade, possibilitando uma tomada de decisões mais informada e orientada por insights atualizados.

Conteúdos

Site O que são fluxos de dados dados em tempo real? (https://aws.amazon.com/pt/what-is/real-time-data-streaming/)

YouTube Kafka (Plataforma de Mensageria e Streaming) (https://www.youtube.com/watch?v=qOqXz5Qv_-8)

YouTube Processando 1bi de mensagens com open source (https://www.youtube.com/watch?v=SEBv4N595eY)

YouTube Streaming de Dados (https://www.youtube.com/watch?v=PaUeW5a-PTs)

Conteúdos Alura:

Artigo Spark Streaming


using System.Net.Http;
using System.Net.Http.Headers;
using System.Web.Http.Routing;

namespace Fabrik.Common.WebAPI
{
    /// <summary>
    /// Extensions for <see cref="System.Net.Http.MultipartFormDataContent"/>.
    /// </summary>
    public static class MultipartFormDataContentExtensions
    {
        public static void Add(this MultipartFormDataContent form, HttpContent content, object formValues)
        {
            Ensure.Argument.NotNull(form, "form");
            Ensure.Argument.NotNull(content, "content");
            Ensure.Argument.NotNull(formValues, "formValues");

            Add(form, content, formValues);
        }

        public static void Add(this MultipartFormDataContent form, HttpContent content, string name, object formValues)
        {
            Ensure.Argument.NotNull(form, "form");
            Ensure.Argument.NotNull(content, "content");
            Ensure.Argument.NotNullOrEmpty(name, "name");
            Ensure.Argument.NotNull(formValues, "formValues");

            Add(form, content, formValues, name: name);
        }

        public static void Add(this MultipartFormDataContent form, HttpContent content, string name, string fileName, object formValues)
        {


rows {
            let out = circuit.bytes_xor(row_gb, row_ev).unwrap();
            let out = circuit.bytes_output(&out).unwrap();
            if is_garbler {
                continue;
            }
            assert_eq!(out.unwrap(), expected)
        }
    }

    #[test]
    fn location_share_encode() {
        let mut loc = vec![0u8; LOCATION_BYTES];
        loc[0] = 0b1111_1110;

        let mut circuit = Dummy::new();
        let location_share = encoded::LocationShare::encode(&mut circuit, &loc).unwrap();

        let mut wires = location_share.loc.iter();
        assert!(wires
            .by_ref()
            .take(7)
            .all(|b| b.val() == 1 && b.modulus() == 2));
        assert!(wires.all(|b| b.val() == 0 && b.modulus() == 2))
    }

    #[test]
    fn index_share_exchange() {
        TwopacTest::new()
            .set_garbler(|circuit| index_share_exchange_circuit(circuit, true))
            .set_evaluator(|circuit| index_share_exchange_circuit(circuit, false))
            .run()
    }

    fn index_share_exchange_circuit<F>(circuit: &mut F, is_garbler: bool)
    where
        F: Fancy + FancyInput<Item = <F as Fancy>::Item>,
        <F as Fancy>::Error: fmt::Display,
        <F as FancyInput>::Error: fmt::Display,
    {
        let a = 0xdead;
        let b = 0xbeaf;
        let gb_in = if is_garbler {
            encoded::IndexShare::encode(circuit, a).unwrap()
        } else {
            encoded::IndexShare::receive(circuit).unwrap()
        };
        let ev_in = if is_garbler {
            encoded::IndexShare::receive(circuit).unwrap()
        } else {
            encoded::IndexShare::encode(circuit, b).unwrap()
        };

        let out = circuit.bytes_xor(&gb_in.bundle, &ev_in.bundle).unwrap();
        let out = circuit.bytes_output(&out).unwrap();

        if is_garbler {
            return;
        }

        assert_eq!(out.unwrap().as_buffer(), &(a ^ b).to_be_bytes());
    }

    #[test]
    fn exchange_location_share() {
        TwopacTest::new()
            .set_garbler(|circuit| exchange_location_share_circuit(circuit, true))
            .set_evaluator(|circuit| exchange_location_share_circuit(circuit, false))
            .run()
    }

    fn exchange_location_share_circuit<F>(circuit: &mut F, is_garbler: bool)
    where
        F: Fancy + FancyInput<Item = <F as Fancy>::Item>,
        <F as Fancy>::Error: fmt::Display,
        <F as FancyInput>::Error: fmt::Display,
    {
        let mut rng_gb = AesRng::seed_from_u64(900);
        let loc_gb: Vec<u8> = iter::repeat_with(|| rng_gb.gen())
            .take(LOCATION_BYTES)
            .collect();

        let mut rng_ev = AesRng::seed_from_u64(901);
        let loc_ev: Vec<u8> = iter::repeat_with(|| rng_ev.gen())
            .take(LOCATION_BYTES)
            .collect();

        let gb_in = if is_garbler {
            encoded::LocationShare::encode(circuit, &loc_gb).unwrap()
        } else {
            encoded::LocationShare::receive(circuit).unwrap()
        };
        le


/*
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * FFmpeg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#ifndef AVCODEC_KBDWIN_H
#define AVCODEC_KBDWIN_H

#include <stdint.h>

/**
 * Maximum window size for avpriv_kbd_window_init.
 */
#define FF_KBD_WINDOW_MAX 1024

/**
 * Generate a Kaiser-Bessel Derived Window.
 * @param   window  pointer to half window
 * @param   alpha   determines window shape
 * @param   n       size of half window
 *
 * @return if n is larger than FF_KBD_WINDOW_MAX then AVERROR(ENOMEM) is possible
 */
int avpriv_kbd_window_init(float *window, float alpha, int n);
int avpriv_kbd_window_init_fixed(int32_t *window, float alpha, int n);

#endif /* AVCODEC_KBDWIN_H */


-"] {
    font-size: 1.3rem; }
  .btn.btn-lg i, .btn-group-lg > .btn i {
    padding-right: 0.75rem; }

.btn.btn-label {
  background-color: #f0f3ff;
  color: #007A5E;
  cursor: text !important; }

.btn.btn-link,
a.btn.btn-label,
button.btn.btn-label,
input.btn.btn-label {
  cursor: pointer !important; }
  .btn.btn-link:focus, .btn.btn-link:hover, .btn.btn-link.active,
  a.btn.btn-label:focus,
  a.btn.btn-label:hover,
  a.btn.btn-label.active,
  button.btn.btn-label:focus,
  button.btn.btn-label:hover,
  button.btn.btn-label.active,
  input.btn.btn-label:focus,
  input.btn.btn-label:hover,
  input.btn.btn-label.active {
    background-color: #007A5E;
    color: #ffffff; }

.btn.btn-label-brand {
  background-color: rgba(0, 122, 94, 0.1);
  color: #007A5E;
  cursor: text !important; }

.btn.btn-label-brand-o2 {
  background-color: rgba(0, 122, 94, 0.2);
  color: #007A5E;
  cursor: text !important; }

label.btn.btn-label-brand,
a.btn.btn-label-brand,
button.btn.btn-label-brand,
input.btn.btn-label-brand {
  cursor: pointer !important; }
  label.btn.btn-label-brand:focus, label.btn.btn-label-brand:hover, label.btn.btn-label-brand.active,
  a.btn.btn-label-brand:focus,
  a.btn.btn-label-brand:hover,
  a.btn.btn-label-brand.active,
  button.btn.btn-label-brand:focus,
  button.btn.btn-label-brand:hover,
  button.btn.btn-label-brand.active,
  input.btn.btn-label-brand:focus,
  input.btn.btn-label-brand:hover,
  input.btn.btn-label-brand.active {
    background-color: #007A5E;
    color: #ffffff; }

.btn.btn-label-metal {
  background-color: rgba(211, 218, 230, 0.1);
  color: #d3dae6;
  cursor: text !important; }

.btn.btn-label-metal-o2 {
  background-color: rgba(211, 218, 230, 0.2);
  color: #d3dae6;
  cursor: text !important; }

label.btn.btn-label-metal,
a.btn.btn-label-metal,
button.btn.btn-label-metal,
input.btn.btn-label-metal {
  cursor: pointer !important; }
  label.btn.btn-label-metal:focus, label.btn.btn-label-metal:hover, label.btn.btn-label-metal.active,
  a.btn.btn-label-metal:focus,
  a.btn.btn-label-metal:hover,
  a.btn.btn-label-metal.active,
  button.btn.btn-label-metal:focus,
  button.btn.btn-label-metal:hover,
  button.btn.btn-label-metal.active,
  input.btn.btn-label-metal:focus,
  input.btn.btn-label-metal:hover,
  input.btn.btn-label-metal.active {
    background-color: #d3dae6;
    color: #586272; }

.btn.btn-label-light {
  background-color: rgba(255, 255, 255, 0.1);
  color: #ffffff;
  c


12 to 1.0.0 ([#11626](https://github.com/mdn/yari/issues/11626)) ([856405f](https://github.com/mdn/yari/commit/856405fc3ddd9f9fbbb0c3c009d6099e5acab0d8))
* **deps:** bump dayjs from 1.11.12 to 1.11.13 ([#11668](https://github.com/mdn/yari/issues/11668)) ([be9d8b9](https://github.com/mdn/yari/commit/be9d8b9cce957d54dc421a4388b672ed04dd0a7e))
* **deps:** bump fast-xml-parser from 4.3.4 to 4.4.1 ([#11560](https://github.com/mdn/yari/issues/11560)) ([3ca992d](https://github.com/mdn/yari/commit/3ca992d29bfbc7475a84f3d6fdae8f33b8d6ad50))
* **deps:** bump fdir from 6.2.0 to 6.3.0 ([#11687](https://github.com/mdn/yari/issues/11687)) ([e0bd00a](https://github.com/mdn/yari/commit/e0bd00a16fbb9b531f56bce0e423f8907f0c93eb))
* **deps:** bump file-type from 19.3.0 to 19.4.0 ([#11587](https://github.com/mdn/yari/issues/11587)) ([350d84b](https://github.com/mdn/yari/commit/350d84b8bd1725e74204c82a41a21e5b9d4daede))
* **deps:** bump file-type from 19.4.0 to 19.4.1 ([#11639](https://github.com/mdn/yari/issues/11639)) ([5ac69b2](https://github.com/mdn/yari/commit/5ac69b2264ac1e7d08559ce89934f2cbe7782022))
* **deps:** bump is-svg from 5.0.1 to 5.1.0 ([#11592](https://github.com/mdn/yari/issues/11592)) ([a33a589](https://github.com/mdn/yari/commit/a33a5891261217252d31a22768cdffd3c68dd397))
* **deps:** bump mdn-data from 2.8.0 to 2.9.0 ([#11579](https://github.com/mdn/yari/issues/11579)) ([d930863](https://github.com/mdn/yari/commit/d930863abcb20d52170ab95b670a2676e26f7451))
* **deps:** bump micromatch from 4.0.4 to 4.0.8 in /client/pwa ([#11683](https://github.com/mdn/yari/issues/11683)) ([e320b68](https://github.com/mdn/yari/commit/e320b681c210d61e8320fde081b1816ddd99796c))
* **deps:** bump micromatch from 4.0.5 to 4.0.8 ([#11684](https://github.com/mdn/yari/issues/11684)) ([358c3e7](https://github.com/mdn/yari/commit/358c3e7a5385a17f04c7827d689e2f50577cc8f6))
* **deps:** bump openai from 4.53.0 to 4.53.1 ([#11541](https://github.com/mdn/yari/issues/11541)) ([f0ec2be](https://github.com/mdn/yari/commit/f0ec2be6f3a88e34831f5a090dd153dfb390efb9))
* **deps:** bump openai from 4.53.1 to 4.53.2 ([#11551](https://github.com/mdn/yari/issues/11551)) ([


sse.onmessage = function(msg) {
            message(msg.data);
        };
        send.onclick = function() {
            var msg = text.value;
            var xhr = new XMLHttpRequest();
            xhr.open("POST", uri + '/' + user_id, true);
            xhr.send(msg);
            text.value = '';
            message('<You>: ' + msg);
        };
        </script>
    </body>
</html>
"#;
<gh_stars>0
mod fixtures;

use fixtures::{init_log, MemRouter, MemVoteFactor, NodeId};
use std::sync::Arc;
use std::thread::sleep;
use std::time::Duration;
use tender::{InitialMode, Quorum, State};

/// Group election test.
#[test]
fn test_election() {
    init_log();

    let group_id = 1000;
    let node1 = NodeId::new(group_id, 1001);
    let node2 = NodeId::new(group_id, 1002);
    let node3 = NodeId::new(group_id, 1003);

    let mem_router = Arc::new(MemRouter::new(group_id));
    mem_router.new_node(node1, MemVoteFactor::new(1));
    mem_router.new_node(node2, MemVoteFactor::new(1));
    mem_router.new_node(node3, MemVoteFactor::new(0));

    sleep(Duration::from_secs(1));
    mem_router.assert_node_state(node1, State::Startup, 0, None);
    mem_router.assert_node_state(node2, State::Startup, 0, None);
    mem_router.assert_node_state(node3, State::Startup, 0, None);

    let members = vec![node1, node2, node3];

    mem_router.init_node(node1, members.clone(), InitialMode::AsLeader);
    mem_router.init_node(node2, members.clone(), InitialMode::Normal);
    mem_router.init_node(node3, members, InitialMode::Normal);
    sleep(Duration::from_secs(3));
    mem_router.assert_node_state(node1, State::Leader, 1, Some(node1));
    mem_router.assert_node_state(node2, State::Follower, 1, Some(node1));
    mem_router.assert_node_state(node3, State::Follower, 1, Some(node1));

    // remove node 1 to trigger a new election
    {
        log::info!("--- remove node {}", node1);
        let _ = mem_router.remove_node(node1);
    }
    sleep(Duration::from_secs(3));
    mem_router.assert_node_state(node2, State::Leader, 2, Some(node2));
    mem_router.assert_node_state(node3, State::Follower, 2, Some(node2));

    // remove node 2
    {
        log::info!("--- remove node {}", node2);
        let _ = mem_router.remove_node(node2);
    }
    sleep(Duration::from_secs(3));
    mem_router.assert_node_state(node3, State::PreCandidate, 2, None);
}

/// Group election test: quorum.
#[test]
fn test_election_with_quorum() {
    init_log();

    let group_id = 1000;
    let node1 = NodeId::new(group_id, 1001);
    let node2 = NodeId::new(group_id, 1002);
    let node3 = NodeId::new(group_id, 1003);

    let mem_router = Arc::new(MemRouter::with_quorum(group_id, Quorum::Any(3)));
    mem_router.new_node(node1, MemVoteFactor::new(1));
    mem_router.new_node(node2, MemVoteFactor::new(1));
    mem_router.new_node(node3, MemVoteFactor::new(0));

    sleep(Duration::from_secs(1));
    mem_router.assert_node_state(node1, State::Startup, 0, None);
    mem_router.assert_node_state(node2, State::Startup, 0, None);
    mem_router.assert_node_


 MobjStateDef(354, Sprite.SKEL, 13, 5, null, null, MobjState.SkelRaise5, 0, 0), // State.SkelRaise4
            new MobjStateDef(355, Sprite.SKEL, 12, 5, null, null, MobjState.SkelRaise6, 0, 0), // State.SkelRaise5
            new MobjStateDef(356, Sprite.SKEL, 11, 5, null, null, MobjState.SkelRun1, 0, 0), // State.SkelRaise6
            new MobjStateDef(357, Sprite.MANF, 32768, 4, null, null, MobjState.Fatshot2, 0, 0), // State.Fatshot1
            new MobjStateDef(358, Sprite.MANF, 32769, 4, null, null, MobjState.Fatshot1, 0, 0), // State.Fatshot2
            new MobjStateDef(359, Sprite.MISL, 32769, 8, null, null, MobjState.Fatshotx2, 0, 0), // State.Fatshotx1
            new MobjStateDef(360, Sprite.MISL, 32770, 6, null, null, MobjState.Fatshotx3, 0, 0), // State.Fatshotx2
            new MobjStateDef(361, Sprite.MISL, 32771, 4, null, null, MobjState.Null, 0, 0), // State.Fatshotx3
            new MobjStateDef(362, Sprite.FATT, 0, 15, null, ma.Look, MobjState.FattStnd2, 0, 0), // State.FattStnd
            new MobjStateDef(363, Sprite.FATT, 1, 15, null, ma.Look, MobjState.FattStnd, 0, 0), // State.FattStnd2
            new MobjStateDef(364, Sprite.FATT, 0, 4, null, ma.Chase, MobjState.FattRun2, 0, 0), // State.FattRun1
            new MobjStateDef(365, Sprite.FATT, 0, 4, null, ma.Chase, MobjState.FattRun3, 0, 0), // State.FattRun2
            new MobjStateDef(366, Sprite.FATT, 1, 4, null, ma.Chase, MobjState.FattRun4, 0, 0), // State.FattRun3
            new MobjStateDef(367, Sprite.FATT, 1, 4, null, ma.Chase, MobjState.FattRun5, 0, 0), // State.FattRun4
            new MobjStateDef(368, Sprite.FATT, 2, 4, null, ma.Chase, MobjState.FattRun6, 0, 0), // State.FattRun5
            new MobjStateDef(369, Sprite.FATT, 2, 4, null, ma.Chase, MobjState.FattRun7, 0, 0), // State.FattRun6
            new MobjStateDef(370, Sprite.FATT, 3, 4, null, ma.Chase, MobjState.FattRun8, 0, 0), // State.FattRun7
            new MobjStateDef(371, Sprite.FATT, 3, 4, null, ma.Chase, MobjState.FattRun9, 0, 0), // State.FattRun8
            new MobjStateDef(372, Sprite.FATT, 4, 4, null, ma.Chase, MobjState.FattRun10, 0, 0), // State.FattRun9
            new MobjStateDef(373, Sprite.FATT, 4, 4, null, ma.Chase, MobjState.FattRun11, 0, 0), // State.FattRun10
            new MobjStateDef(374, Sprite.FATT, 5, 4, null, ma.Chase, MobjState.FattRun12, 0, 0), // State.FattRun11
            new MobjStateDef(375, Sprite.FATT, 5, 4, null, ma.Chase, MobjState.FattRun1, 0, 0), // State


"","Form95":"","Form96":"","Form97":"","Form98":"","Form99":"","Form100":""}},
{"name":"FTKR_ExBattleEvent","status":true,"description":"v1.3.3 バトルイベントを拡張するプラグイン","parameters":{"Battle Event":"","--勝利時イベント--":"","Custom Victory Event":"0","Victory Event":"20","--敗北時イベント--":"","Custom Defeat Event":"0","Defeat Event":"20"}},
{"name":"TriggerOnEquipAndState","status":true,"description":"装備変更時の変数操作プラグイン","parameters":{"戦闘メンバーのみ":"false"}},
{"name":"CommonEventBeforeAfterMenu","status":true,"description":"メニューを開く直前、または閉じた直後に、指定したコモンイベントを実行します。","parameters":{"Common Event ID (before Menu)":"306","Common Event ID (after Menu)":"12"}},
{"name":"MenuCommonEvent","status":true,"description":"メニュー内コモンイベントプラグイン","parameters":{"コモンイベント情報":"[\"{\\\"SceneName\\\":\\\"Scene_Equip\\\",\\\"CommonEventId\\\":\\\"30\\\"}\"]","ピクチャ表示最大数":"20","実行位置を記憶":"false","タイマー有効化":"false","コマンド接頭辞":""}},
{"name":"setItemMax","status":true,"description":"アイテムの最大所持個数をアイテムIdごとに指定できます。","parameters":{}},
{"name":"sai_Scenefile","status":true,"description":"補助ウインドウを使ったSS付セーブ画面","parameters":{"bgBitmapFile":"save_back","List X":"70","List Y":"120","List Width":"350","List Height":"420","List MaxItems":"100","List MaxCols":"2","List Opacity":"0","List Font Size":"24","Help X":"70","Help Y":"50","Help Width":"580","Help Opacity":"0","Help Font Size":"24","State X":"450","State Y":"120","State Width":"400","State Height":"370","State Opacity":"0","State Font Size":"24","SS X":"0","SS Y":"0","SS Percent":"0.30","Savetime X":"0","Savetime Y":"190","Location TEXT":"Area：","VariableNum":"39","Location TEXT X":"0","Location TEXT Y":"225","Location X":"0","Location Y":"222","Gold TEXT":"Gold：","Gold TEXT X":"0","Gold TEXT Y":"255","Gold X":"0","Gold Y":"253","Level X":"0","Level Y":"295","Member X":"90","Member Y":"335"}},
{"name":"HzRandomList","status":true,"description":"重複の無いランダム値を作成するプラグイン","parameters":{}},
{"name":"YEP_ExtraEnemyDrops","status":true,"description":"v1.09 敵のドロップ設定を拡張します","parameters":{}},
{"name":"CustomizeAttackGuard","status":true,"description":"攻撃防御カスタマイズプラグイン","parameters":{}},
{"name":"IRPP_MV_ParamMaxEX","status":true,"description":"能力値の最大値を指定します。","parameters":{"Page1":"","Max MHP Actor":"9999","Max MMP Actor":"9999","Max ATK Actor":"999","Max DEF Actor":"999","Max MAT Actor":"999","Max MDF Actor":"999","Max AGI Actor":"999","Max LUK Actor":"999","Page2":"","Max MHP Enemy":"999999","Max MMP Enemy":"9999","Max ATK Enemy":"3000","Max


strip meter context menu">

      Mixer strip meter context menu

  Meters are available in various places in Ardour:

The mixer window features fixed height meters for each <dfn>channel strip</dfn>.

There are small (narrow) meters on each <dfn>track-header</dfn> in the editor window.

There are variable height meters in the <dfn>meterbridge window</dfn>.

Optionally, a fixed-size <dfn>master meter</dfn> can be displayed in the main toolbar.

Various other locations (<dfn>file import</dfn>, <dfn>sends</dfn>) have level-meters.

  They all share the same configuration and color-theme which is available in
  preferences and the theme-manager. Settings for the Peak and RMS+Peak meters
  as well as VU meter standards are found in
  Edit > Preferences > Metering.

  The type of meter and the <dfn>metering point</dfn> (the place in the signal chain
  where the meter taps the signal) are configurable in the context menu of each meter.
  Depending on the Edit > Preferences > Mixer settings,
  the metering point is also accessible via a button in each Mixer strip.

  Regardless of meter type and standard the meter display will highlight red if
  the signal on the given channel exceeds the configured peak threshold.

  Left clicking on the peak-indicator button resets the
  <dfn>peak-hold indicator</dfn> of a single channel.

  Left clicking resets a whole <dfn>group</dfn>, and

  Left clicking resets all meters.

Overview of meter types

    Bar-graph meters in Ardour

    Needle-style meters as external LV2 plugins

  The figure on the left shows all available meter-types in Ardour when fed with a
  -18 dBFS 1 kHz sine wave.

  Due to layout concerns and consistent look and feel all meters available in
  Ardour itself are bar-graph type meters. Corresponding needle-style
  meters—which take up more visual screen space—are available as
  LV2 plugins (see image on the right):
  meters.lv2.

	For cues, Ardour generally follows the design pattern of other applications
	that support a grid-based non-linear workflow.

    The Cue window elements

The main elements of the <dfn>Cue</dfn> window are:

Grid of tracks and cues, playback indicators

Mixer channel section

Clip and trigger slot options

Sidebar


�当前用户自己的角色")
    @Permission(permissionLogin = true)
    @GetMapping("/{organizationId}/roles/self/roles")
    public ResponseEntity<List<Role>> listSelfRole(@PathVariable("organizationId") Long organizationId) {
        return Results.success(roleService.selectUserRole(organizationId, Optional.ofNullable(DetailsHelper.getUserDetails())
                .orElseThrow(NotLoginException::new)
                .getUserId()));
    }

    @ApiOperation("角色管理 - 分页查询当前用户可管理的所有(子孙)角色")
    @Permission(permissionLogin = true)
    @GetMapping("/roles/self/manageable-roles")
    public ResponseEntity<Page<RoleVO>> listSelfManageableRoles(@Encrypt RoleVO params,
                                                                PageRequest pageRequest) {
        return Results.success(roleService.selectSelfManageableRoles(params, pageRequest));
    }

    @ApiOperation("角色管理 - 树形查询当前用户可管理的所有(子孙)角色")
    @Permission(permissionLogin = true)
    @GetMapping("/roles/self/manageable-roles/tree")
    public ResponseEntity<List<RoleDTO>> listTreeSelfManageableRoles(RoleVO params) {
        return Results.success(roleService.listTreeList(params));
    }

    @ApiOperation("角色管理 - 通过父级节点查可见孩子节点")
    @Permission(permissionLogin = true)
    @GetMapping("/roles/self/manageable-roles/tree/sub")
    public ResponseEntity<Page<RoleDTO>> treeSelfManageableRoles(@Encrypt RoleVO params, PageRequest pageRequest) {
        return Results.success(roleRepository.selectUserManageableRoleTree(pageRequest, params));
    }

    @ApiOperation("角色管理 - 查询当前用户的管理角色")
    @Permission(permissionLogin = true)
    @GetMapping("/roles/self/admin-roles")
    public ResponseEntity<List<RoleVO>> listSelfAdminRoles(RoleVO params,
                                                           PageRequest pageRequest) {
        return Results.success(roleRepository.selectUserAdminRoles(params, pageRequest));
    }

    @ApiOperation("角色管理 - 查询当前用户分配的角色")
    @Permission(permissionLogin = true)
    @GetMapping("/roles/self/assigned-roles")
    public ResponseEntity<Page<RoleVO>> listSelfAssignedRoles(RoleVO params, PageRequest pageRequest) {
        return Results.success(roleRepository.selectSelfAssignedRoles(params, pageRequest));
    }

    @ApiOperation("用户分配角色 - 分页查询当前用户可管理的角色，通过 excludeUserIds 传入当前分配用户，通过 excludeRoleIds 传入排除的角色")
    @Permission(permissionLogin = true)
    @GetMapping("/roles/self/user-assignable-roles")
    public ResponseEntity<Page<RoleVO>> listUserAssignableRoles(@Encrypt RoleVO params,
                                                                PageRequest pageRequest) {
        return Results.success(roleRepository.selectSelfAssignableRoles(params, pageRequest));
    }

    @ApiOperation("角色管理 - 通过角色ID查询角色详细信息")
    @Permission(level = ResourceLevel.ORGANIZATION)
    @GetMapping("/{organizationId}/roles/{roleId}")
    public ResponseEntity<RoleVO> queryRoleDetails(@PathVariable("organizationId") Long organizationId,
                                                   @Encrypt @PathVariable Long roleId) {
        return Results.success(roleService.selectRoleDetails(roleId));
    }

    @ApiOperation("角色查询 - 分页查询租户下的角色")
    @Permission(level = ResourceLevel.ORGANIZATION)
    @GetMapping("/{organizationId}/roles/paging")
    public ResponseEntity<Page<RoleVO>> paging(@PathVariable("organizationId") Long tenantId,


1 18,19.5A1.5,1.5 0 0,1 19.5,18M17,5.92L11,9V18.03C13.84,18.19 16,19 16,20C16,21.1 13.31,22 10,22C6.69,22 4,21.1 4,20C4,19.26 5.21,18.62 7,18.27V20H9V2L17,5.92Z'
module.exports.mdiGolfCart = 'M19.89 12.37L18.25 5H19V3H3V7H1V9H3V12.54A6 6 0 0 0 1 17V19H3A3 3 0 0 0 9 19H15A3 3 0 0 0 21 19H23V17A5 5 0 0 0 19.89 12.37M6 20.5A1.5 1.5 0 1 1 7.5 19A1.5 1.5 0 0 1 6 20.5M15.53 12L14.38 10.28L15.8 9.33L14.7 7.67L10.2 10.67L11.3 12.33L12.73 11.38L13.88 13.12L13 14H10.2L5 7V5H16.2L17.75 12M18 20.5A1.5 1.5 0 1 1 19.5 19A1.5 1.5 0 0 1 18 20.5Z'
module.exports.mdiGolfTee = 'M7 19V17H17V19H15C14.5 19 14 19.2 13.6 19.6S13 20.5 13 21V22H11V21C11 20.5 10.8 20 10.4 19.6S9.5 19 9 19H7M11 6C11 5.7 11.1 5.5 11.3 5.3S11.7 5 12 5 12.5 5.1 12.7 5.3 13 5.7 13 6 12.9 6.5 12.7 6.7 12.3 7 12 7 11.5 6.9 11.3 6.7 11 6.3 11 6M13 8C13 7.7 13.1 7.5 13.3 7.3S13.7 7 14 7 14.5 7.1 14.7 7.3 15 7.7 15 8 14.9 8.5 14.7 8.7 14.3 9 14 9 13.5 8.9 13.3 8.7 13 8.3 13 8M9 8C9 7.7 9.1 7.5 9.3 7.3S9.7 7 10 7 10.5 7.1 10.7 7.3 11 7.7 11 8 10.9 8.5 10.7 8.7 10.3 9 10 9 9.5 8.9 9.3 8.7 9 8.3 9 8M16.9 4.1C15.5 2.7 13.9 2.1 12 2.1S8.4 2.8 7.1 4.1 5 7.1 5 9 5.7 12.6 7 13.9 10 15.9 11.9 15.9 15.5 15.2 16.8 13.9 18.8 10.9 18.8 9 18.3 5.4 16.9 4.1M15.5 12.5C14.5 13.5 13.3 14 12 14S9.4 13.5 8.5 12.5 7 10.4 7 9 7.5 6.4 8.5 5.5 10.6 4 12 4 14.6 4.5 15.5 5.5 17 7.6 17 9 16.5 11.6 15.5 12.5Z'
module.exports.mdiGondola = 'M18,10H13V7.59L22.12,6.07L21.88,4.59L16.41,5.5C16.46,5.35 16.5,5.18 16.5,5A1.5,1.5 0 0,0 15,3.5A1.5,1.5 0 0,0 13.5,5C13.5,5.35 13.63,5.68 13.84,5.93L13,6.07V5H11V6.41L10.41,6.5C10.46


67304082
	DD	1065802605
	DD	3404727379
	DD	1064246385
	DD	2737480376
	DD	1062660281
	DD	933797922
	DD	1061274873
	DD	1475716730
	DD	1059887095
	DD	1511619763
	DD	1058519827
	DD	556024211
	DD	1057187555
	DD	3482101045
	DD	1056217350
	DD	1174622859
	DD	1050762633
	DD	899668651
	DD	1055506366
	DD	1081094694
	DD	3202035365
	DD	2559814773
	DD	10