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

// WARNING: Do not edit - generated code.
library dart.dom._blink;

// This is a place to put custom renames if we need them.
final resolverMap = {
};

dynamic resolver(String s) {
  if (s == "ANGLEInstancedArrays") return BlinkANGLEInstancedArrays.instance;
  if (s == "AnalyserNode") return BlinkAnalyserNode.instance;
  if (s == "Animation") return BlinkAnimation.instance;
  if (s == "AnimationEffect") return BlinkAnimationEffect.instance;
  if (s == "AnimationNode") return BlinkAnimationNode.instance;
  if (s == "AnimationPlayer") return BlinkAnimationPlayer.instance;
  if (s == "AnimationPlayerEvent") return BlinkAnimationPlayerEvent.instance;
  if (s == "AnimationTimeline") return BlinkAnimationTimeline.instance;
  if (s == "ApplicationCache") return BlinkApplicationCache.instance;
  if (s == "ApplicationCacheErrorEvent") return BlinkApplicationCacheErrorEvent.instance;
  if (s == "Attr") return BlinkAttr.instance;
  if (s == "AudioBuffer") return BlinkAudioBuffer.instance;
  if (s == "AudioBufferSourceNode") return BlinkAudioBufferSourceNode.instance;
  if (s == "AudioContext") return BlinkAudioContext.instance;
  if (s == "AudioDestinationNode") return BlinkAudioDestinationNode.instance;
  if (s == "AudioListener") return BlinkAudioListener.instance;
  if (s == "AudioNode") return BlinkAudioNode.instance;
  if (s == "AudioParam") return BlinkAudioParam.instance;
  if (s == "AudioProcessingEvent") return BlinkAudioProcessingEvent.instance;
  if (s == "AudioSourceNode") return BlinkAudioSourceNode.instance;
  if (s == "AudioTrack") return BlinkAudioTrack.instance;
  if (s == "AudioTrackList") return BlinkAudioTrackList.instance;
  if (s == "AutocompleteErrorEvent") return BlinkAutocompleteErrorEvent.instance;
  if (s == "BarProp") return BlinkBarProp.instance;
  if (s == "BatteryManager") return BlinkBatteryManager.instance;
  if (s == "BeforeUnloadEvent") return BlinkBeforeUnloadEvent.instance;
  if (s == "BiquadFilterNode") return BlinkBiquadFilterNode.instance;
  if (s == "Blob") return BlinkBlob.instance;
  if (s == "Body") return BlinkBody.instance;
  if (s == "CDATASection") return BlinkCDATASection.instance;
  if (s == "CSS") return BlinkCSS.instance;
  if (s == "CSSCharsetRule") return BlinkCSSCharsetRule.instance;
  if (s == "CSSFontFaceRule") return BlinkCSSFontFaceRule.instance;
  if (s == "CSSImportRule") return BlinkCSSImportRule.instance;
  if (s == "CSSKeyframeRule") return BlinkCSSKeyframeRule.instance;
  if (s == "CSSKeyframesRule") return BlinkCSSKeyframesRule.instance;
  if (s == "CSSMediaRule") return BlinkCSSMediaRule.instance;
  if (s == "CSSPageRule") return BlinkCSSPageRule.instance;
  if (s == "CSSPrimitiveValue") return BlinkCSSPrimitiveValue.instance;
  if (s == "CSSRule") return BlinkCSSRule.instance;
  if (s == "CSSRuleList") return BlinkCSSRuleList.instance;
  if (s == "CSSStyleDeclaration") return BlinkCSSStyleDeclaration.instance;
  if (s == "CSSStyleRule") return BlinkCSSStyleRule.instance;
  if (s == "CSSStyleSheet") return BlinkCSSStyleSheet.instance;
  if (s == "CSSSupportsRule") return BlinkCSSSupportsRule.instance;
  if (s == "CSSUnknownRule") return BlinkCSSUnknownRule.instance;
  if (s == "CSSValue") return BlinkCSSValue.instance;
  if (s == "CSSValueList") return BlinkCSSValueList.instance;
  if (s == "CSSViewportRule") return BlinkCSSViewportRule.instance;
  if (s == "Cache") return BlinkCache.instance;
  if (s == "CacheStorage") return BlinkCacheStorage.instance;
  if (s == "Canvas2DContextAttributes") return BlinkCanvas2DContextAttributes.instance;
  if (s == "CanvasGradient") return BlinkCanvasGradient.instance;
  if (s == "CanvasPattern") return BlinkCanvasPattern.instance;
  if (s == "CanvasRenderingContext2D") return BlinkCanvasRenderingContext2D.instance;
  if (s == "ChannelMergerNode") return BlinkChannelMergerNode.instance;
  if (s == "ChannelSplitterNode") return BlinkChannelSplitterNode.instance;
  if (s == "CharacterData") return BlinkCharacterData.instance;
  if (s == "CircularGeofencingRegion") return BlinkCircularGeofencingRegion.instance;
  if (s == "ClientRect") return BlinkClientRect.instance;
  if (s == "ClientRectList") return BlinkClientRectList.instance;
  if (s == "CloseEvent") return BlinkCloseEvent.instance;
  if (s == "Comment") return BlinkComment.instance;
  if (s == "CompositionEvent") return BlinkCompositionEvent.instance;
  if (s == "Console") return BlinkConsole.instance;
  if (s == "ConsoleBase") return BlinkConsoleBase.instance;
  if (s == "ConvolverNode") return BlinkConvolverNode.instance;
  if (s == "Coordinates") return BlinkCoordinates.instance;
  if (s == "Counter") return BlinkCounter.instance;
  if (s == "Credential") return BlinkCredential.instance;
  if (s == "CredentialsContainer") return BlinkCredentialsContainer.instance;
  if (s == "Crypto") return BlinkCrypto.instance;
  if (s == "CryptoKey") return BlinkCryptoKey.instance;
  if (s == "CustomEvent") return BlinkCustomEvent.instance;
  if (s == "DOMError") return BlinkDOMError.instance;
  if (s == "DOMException") return BlinkDOMException.instance;
  if (s == "DOMFileSystem") return BlinkDOMFileSystem.instance;
  if (s == "DOMFileSystemSync") return BlinkDOMFileSystemSync.instance;
  if (s == "DOMImplementation") return BlinkDOMImplementation.instance;
  if (s == "DOMMatrix") return BlinkDOMMatrix.instance;
  if (s == "DOMMatrixReadOnly") return BlinkDOMMatrixReadOnly.instance;
  if (s == "DOMParser") return BlinkDOMParser.instance;
  if (s == "DOMPoint") return BlinkDOMPoint.instance;
  if (s == "DOMPointReadOnly") return BlinkDOMPointReadOnly.instance;
  if (s == "DOMRect") return BlinkDOMRect.instance;
  if (s == "DOMRectReadOnly") return BlinkDOMRectReadOnly.instance;
  if (s == "DOMSettableTokenList") return BlinkDOMSettableTokenList.instance;
  if (s == "DOMStringList") return BlinkDOMStringList.instance;
  if (s == "DOMStringMap") return BlinkDOMStringMap.instance;
  if (s == "DOMTokenList") return BlinkDOMTokenList.instance;
  if (s == "DataTransfer") return BlinkDataTransfer.instance;
  if (s == "DataTransferItem") return BlinkDataTransferItem.instance;
  if (s == "DataTransferItemList") return BlinkDataTransferItemList.instance;
  if (s == "Database") return BlinkDatabase.instance;
  if (s == "DedicatedWorkerGlobalScope") return BlinkDedicatedWorkerGlobalScope.instance;
  if (s == "DelayNode") return BlinkDelayNode.instance;
  if (s == "DeprecatedStorageInfo") return BlinkDeprecatedStorageInfo.instance;
  if (s == "DeprecatedStorageQuota") return BlinkDeprecatedStorageQuota.instance;
  if (s == "DeviceAcceleration") return BlinkDeviceAcceleration.instance;
  if (s == "DeviceLightEvent") return BlinkDeviceLightEvent.instance;
  if (s == "DeviceMotionEvent") return BlinkDeviceMotionEvent.instance;
  if (s == "DeviceOrientationEvent") return BlinkDeviceOrientationEvent.instance;
  if (s == "DeviceRotationRate") return BlinkDeviceRotationRate.instance;
  if (s == "DirectoryEntry") return BlinkDirectoryEntry.instance;
  if (s == "DirectoryEntrySync") return BlinkDirectoryEntrySync.instance;
  if (s == "DirectoryReader") return BlinkDirectoryReader.instance;
  if (s == "DirectoryReaderSync") return BlinkDirectoryReaderSync.instance;
  if (s == "Document") return BlinkDocument.instance;
  if (s == "DocumentFragment") return BlinkDocumentFragment.instance;
  if (s == "DocumentType") return BlinkDocumentType.instance;
  if (s == "DynamicsCompressorNode") return BlinkDynamicsCompressorNode.instance;
  if (s == "EXTBlendMinMax") return BlinkEXTBlendMinMax.instance;
  if (s == "EXTFragDepth") return BlinkEXTFragDepth.instance;
  if (s == "EXTShaderTextureLOD") return BlinkEXTShaderTextureLOD.instance;
  if (s == "EXTTextureFilterAnisotropic") return BlinkEXTTextureFilterAnisotropic.instance;
  if (s == "Element") return BlinkElement.instance;
  if (s == "Entry") return BlinkEntry.instance;
  if (s == "EntrySync") return BlinkEntrySync.instance;
  if (s == "ErrorEvent") return BlinkErrorEvent.instance;
  if (s == "Event") return BlinkEvent.instance;
  if (s == "EventSource") return BlinkEventSource.instance;
  if (s == "EventTarget") return BlinkEventTarget.instance;
  if (s == "ExtendableEvent") return BlinkExtendableEvent.instance;
  if (s == "FederatedCredential") return BlinkFederatedCredential.instance;
  if (s == "FetchEvent") return BlinkFetchEvent.instance;
  if (s == "File") return BlinkFile.instance;
  if (s == "FileEntry") return BlinkFileEntry.instance;
  if (s == "FileEntrySync") return BlinkFileEntrySync.instance;
  if (s == "FileError") return BlinkFileError.instance;
  if (s == "FileList") return BlinkFileList.instance;
  if (s == "FileReader") return BlinkFileReader.instance;
  if (s == "FileReaderSync") return BlinkFileReaderSync.instance;
  if (s == "FileWriter") return BlinkFileWriter.instance;
  if (s == "FileWriterSync") return BlinkFileWriterSync.instance;
  if (s == "FocusEvent") return BlinkFocusEvent.instance;
  if (s == "FontFace") return BlinkFontFace.instance;
  if (s == "FontFaceSet") return BlinkFontFaceSet.instance;
  if (s == "FontFaceSetLoadEvent") return BlinkFontFaceSetLoadEvent.instance;
  if (s == "FormData") return BlinkFormData.instance;
  if (s == "GainNode") return BlinkGainNode.instance;
  if (s == "Gamepad") return BlinkGamepad.instance;
  if (s == "GamepadButton") return BlinkGamepadButton.instance;
  if (s == "GamepadEvent") return BlinkGamepadEvent.instance;
  if (s == "GamepadList") return BlinkGamepadList.instance;
  if (s == "Geofencing") return BlinkGeofencing.instance;
  if (s == "GeofencingRegion") return BlinkGeofencingRegion.instance;
  if (s == "Geolocation") return BlinkGeolocation.instance;
  if (s == "Geoposition") return BlinkGeoposition.instance;
  if (s == "HTMLAllCollection") return BlinkHTMLAllCollection.instance;
  if (s == "HTMLAnchorElement") return BlinkHTMLAnchorElement.instance;
  if (s == "HTMLAppletElement") return BlinkHTMLAppletElement.instance;
  if (s == "HTMLAreaElement") return BlinkHTMLAreaElement.instance;
  if (s == "HTMLAudioElement") return BlinkHTMLAudioElement.instance;
  if (s == "HTMLBRElement") return BlinkHTMLBRElement.instance;
  if (s == "HTMLBaseElement") return BlinkHTMLBaseElement.instance;
  if (s == "HTMLBodyElement") return BlinkHTMLBodyElement.instance;
  if (s == "HTMLButtonElement") return BlinkHTMLButtonElement.instance;
  if (s == "HTMLCanvasElement") return BlinkHTMLCanvasElement.instance;
  if (s == "HTMLCollection") return BlinkHTMLCollection.instance;
  if (s == "HTMLContentElement") return BlinkHTMLContentElement.instance;
  if (s == "HTMLDListElement") return BlinkHTMLDListElement.instance;
  if (s == "HTMLDataListElement") return BlinkHTMLDataListElement.instance;
  if (s == "HTMLDetailsElement") return BlinkHTMLDetailsElement.instance;
  if (s == "HTMLDialogElement") return BlinkHTMLDialogElement.instance;
  if (s == "HTMLDirectoryElement") return BlinkHTMLDirectoryElement.instance;
  if (s == "HTMLDivElement") return BlinkHTMLDivElement.instance;
  if (s == "HTMLDocument") return BlinkHTMLDocument.instance;
  if (s == "HTMLElement") return BlinkHTMLElement.instance;
  if (s == "HTMLEmbedElement") return BlinkHTMLEmbedElement.instance;
  if (s == "HTMLFieldSetElement") return BlinkHTMLFieldSetElement.instance;
  if (s == "HTMLFontElement") return BlinkHTMLFontElement.instance;
  if (s == "HTMLFormControlsCollection") return BlinkHTMLFormControlsCollection.instance;
  if (s == "HTMLFormElement") return BlinkHTMLFormElement.instance;
  if (s == "HTMLFrameElement") return BlinkHTMLFrameElement.instance;
  if (s == "HTMLFrameSetElement") return BlinkHTMLFrameSetElement.instance;
  if (s == "HTMLHRElement") return BlinkHTMLHRElement.instance;
  if (s == "HTMLHeadElement") return BlinkHTMLHeadElement.instance;
  if (s == "HTMLHeadingElement") return BlinkHTMLHeadingElement.instance;
  if (s == "HTMLHtmlElement") return BlinkHTMLHtmlElement.instance;
  if (s == "HTMLIFrameElement") return BlinkHTMLIFrameElement.instance;
  if (s == "HTMLImageElement") return BlinkHTMLImageElement.instance;
  if (s == "HTMLInputElement") return BlinkHTMLInputElement.instance;
  if (s == "HTMLKeygenElement") return BlinkHTMLKeygenElement.instance;
  if (s == "HTMLLIElement") return BlinkHTMLLIElement.instance;
  if (s == "HTMLLabelElement") return BlinkHTMLLabelElement.instance;
  if (s == "HTMLLegendElement") return BlinkHTMLLegendElement.instance;
  if (s == "HTMLLinkElement") return BlinkHTMLLinkElement.instance;
  if (s == "HTMLMapElement") return BlinkHTMLMapElement.instance;
  if (s == "HTMLMarqueeElement") return BlinkHTMLMarqueeElement.instance;
  if (s == "HTMLMediaElement") return BlinkHTMLMediaElement.instance;
  if (s == "HTMLMenuElement") return BlinkHTMLMenuElement.instance;
  if (s == "HTMLMenuItemElement") return BlinkHTMLMenuItemElement.instance;
  if (s == "HTMLMetaElement") return BlinkHTMLMetaElement.instance;
  if (s == "HTMLMeterElement") return BlinkHTMLMeterElement.instance;
  if (s == "HTMLModElement") return BlinkHTMLModElement.instance;
  if (s == "HTMLOListElement") return BlinkHTMLOListElement.instance;
  if (s == "HTMLObjectElement") return BlinkHTMLObjectElement.instance;
  if (s == "HTMLOptGroupElement") return BlinkHTMLOptGroupElement.instance;
  if (s == "HTMLOptionElement") return BlinkHTMLOptionElement.instance;
  if (s == "HTMLOptionsCollection") return BlinkHTMLOptionsCollection.instance;
  if (s == "HTMLOutputElement") return BlinkHTMLOutputElement.instance;
  if (s == "HTMLParagraphElement") return BlinkHTMLParagraphElement.instance;
  if (s == "HTMLParamElement") return BlinkHTMLParamElement.instance;
  if (s == "HTMLPictureElement") return BlinkHTMLPictureElement.instance;
  if (s == "HTMLPreElement") return BlinkHTMLPreElement.instance;
  if (s == "HTMLProgressElement") return BlinkHTMLProgressElement.instance;
  if (s == "HTMLQuoteElement") return BlinkHTMLQuoteElement.instance;
  if (s == "HTMLScriptElement") return BlinkHTMLScriptElement.instance;
  if (s == "HTMLSelectElement") return BlinkHTMLSelectElement.instance;
  if (s == "HTMLShadowElement") return BlinkHTMLShadowElement.instance;
  if (s == "HTMLSourceElement") return BlinkHTMLSourceElement.instance;
  if (s == "HTMLSpanElement") return BlinkHTMLSpanElement.instance;
  if (s == "HTMLStyleElement") return BlinkHTMLStyleElement.instance;
  if (s == "HTMLTableCaptionElement") return BlinkHTMLTableCaptionElement.instance;
  if (s == "HTMLTableCellElement") return BlinkHTMLTableCellElement.instance;
  if (s == "HTMLTableColElement") return BlinkHTMLTableColElement.instance;
  if (s == "HTMLTableElement") return BlinkHTMLTableElement.instance;
  if (s == "HTMLTableRowElement") return BlinkHTMLTableRowElement.instance;
  if (s == "HTMLTableSectionElement") return BlinkHTMLTableSectionElement.instance;
  if (s == "HTMLTemplateElement") return BlinkHTMLTemplateElement.instance;
  if (s == "HTMLTextAreaElement") return BlinkHTMLTextAreaElement.instance;
  if (s == "HTMLTitleElement") return BlinkHTMLTitleElement.instance;
  if (s == "HTMLTrackElement") return BlinkHTMLTrackElement.instance;
  if (s == "HTMLUListElement") return BlinkHTMLUListElement.instance;
  if (s == "HTMLUnknownElement") return BlinkHTMLUnknownElement.instance;
  if (s == "HTMLVideoElement") return BlinkHTMLVideoElement.instance;
  if (s == "HashChangeEvent") return BlinkHashChangeEvent.instance;
  if (s == "Headers") return BlinkHeaders.instance;
  if (s == "History") return BlinkHistory.instance;
  if (s == "IDBCursor") return BlinkIDBCursor.instance;
  if (s == "IDBCursorWithValue") return BlinkIDBCursorWithValue.instance;
  if (s == "IDBDatabase") return BlinkIDBDatabase.instance;
  if (s == "IDBFactory") return BlinkIDBFactory.instance;
  if (s == "IDBIndex") return BlinkIDBIndex.instance;
  if (s == "IDBKeyRange") return BlinkIDBKeyRange.instance;
  if (s == "IDBObjectStore") return BlinkIDBObjectStore.instance;
  if (s == "IDBOpenDBRequest") return BlinkIDBOpenDBRequest.instance;
  if (s == "IDBRequest") return BlinkIDBRequest.instance;
  if (s == "IDBTransaction") return BlinkIDBTransaction.instance;
  if (s == "IDBVersionChangeEvent") return BlinkIDBVersionChangeEvent.instance;
  if (s == "ImageBitmap") return BlinkImageBitmap.instance;
  if (s == "ImageData") return BlinkImageData.instance;
  if (s == "InjectedScriptHost") return BlinkInjectedScriptHost.instance;
  if (s == "InputMethodContext") return BlinkInputMethodContext.instance;
  if (s == "InspectorFrontendHost") return BlinkInspectorFrontendHost.instance;
  if (s == "InspectorOverlayHost") return BlinkInspectorOverlayHost.instance;
  if (s == "InstallEvent") return BlinkInstallEvent.instance;
  if (s == "Iterator") return BlinkIterator.instance;
  if (s == "JavaScriptCallFrame") return BlinkJavaScriptCallFrame.instance;
  if (s == "KeyboardEvent") return BlinkKeyboardEvent.instance;
  if (s == "LocalCredential") return BlinkLocalCredential.instance;
  if (s == "Location") return BlinkLocation.instance;
  if (s == "MIDIAccess") return BlinkMIDIAccess.instance;
  if (s == "MIDIConnectionEvent") return BlinkMIDIConnectionEvent.instance;
  if (s == "MIDIInput") return BlinkMIDIInput.instance;
  if (s == "MIDIInputMap") return BlinkMIDIInputMap.instance;
  if (s == "MIDIMessageEvent") return BlinkMIDIMessageEvent.instance;
  if (s == "MIDIOutput") return BlinkMIDIOutput.instance;
  if (s == "MIDIOutputMap") return BlinkMIDIOutputMap.instance;
  if (s == "MIDIPort") return BlinkMIDIPort.instance;
  if (s == "MediaController") return BlinkMediaController.instance;
  if (s == "MediaDeviceInfo") return BlinkMediaDeviceInfo.instance;
  if (s == "MediaElementAudioSourceNode") return BlinkMediaElementAudioSourceNode.instance;
  if (s == "MediaError") return BlinkMediaError.instance;
  if (s == "MediaKeyError") return BlinkMediaKeyError.instance;
  if (s == "MediaKeyEvent") return BlinkMediaKeyEvent.instance;
  if (s == "MediaKeyMessageEvent") return BlinkMediaKeyMessageEvent.instance;
  if (s == "MediaKeyNeededEvent") return BlinkMediaKeyNeededEvent.instance;
  if (s == "MediaKeySession") return BlinkMediaKeySession.instance;
  if (s == "MediaKeys") return BlinkMediaKeys.instance;
  if (s == "MediaList") return BlinkMediaList.instance;
  if (s == "MediaQueryList") return BlinkMediaQueryList.instance;
  if (s == "MediaQueryListEvent") return BlinkMediaQueryListEvent.instance;
  if (s == "MediaSource") return BlinkMediaSource.instance;
  if (s == "MediaStream") return BlinkMediaStream.instance;
  if (s == "MediaStreamAudioDestinationNode") return BlinkMediaStreamAudioDestinationNode.instance;
  if (s == "MediaStreamAudioSourceNode") return BlinkMediaStreamAudioSourceNode.instance;
  if (s == "MediaStreamEvent") return BlinkMediaStreamEvent.instance;
  if (s == "MediaStreamTrack") return BlinkMediaStreamTrack.instance;
  if (s == "MediaStreamTrackEvent") return BlinkMediaStreamTrackEvent.instance;
  if (s == "MemoryInfo") return BlinkMemoryInfo.instance;
  if (s == "MessageChannel") return BlinkMessageChannel.instance;
  if (s == "MessageEvent") return BlinkMessageEvent.instance;
  if (s == "MessagePort") return BlinkMessagePort.instance;
  if (s == "Metadata") return BlinkMetadata.instance;
  if (s == "MimeType") return BlinkMimeType.instance;
  if (s == "MimeTypeArray") return BlinkMimeTypeArray.instance;
  if (s == "MouseEvent") return BlinkMouseEvent.instance;
  if (s == "MutationEvent") return BlinkMutationEvent.instance;
  if (s == "MutationObserver") return BlinkMutationObserver.instance;
  if (s == "MutationRecord") return BlinkMutationRecord.instance;
  if (s == "NamedNodeMap") return BlinkNamedNodeMap.instance;
  if (s == "Navigator") return BlinkNavigator.instance;
  if (s == "NavigatorUserMediaError") return BlinkNavigatorUserMediaError.instance;
  if (s == "NetworkInformation") return BlinkNetworkInformation.instance;
  if (s == "Node") return BlinkNode.instance;
  if (s == "NodeFilter") return BlinkNodeFilter.instance;
  if (s == "NodeIterator") return BlinkNodeIterator.instance;
  if (s == "NodeList") return BlinkNodeList.instance;
  if (s == "Notification") return BlinkNotification.instance;
  if (s == "OESElementIndexUint") return BlinkOESElementIndexUint.instance;
  if (s == "OESStandardDerivatives") return BlinkOESStandardDerivatives.instance;
  if (s == "OESTextureFloat") return BlinkOESTextureFloat.instance;
  if (s == "OESTextureFloatLinear") return BlinkOESTextureFloatLinear.instance;
  if (s == "OESTextureHalfFloat") return BlinkOESTextureHalfFloat.instance;
  if (s == "OESTextureHalfFloatLinear") return BlinkOESTextureHalfFloatLinear.instance;
  if (s == "OESVertexArrayObject") return BlinkOESVertexArrayObject.instance;
  if (s == "OfflineAudioCompletionEvent") return BlinkOfflineAudioCompletionEvent.instance;
  if (s == "OfflineAudioContext") return BlinkOfflineAudioContext.instance;
  if (s == "OscillatorNode") return BlinkOscillatorNode.instance;
  if (s == "OverflowEvent") return BlinkOverflowEvent.instance;
  if (s == "PagePopupController") return BlinkPagePopupController.instance;
  if (s == "PageTransitionEvent") return BlinkPageTransitionEvent.instance;
  if (s == "PannerNode") return BlinkPannerNode.instance;
  if (s == "Path2D") return BlinkPath2D.instance;
  if (s == "Performance") return BlinkPerformance.instance;
  if (s == "PerformanceEntry") return BlinkPerformanceEntry.instance;
  if (s == "PerformanceMark") return BlinkPerformanceMark.instance;
  if (s == "PerformanceMeasure") return BlinkPerformanceMeasure.instance;
  if (s == "PerformanceNavigation") return BlinkPerformanceNavigation.instance;
  if (s == "PerformanceResourceTiming") return BlinkPerformanceResourceTiming.instance;
  if (s == "PerformanceTiming") return BlinkPerformanceTiming.instance;
  if (s == "PeriodicWave") return BlinkPeriodicWave.instance;
  if (s == "Plugin") return BlinkPlugin.instance;
  if (s == "PluginArray") return BlinkPluginArray.instance;
  if (s == "PluginPlaceholderElement") return BlinkPluginPlaceholderElement.instance;
  if (s == "PopStateEvent") return BlinkPopStateEvent.instance;
  if (s == "PositionError") return BlinkPositionError.instance;
  if (s == "Presentation") return BlinkPresentation.instance;
  if (s == "ProcessingInstruction") return BlinkProcessingInstruction.instance;
  if (s == "ProgressEvent") return BlinkProgressEvent.instance;
  if (s == "PushEvent") return BlinkPushEvent.instance;
  if (s == "PushManager") return BlinkPushManager.instance;
  if (s == "PushRegistration") return BlinkPushRegistration.instance;
  if (s == "RGBColor") return BlinkRGBColor.instance;
  if (s == "RTCDTMFSender") return BlinkRTCDTMFSender.instance;
  if (s == "RTCDTMFToneChangeEvent") return BlinkRTCDTMFToneChangeEvent.instance;
  if (s == "RTCDataChannel") return BlinkRTCDataChannel.instance;
  if (s == "RTCDataChannelEvent") return BlinkRTCDataChannelEvent.instance;
  if (s == "RTCIceCandidate") return BlinkRTCIceCandidate.instance;
  if (s == "RTCIceCandidateEvent") return BlinkRTCIceCandidateEvent.instance;
  if (s == "RTCPeerConnection") return BlinkRTCPeerConnection.instance;
  if (s == "RTCSessionDescription") return BlinkRTCSessionDescription.instance;
  if (s == "RTCStatsReport") return BlinkRTCStatsReport.instance;
  if (s == "RTCStatsResponse") return BlinkRTCStatsResponse.instance;
  if (s == "RadioNodeList") return BlinkRadioNodeList.instance;
  if (s == "Range") return BlinkRange.instance;
  if (s == "ReadableStream") return BlinkReadableStream.instance;
  if (s == "Rect") return BlinkRect.instance;
  if (s == "RelatedEvent") return BlinkRelatedEvent.instance;
  if (s == "Request") return BlinkRequest.instance;
  if (s == "ResourceProgressEvent") return BlinkResourceProgressEvent.instance;
  if (s == "Response") return BlinkResponse.instance;
  if (s == "SQLError") return BlinkSQLError.instance;
  if (s == "SQLResultSet") return BlinkSQLResultSet.instance;
  if (s == "SQLResultSetRowList") return BlinkSQLResultSetRowList.instance;
  if (s == "SQLTransaction") return BlinkSQLTransaction.instance;
  if (s == "SVGAElement") return BlinkSVGAElement.instance;
  if (s == "SVGAltGlyphDefElement") return BlinkSVGAltGlyphDefElement.instance;
  if (s == "SVGAltGlyphElement") return BlinkSVGAltGlyphElement.instance;
  if (s == "SVGAltGlyphItemElement") return BlinkSVGAltGlyphItemElement.instance;
  if (s == "SVGAngle") return BlinkSVGAngle.instance;
  if (s == "SVGAnimateElement") return BlinkSVGAnimateElement.instance;
  if (s == "SVGAnimateMotionElement") return BlinkSVGAnimateMotionElement.instance;
  if (s == "SVGAnimateTransformElement") return BlinkSVGAnimateTransformElement.instance;
  if (s == "SVGAnimatedAngle") return BlinkSVGAnimatedAngle.instance;
  if (s == "SVGAnimatedBoolean") return BlinkSVGAnimatedBoolean.instance;
  if (s == "SVGAnimatedEnumeration") return BlinkSVGAnimatedEnumeration.instance;
  if (s == "SVGAnimatedInteger") return BlinkSVGAnimatedInteger.instance;
  if (s == "SVGAnimatedLength") return BlinkSVGAnimatedLength.instance;
  if (s == "SVGAnimatedLengthList") return BlinkSVGAnimatedLengthList.instance;
  if (s == "SVGAnimatedNumber") return BlinkSVGAnimatedNumber.instance;
  if (s == "SVGAnimatedNumberList") return BlinkSVGAnimatedNumberList.instance;
  if (s == "SVGAnimatedPreserveAspectRatio") return BlinkSVGAnimatedPreserveAspectRatio.instance;
  if (s == "SVGAnimatedRect") return BlinkSVGAnimatedRect.instance;
  if (s == "SVGAnimatedString") return BlinkSVGAnimatedString.instance;
  if (s == "SVGAnimatedTransformList") return BlinkSVGAnimatedTransformList.instance;
  if (s == "SVGAnimationElement") return BlinkSVGAnimationElement.instance;
  if (s == "SVGCircleElement") return BlinkSVGCircleElement.instance;
  if (s == "SVGClipPathElement") return BlinkSVGClipPathElement.instance;
  if (s == "SVGComponentTransferFunctionElement") return BlinkSVGComponentTransferFunctionElement.instance;
  if (s == "SVGCursorElement") return BlinkSVGCursorElement.instance;
  if (s == "SVGDefsElement") return BlinkSVGDefsElement.instance;
  if (s == "SVGDescElement") return BlinkSVGDescElement.instance;
  if (s == "SVGDiscardElement") return BlinkSVGDiscardElement.instance;
  if (s == "SVGElement") return BlinkSVGElement.instance;
  if (s == "SVGEllipseElement") return BlinkSVGEllipseElement.instance;
  if (s == "SVGFEBlendElement") return BlinkSVGFEBlendElement.instance;
  if (s == "SVGFEColorMatrixElement") return BlinkSVGFEColorMatrixElement.instance;
  if (s == "SVGFEComponentTransferElement") return BlinkSVGFEComponentTransferElement.instance;
  if (s == "SVGFECompositeElement") return BlinkSVGFECompositeElement.instance;
  if (s == "SVGFEConvolveMatrixElement") return BlinkSVGFEConvolveMatrixElement.instance;
  if (s == "SVGFEDiffuseLightingElement") return BlinkSVGFEDiffuseLightingElement.instance;
  if (s == "SVGFEDisplacementMapElement") return BlinkSVGFEDisplacementMapElement.instance;
  if (s == "SVGFEDistantLightElement") return BlinkSVGFEDistantLightElement.instance;
  if (s == "SVGFEDropShadowElement") return BlinkSVGFEDropShadowElement.instance;
  if (s == "SVGFEFloodElement") return BlinkSVGFEFloodElement.instance;
  if (s == "SVGFEFuncAElement") return BlinkSVGFEFuncAElement.instance;
  if (s == "SVGFEFuncBElement") return BlinkSVGFEFuncBElement.instance;
  if (s == "SVGFEFuncGElement") return BlinkSVGFEFuncGElement.instance;
  if (s == "SVGFEFuncRElement") return BlinkSVGFEFuncRElement.instance;
  if (s == "SVGFEGaussianBlurElement") return BlinkSVGFEGaussianBlurElement.instance;
  if (s == "SVGFEImageElement") return BlinkSVGFEImageElement.instance;
  if (s == "SVGFEMergeElement") return BlinkSVGFEMergeElement.instance;
  if (s == "SVGFEMergeNodeElement") return BlinkSVGFEMergeNodeElement.instance;
  if (s == "SVGFEMorphologyElement") return BlinkSVGFEMorphologyElement.instance;
  if (s == "SVGFEOffsetElement") return BlinkSVGFEOffsetElement.instance;
  if (s == "SVGFEPointLightElement") return BlinkSVGFEPointLightElement.instance;
  if (s == "SVGFESpecularLightingElement") return BlinkSVGFESpecularLightingElement.instance;
  if (s == "SVGFESpotLightElement") return BlinkSVGFESpotLightElement.instance;
  if (s == "SVGFETileElement") return BlinkSVGFETileElement.instance;
  if (s == "SVGFETurbulenceElement") return BlinkSVGFETurbulenceElement.instance;
  if (s == "SVGFilterElement") return BlinkSVGFilterElement.instance;
  if (s == "SVGFontElement") return BlinkSVGFontElement.instance;
  if (s == "SVGFontFaceElement") return BlinkSVGFontFaceElement.instance;
  if (s == "SVGFontFaceFormatElement") return BlinkSVGFontFaceFormatElement.instance;
  if (s == "SVGFontFaceNameElement") return BlinkSVGFontFaceNameElement.instance;
  if (s == "SVGFontFaceSrcElement") return BlinkSVGFontFaceSrcElement.instance;
  if (s == "SVGFontFaceUriElement") return BlinkSVGFontFaceUriElement.instance;
  if (s == "SVGForeignObjectElement") return BlinkSVGForeignObjectElement.instance;
  if (s == "SVGGElement") return BlinkSVGGElement.instance;
  if (s == "SVGGeometryElement") return BlinkSVGGeometryElement.instance;
  if (s == "SVGGlyphElement") return BlinkSVGGlyphElement.instance;
  if (s == "SVGGlyphRefElement") return BlinkSVGGlyphRefElement.instance;
  if (s == "SVGGradientElement") return BlinkSVGGradientElement.instance;
  if (s == "SVGGraphicsElement") return BlinkSVGGraphicsElement.instance;
  if (s == "SVGHKernElement") return BlinkSVGHKernElement.instance;
  if (s == "SVGImageElement") return BlinkSVGImageElement.instance;
  if (s == "SVGLength") return BlinkSVGLength.instance;
  if (s == "SVGLengthList") return BlinkSVGLengthList.instance;
  if (s == "SVGLineElement") return BlinkSVGLineElement.instance;
  if (s == "SVGLinearGradientElement") return BlinkSVGLinearGradientElement.instance;
  if (s == "SVGMPathElement") return BlinkSVGMPathElement.instance;
  if (s == "SVGMarkerElement") return BlinkSVGMarkerElement.instance;
  if (s == "SVGMaskElement") return BlinkSVGMaskElement.instance;
  if (s == "SVGMatrix") return BlinkSVGMatrix.instance;
  if (s == "SVGMetadataElement") return BlinkSVGMetadataElement.instance;
  if (s == "SVGMissingGlyphElement") return BlinkSVGMissingGlyphElement.instance;
  if (s == "SVGNumber") return BlinkSVGNumber.instance;
  if (s == "SVGNumberList") return BlinkSVGNumberList.instance;
  if (s == "SVGPathElement") return BlinkSVGPathElement.instance;
  if (s == "SVGPathSeg") return BlinkSVGPathSeg.instance;
  if (s == "SVGPathSegArcAbs") return BlinkSVGPathSegArcAbs.instance;
  if (s == "SVGPathSegArcRel") return BlinkSVGPathSegArcRel.instance;
  if (s == "SVGPathSegClosePath") return BlinkSVGPathSegClosePath.instance;
  if (s == "SVGPathSegCurvetoCubicAbs") return BlinkSVGPathSegCurvetoCubicAbs.instance;
  if (s == "SVGPathSegCurvetoCubicRel") return BlinkSVGPathSegCurvetoCubicRel.instance;
  if (s == "SVGPathSegCurvetoCubicSmoothAbs") return BlinkSVGPathSegCurvetoCubicSmoothAbs.instance;
  if (s == "SVGPathSegCurvetoCubicSmoothRel") return BlinkSVGPathSegCurvetoCubicSmoothRel.instance;
  if (s == "SVGPathSegCurvetoQuadraticAbs") return BlinkSVGPathSegCurvetoQuadraticAbs.instance;
  if (s == "SVGPathSegCurvetoQuadraticRel") return BlinkSVGPathSegCurvetoQuadraticRel.instance;
  if (s == "SVGPathSegCurvetoQuadraticSmoothAbs") return BlinkSVGPathSegCurvetoQuadraticSmoothAbs.instance;
  if (s == "SVGPathSegCurvetoQuadraticSmoothRel") return BlinkSVGPathSegCurvetoQuadraticSmoothRel.instance;
  if (s == "SVGPathSegLinetoAbs") return BlinkSVGPathSegLinetoAbs.instance;
  if (s == "SVGPathSegLinetoHorizontalAbs") return BlinkSVGPathSegLinetoHorizontalAbs.instance;
  if (s == "SVGPathSegLinetoHorizontalRel") return BlinkSVGPathSegLinetoHorizontalRel.instance;
  if (s == "SVGPathSegLinetoRel") return BlinkSVGPathSegLinetoRel.instance;
  if (s == "SVGPathSegLinetoVerticalAbs") return BlinkSVGPathSegLinetoVerticalAbs.instance;
  if (s == "SVGPathSegLinetoVerticalRel") return BlinkSVGPathSegLinetoVerticalRel.instance;
  if (s == "SVGPathSegList") return BlinkSVGPathSegList.instance;
  if (s == "SVGPathSegMovetoAbs") return BlinkSVGPathSegMovetoAbs.instance;
  if (s == "SVGPathSegMovetoRel") return BlinkSVGPathSegMovetoRel.instance;
  if (s == "SVGPatternElement") return BlinkSVGPatternElement.instance;
  if (s == "SVGPoint") return BlinkSVGPoint.instance;
  if (s == "SVGPointList") return BlinkSVGPointList.instance;
  if (s == "SVGPolygonElement") return BlinkSVGPolygonElement.instance;
  if (s == "SVGPolylineElement") return BlinkSVGPolylineElement.instance;
  if (s == "SVGPreserveAspectRatio") return BlinkSVGPreserveAspectRatio.instance;
  if (s == "SVGRadialGradientElement") return BlinkSVGRadialGradientElement.instance;
  if (s == "SVGRect") return BlinkSVGRect.instance;
  if (s == "SVGRectElement") return BlinkSVGRectElement.instance;
  if (s == "SVGRenderingIntent") return BlinkSVGRenderingIntent.instance;
  if (s == "SVGSVGElement") return BlinkSVGSVGElement.instance;
  if (s == "SVGScriptElement") return BlinkSVGScriptElement.instance;
  if (s == "SVGSetElement") return BlinkSVGSetElement.instance;
  if (s == "SVGStopElement") return BlinkSVGStopElement.instance;
  if (s == "SVGStringList") return BlinkSVGStringList.instance;
  if (s == "SVGStyleElement") return BlinkSVGStyleElement.instance;
  if (s == "SVGSwitchElement") return BlinkSVGSwitchElement.instance;
  if (s == "SVGSymbolElement") return BlinkSVGSymbolElement.instance;
  if (s == "SVGTSpanElement") return BlinkSVGTSpanElement.instance;
  if (s == "SVGTextContentElement") return BlinkSVGTextContentElement.instance;
  if (s == "SVGTextElement") return BlinkSVGTextElement.instance;
  if (s == "SVGTextPathElement") return BlinkSVGTextPathElement.instance;
  if (s == "SVGTextPositioningElement") return BlinkSVGTextPositioningElement.instance;
  if (s == "SVGTitleElement") return BlinkSVGTitleElement.instance;
  if (s == "SVGTransform") return BlinkSVGTransform.instance;
  if (s == "SVGTransformList") return BlinkSVGTransformList.instance;
  if (s == "SVGUnitTypes") return BlinkSVGUnitTypes.instance;
  if (s == "SVGUseElement") return BlinkSVGUseElement.instance;
  if (s == "SVGVKernElement") return BlinkSVGVKernElement.instance;
  if (s == "SVGViewElement") return BlinkSVGViewElement.instance;
  if (s == "SVGViewSpec") return BlinkSVGViewSpec.instance;
  if (s == "SVGZoomEvent") return BlinkSVGZoomEvent.instance;
  if (s == "Screen") return BlinkScreen.instance;
  if (s == "ScreenOrientation") return BlinkScreenOrientation.instance;
  if (s == "ScriptProcessorNode") return BlinkScriptProcessorNode.instance;
  if (s == "SecurityPolicyViolationEvent") return BlinkSecurityPolicyViolationEvent.instance;
  if (s == "Selection") return BlinkSelection.instance;
  if (s == "ServiceWorker") return BlinkServiceWorker.instance;
  if (s == "ServiceWorkerClient") return BlinkServiceWorkerClient.instance;
  if (s == "ServiceWorkerClients") return BlinkServiceWorkerClients.instance;
  if (s == "ServiceWorkerContainer") return BlinkServiceWorkerContainer.instance;
  if (s == "ServiceWorkerGlobalScope") return BlinkServiceWorkerGlobalScope.instance;
  if (s == "ServiceWorkerRegistration") return BlinkServiceWorkerRegistration.instance;
  if (s == "ShadowRoot") return BlinkShadowRoot.instance;
  if (s == "SharedWorker") return BlinkSharedWorker.instance;
  if (s == "SharedWorkerGlobalScope") return BlinkSharedWorkerGlobalScope.instance;
  if (s == "SourceBuffer") return BlinkSourceBuffer.instance;
  if (s == "SourceBufferList") return BlinkSourceBufferList.instance;
  if (s == "SourceInfo") return BlinkSourceInfo.instance;
  if (s == "SpeechGrammar") return BlinkSpeechGrammar.instance;
  if (s == "SpeechGrammarList") return BlinkSpeechGrammarList.instance;
  if (s == "SpeechRecognition") return BlinkSpeechRecognition.instance;
  if (s == "SpeechRecognitionAlternative") return BlinkSpeechRecognitionAlternative.instance;
  if (s == "SpeechRecognitionError") return BlinkSpeechRecognitionError.instance;
  if (s == "SpeechRecognitionEvent") return BlinkSpeechRecognitionEvent.instance;
  if (s == "SpeechRecognitionResult") return BlinkSpeechRecognitionResult.instance;
  if (s == "SpeechRecognitionResultList") return BlinkSpeechRecognitionResultList.instance;
  if (s == "SpeechSynthesis") return BlinkSpeechSynthesis.instance;
  if (s == "SpeechSynthesisEvent") return BlinkSpeechSynthesisEvent.instance;
  if (s == "SpeechSynthesisUtterance") return BlinkSpeechSynthesisUtterance.instance;
  if (s == "SpeechSynthesisVoice") return BlinkSpeechSynthesisVoice.instance;
  if (s == "Storage") return BlinkStorage.instance;
  if (s == "StorageEvent") return BlinkStorageEvent.instance;
  if (s == "StorageInfo") return BlinkStorageInfo.instance;
  if (s == "StorageQuota") return BlinkStorageQuota.instance;
  if (s == "Stream") return BlinkStream.instance;
  if (s == "StyleMedia") return BlinkStyleMedia.instance;
  if (s == "StyleSheet") return BlinkStyleSheet.instance;
  if (s == "StyleSheetList") return BlinkStyleSheetList.instance;
  if (s == "SubtleCrypto") return BlinkSubtleCrypto.instance;
  if (s == "Text") return BlinkText.instance;
  if (s == "TextDecoder") return BlinkTextDecoder.instance;
  if (s == "TextEncoder") return BlinkTextEncoder.instance;
  if (s == "TextEvent") return BlinkTextEvent.instance;
  if (s == "TextMetrics") return BlinkTextMetrics.instance;
  if (s == "TextTrack") return BlinkTextTrack.instance;
  if (s == "TextTrackCue") return BlinkTextTrackCue.instance;
  if (s == "TextTrackCueList") return BlinkTextTrackCueList.instance;
  if (s == "TextTrackList") return BlinkTextTrackList.instance;
  if (s == "TimeRanges") return BlinkTimeRanges.instance;
  if (s == "Timing") return BlinkTiming.instance;
  if (s == "Touch") return BlinkTouch.instance;
  if (s == "TouchEvent") return BlinkTouchEvent.instance;
  if (s == "TouchList") return BlinkTouchList.instance;
  if (s == "TrackEvent") return BlinkTrackEvent.instance;
  if (s == "TransitionEvent") return BlinkTransitionEvent.instance;
  if (s == "TreeWalker") return BlinkTreeWalker.instance;
  if (s == "UIEvent") return BlinkUIEvent.instance;
  if (s == "URL") return BlinkURL.instance;
  if (s == "VTTCue") return BlinkVTTCue.instance;
  if (s == "VTTRegion") return BlinkVTTRegion.instance;
  if (s == "VTTRegionList") return BlinkVTTRegionList.instance;
  if (s == "ValidityState") return BlinkValidityState.instance;
  if (s == "VideoPlaybackQuality") return BlinkVideoPlaybackQuality.instance;
  if (s == "VideoTrack") return BlinkVideoTrack.instance;
  if (s == "VideoTrackList") return BlinkVideoTrackList.instance;
  if (s == "WaveShaperNode") return BlinkWaveShaperNode.instance;
  if (s == "WebGLActiveInfo") return BlinkWebGLActiveInfo.instance;
  if (s == "WebGLBuffer") return BlinkWebGLBuffer.instance;
  if (s == "WebGLCompressedTextureATC") return BlinkWebGLCompressedTextureATC.instance;
  if (s == "WebGLCompressedTextureETC1") return BlinkWebGLCompressedTextureETC1.instance;
  if (s == "WebGLCompressedTexturePVRTC") return BlinkWebGLCompressedTexturePVRTC.instance;
  if (s == "WebGLCompressedTextureS3TC") return BlinkWebGLCompressedTextureS3TC.instance;
  if (s == "WebGLContextAttributes") return BlinkWebGLContextAttributes.instance;
  if (s == "WebGLContextEvent") return BlinkWebGLContextEvent.instance;
  if (s == "WebGLDebugRendererInfo") return BlinkWebGLDebugRendererInfo.instance;
  if (s == "WebGLDebugShaders") return BlinkWebGLDebugShaders.instance;
  if (s == "WebGLDepthTexture") return BlinkWebGLDepthTexture.instance;
  if (s == "WebGLDrawBuffers") return BlinkWebGLDrawBuffers.instance;
  if (s == "WebGLFramebuffer") return BlinkWebGLFramebuffer.instance;
  if (s == "WebGLLoseContext") return BlinkWebGLLoseContext.instance;
  if (s == "WebGLProgram") return BlinkWebGLProgram.instance;
  if (s == "WebGLRenderbuffer") return BlinkWebGLRenderbuffer.instance;
  if (s == "WebGLRenderingContext") return BlinkWebGLRenderingContext.instance;
  if (s == "WebGLShader") return BlinkWebGLShader.instance;
  if (s == "WebGLShaderPrecisionFormat") return BlinkWebGLShaderPrecisionFormat.instance;
  if (s == "WebGLTexture") return BlinkWebGLTexture.instance;
  if (s == "WebGLUniformLocation") return BlinkWebGLUniformLocation.instance;
  if (s == "WebGLVertexArrayObjectOES") return BlinkWebGLVertexArrayObjectOES.instance;
  if (s == "WebKitAnimationEvent") return BlinkWebKitAnimationEvent.instance;
  if (s == "WebKitCSSFilterRule") return BlinkWebKitCSSFilterRule.instance;
  if (s == "WebKitCSSFilterValue") return BlinkWebKitCSSFilterValue.instance;
  if (s == "WebKitCSSMatrix") return BlinkWebKitCSSMatrix.instance;
  if (s == "WebKitCSSTransformValue") return BlinkWebKitCSSTransformValue.instance;
  if (s == "WebKitGamepad") return BlinkWebKitGamepad.instance;
  if (s == "WebKitGamepadList") return BlinkWebKitGamepadList.instance;
  if (s == "WebSocket") return BlinkWebSocket.instance;
  if (s == "WheelEvent") return BlinkWheelEvent.instance;
  if (s == "Window") return BlinkWindow.instance;
  if (s == "Worker") return BlinkWorker.instance;
  if (s == "WorkerConsole") return BlinkWorkerConsole.instance;
  if (s == "WorkerGlobalScope") return BlinkWorkerGlobalScope.instance;
  if (s == "WorkerLocation") return BlinkWorkerLocation.instance;
  if (s == "WorkerNavigator") return BlinkWorkerNavigator.instance;
  if (s == "WorkerPerformance") return BlinkWorkerPerformance.instance;
  if (s == "XMLDocument") return BlinkXMLDocument.instance;
  if (s == "XMLHttpRequest") return BlinkXMLHttpRequest.instance;
  if (s == "XMLHttpRequestEventTarget") return BlinkXMLHttpRequestEventTarget.instance;
  if (s == "XMLHttpRequestProgressEvent") return BlinkXMLHttpRequestProgressEvent.instance;
  if (s == "XMLHttpRequestUpload") return BlinkXMLHttpRequestUpload.instance;
  if (s == "XMLSerializer") return BlinkXMLSerializer.instance;
  if (s == "XPathEvaluator") return BlinkXPathEvaluator.instance;
  if (s == "XPathExpression") return BlinkXPathExpression.instance;
  if (s == "XPathNSResolver") return BlinkXPathNSResolver.instance;
  if (s == "XPathResult") return BlinkXPathResult.instance;
  if (s == "XSLTProcessor") return BlinkXSLTProcessor.instance;
  // Failed to find it, check for custom renames
  dynamic obj = resolverMap[s];
  if (obj != null) return obj;
  throw("No such interface exposed in blink: ${s}");
}

class BlinkANGLEInstancedArrays {
  static final instance = new BlinkANGLEInstancedArrays();

  static drawArraysInstancedANGLE_Callback_2(mthis, __arg_0, __arg_1) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback";
  drawArraysInstancedANGLE_Callback_2_(mthis, __arg_0, __arg_1) => drawArraysInstancedANGLE_Callback_2(mthis, __arg_0, __arg_1);

  static drawArraysInstancedANGLE_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback";
  drawArraysInstancedANGLE_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => drawArraysInstancedANGLE_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static drawArraysInstancedANGLE_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback";
  drawArraysInstancedANGLE_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => drawArraysInstancedANGLE_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static drawArraysInstancedANGLE_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback";
  drawArraysInstancedANGLE_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => drawArraysInstancedANGLE_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static drawArraysInstancedANGLE_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback";
  drawArraysInstancedANGLE_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => drawArraysInstancedANGLE_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static drawElementsInstancedANGLE_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback";
  drawElementsInstancedANGLE_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => drawElementsInstancedANGLE_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static drawElementsInstancedANGLE_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback";
  drawElementsInstancedANGLE_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => drawElementsInstancedANGLE_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static drawElementsInstancedANGLE_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback";
  drawElementsInstancedANGLE_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => drawElementsInstancedANGLE_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static drawElementsInstancedANGLE_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback";
  drawElementsInstancedANGLE_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => drawElementsInstancedANGLE_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static drawElementsInstancedANGLE_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback";
  drawElementsInstancedANGLE_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => drawElementsInstancedANGLE_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static vertexAttribDivisorANGLE_Callback_0(mthis) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback";
  vertexAttribDivisorANGLE_Callback_0_(mthis) => vertexAttribDivisorANGLE_Callback_0(mthis);

  static vertexAttribDivisorANGLE_Callback_1(mthis, __arg_0) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback";
  vertexAttribDivisorANGLE_Callback_1_(mthis, __arg_0) => vertexAttribDivisorANGLE_Callback_1(mthis, __arg_0);

  static vertexAttribDivisorANGLE_Callback_2(mthis, __arg_0, __arg_1) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback";
  vertexAttribDivisorANGLE_Callback_2_(mthis, __arg_0, __arg_1) => vertexAttribDivisorANGLE_Callback_2(mthis, __arg_0, __arg_1);

  static vertexAttribDivisorANGLE_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback";
  vertexAttribDivisorANGLE_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vertexAttribDivisorANGLE_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttribDivisorANGLE_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback";
  vertexAttribDivisorANGLE_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttribDivisorANGLE_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkAnalyserNode extends BlinkAudioNode {
  static final instance = new BlinkAnalyserNode();

  static fftSize_Getter(mthis) native "AnalyserNode_fftSize_Getter";
  fftSize_Getter_(mthis) => fftSize_Getter(mthis);

  static fftSize_Setter(mthis, __arg_0) native "AnalyserNode_fftSize_Setter";
  fftSize_Setter_(mthis, __arg_0) => fftSize_Setter(mthis, __arg_0);

  static frequencyBinCount_Getter(mthis) native "AnalyserNode_frequencyBinCount_Getter";
  frequencyBinCount_Getter_(mthis) => frequencyBinCount_Getter(mthis);

  static getByteFrequencyData_Callback_0(mthis) native "AnalyserNode_getByteFrequencyData_Callback";
  getByteFrequencyData_Callback_0_(mthis) => getByteFrequencyData_Callback_0(mthis);

  static getByteFrequencyData_Callback_1(mthis, __arg_0) native "AnalyserNode_getByteFrequencyData_Callback";
  getByteFrequencyData_Callback_1_(mthis, __arg_0) => getByteFrequencyData_Callback_1(mthis, __arg_0);

  static getByteFrequencyData_Callback_2(mthis, __arg_0, __arg_1) native "AnalyserNode_getByteFrequencyData_Callback";
  getByteFrequencyData_Callback_2_(mthis, __arg_0, __arg_1) => getByteFrequencyData_Callback_2(mthis, __arg_0, __arg_1);

  static getByteFrequencyData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AnalyserNode_getByteFrequencyData_Callback";
  getByteFrequencyData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getByteFrequencyData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getByteTimeDomainData_Callback_0(mthis) native "AnalyserNode_getByteTimeDomainData_Callback";
  getByteTimeDomainData_Callback_0_(mthis) => getByteTimeDomainData_Callback_0(mthis);

  static getByteTimeDomainData_Callback_1(mthis, __arg_0) native "AnalyserNode_getByteTimeDomainData_Callback";
  getByteTimeDomainData_Callback_1_(mthis, __arg_0) => getByteTimeDomainData_Callback_1(mthis, __arg_0);

  static getByteTimeDomainData_Callback_2(mthis, __arg_0, __arg_1) native "AnalyserNode_getByteTimeDomainData_Callback";
  getByteTimeDomainData_Callback_2_(mthis, __arg_0, __arg_1) => getByteTimeDomainData_Callback_2(mthis, __arg_0, __arg_1);

  static getByteTimeDomainData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AnalyserNode_getByteTimeDomainData_Callback";
  getByteTimeDomainData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getByteTimeDomainData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getFloatFrequencyData_Callback_0(mthis) native "AnalyserNode_getFloatFrequencyData_Callback";
  getFloatFrequencyData_Callback_0_(mthis) => getFloatFrequencyData_Callback_0(mthis);

  static getFloatFrequencyData_Callback_1(mthis, __arg_0) native "AnalyserNode_getFloatFrequencyData_Callback";
  getFloatFrequencyData_Callback_1_(mthis, __arg_0) => getFloatFrequencyData_Callback_1(mthis, __arg_0);

  static getFloatFrequencyData_Callback_2(mthis, __arg_0, __arg_1) native "AnalyserNode_getFloatFrequencyData_Callback";
  getFloatFrequencyData_Callback_2_(mthis, __arg_0, __arg_1) => getFloatFrequencyData_Callback_2(mthis, __arg_0, __arg_1);

  static getFloatFrequencyData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AnalyserNode_getFloatFrequencyData_Callback";
  getFloatFrequencyData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getFloatFrequencyData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getFloatTimeDomainData_Callback_0(mthis) native "AnalyserNode_getFloatTimeDomainData_Callback";
  getFloatTimeDomainData_Callback_0_(mthis) => getFloatTimeDomainData_Callback_0(mthis);

  static getFloatTimeDomainData_Callback_1(mthis, __arg_0) native "AnalyserNode_getFloatTimeDomainData_Callback";
  getFloatTimeDomainData_Callback_1_(mthis, __arg_0) => getFloatTimeDomainData_Callback_1(mthis, __arg_0);

  static getFloatTimeDomainData_Callback_2(mthis, __arg_0, __arg_1) native "AnalyserNode_getFloatTimeDomainData_Callback";
  getFloatTimeDomainData_Callback_2_(mthis, __arg_0, __arg_1) => getFloatTimeDomainData_Callback_2(mthis, __arg_0, __arg_1);

  static getFloatTimeDomainData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AnalyserNode_getFloatTimeDomainData_Callback";
  getFloatTimeDomainData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getFloatTimeDomainData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static maxDecibels_Getter(mthis) native "AnalyserNode_maxDecibels_Getter";
  maxDecibels_Getter_(mthis) => maxDecibels_Getter(mthis);

  static maxDecibels_Setter(mthis, __arg_0) native "AnalyserNode_maxDecibels_Setter";
  maxDecibels_Setter_(mthis, __arg_0) => maxDecibels_Setter(mthis, __arg_0);

  static minDecibels_Getter(mthis) native "AnalyserNode_minDecibels_Getter";
  minDecibels_Getter_(mthis) => minDecibels_Getter(mthis);

  static minDecibels_Setter(mthis, __arg_0) native "AnalyserNode_minDecibels_Setter";
  minDecibels_Setter_(mthis, __arg_0) => minDecibels_Setter(mthis, __arg_0);

  static smoothingTimeConstant_Getter(mthis) native "AnalyserNode_smoothingTimeConstant_Getter";
  smoothingTimeConstant_Getter_(mthis) => smoothingTimeConstant_Getter(mthis);

  static smoothingTimeConstant_Setter(mthis, __arg_0) native "AnalyserNode_smoothingTimeConstant_Setter";
  smoothingTimeConstant_Setter_(mthis, __arg_0) => smoothingTimeConstant_Setter(mthis, __arg_0);

}

class BlinkAnimation extends BlinkAnimationNode {
  static final instance = new BlinkAnimation();

  static constructorCallback_0() native "Animation_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Animation_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Animation_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Animation_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "Animation_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Animation_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkAnimationEffect {
  static final instance = new BlinkAnimationEffect();

}

class BlinkAnimationNode {
  static final instance = new BlinkAnimationNode();

  static activeDuration_Getter(mthis) native "AnimationNode_activeDuration_Getter";
  activeDuration_Getter_(mthis) => activeDuration_Getter(mthis);

  static currentIteration_Getter(mthis) native "AnimationNode_currentIteration_Getter";
  currentIteration_Getter_(mthis) => currentIteration_Getter(mthis);

  static duration_Getter(mthis) native "AnimationNode_duration_Getter";
  duration_Getter_(mthis) => duration_Getter(mthis);

  static endTime_Getter(mthis) native "AnimationNode_endTime_Getter";
  endTime_Getter_(mthis) => endTime_Getter(mthis);

  static localTime_Getter(mthis) native "AnimationNode_localTime_Getter";
  localTime_Getter_(mthis) => localTime_Getter(mthis);

  static player_Getter(mthis) native "AnimationNode_player_Getter";
  player_Getter_(mthis) => player_Getter(mthis);

  static startTime_Getter(mthis) native "AnimationNode_startTime_Getter";
  startTime_Getter_(mthis) => startTime_Getter(mthis);

  static timing_Getter(mthis) native "AnimationNode_timing_Getter";
  timing_Getter_(mthis) => timing_Getter(mthis);

}

class BlinkAnimationPlayer extends BlinkEventTarget {
  static final instance = new BlinkAnimationPlayer();

  static cancel_Callback_0(mthis) native "AnimationPlayer_cancel_Callback";
  cancel_Callback_0_(mthis) => cancel_Callback_0(mthis);

  static cancel_Callback_1(mthis, __arg_0) native "AnimationPlayer_cancel_Callback";
  cancel_Callback_1_(mthis, __arg_0) => cancel_Callback_1(mthis, __arg_0);

  static cancel_Callback_2(mthis, __arg_0, __arg_1) native "AnimationPlayer_cancel_Callback";
  cancel_Callback_2_(mthis, __arg_0, __arg_1) => cancel_Callback_2(mthis, __arg_0, __arg_1);

  static currentTime_Getter(mthis) native "AnimationPlayer_currentTime_Getter";
  currentTime_Getter_(mthis) => currentTime_Getter(mthis);

  static currentTime_Setter(mthis, __arg_0) native "AnimationPlayer_currentTime_Setter";
  currentTime_Setter_(mthis, __arg_0) => currentTime_Setter(mthis, __arg_0);

  static finish_Callback_0(mthis) native "AnimationPlayer_finish_Callback";
  finish_Callback_0_(mthis) => finish_Callback_0(mthis);

  static finish_Callback_1(mthis, __arg_0) native "AnimationPlayer_finish_Callback";
  finish_Callback_1_(mthis, __arg_0) => finish_Callback_1(mthis, __arg_0);

  static finish_Callback_2(mthis, __arg_0, __arg_1) native "AnimationPlayer_finish_Callback";
  finish_Callback_2_(mthis, __arg_0, __arg_1) => finish_Callback_2(mthis, __arg_0, __arg_1);

  static onfinish_Getter(mthis) native "AnimationPlayer_onfinish_Getter";
  onfinish_Getter_(mthis) => onfinish_Getter(mthis);

  static onfinish_Setter(mthis, __arg_0) native "AnimationPlayer_onfinish_Setter";
  onfinish_Setter_(mthis, __arg_0) => onfinish_Setter(mthis, __arg_0);

  static pause_Callback_0(mthis) native "AnimationPlayer_pause_Callback";
  pause_Callback_0_(mthis) => pause_Callback_0(mthis);

  static pause_Callback_1(mthis, __arg_0) native "AnimationPlayer_pause_Callback";
  pause_Callback_1_(mthis, __arg_0) => pause_Callback_1(mthis, __arg_0);

  static pause_Callback_2(mthis, __arg_0, __arg_1) native "AnimationPlayer_pause_Callback";
  pause_Callback_2_(mthis, __arg_0, __arg_1) => pause_Callback_2(mthis, __arg_0, __arg_1);

  static playState_Getter(mthis) native "AnimationPlayer_playState_Getter";
  playState_Getter_(mthis) => playState_Getter(mthis);

  static play_Callback_0(mthis) native "AnimationPlayer_play_Callback";
  play_Callback_0_(mthis) => play_Callback_0(mthis);

  static play_Callback_1(mthis, __arg_0) native "AnimationPlayer_play_Callback";
  play_Callback_1_(mthis, __arg_0) => play_Callback_1(mthis, __arg_0);

  static play_Callback_2(mthis, __arg_0, __arg_1) native "AnimationPlayer_play_Callback";
  play_Callback_2_(mthis, __arg_0, __arg_1) => play_Callback_2(mthis, __arg_0, __arg_1);

  static playbackRate_Getter(mthis) native "AnimationPlayer_playbackRate_Getter";
  playbackRate_Getter_(mthis) => playbackRate_Getter(mthis);

  static playbackRate_Setter(mthis, __arg_0) native "AnimationPlayer_playbackRate_Setter";
  playbackRate_Setter_(mthis, __arg_0) => playbackRate_Setter(mthis, __arg_0);

  static reverse_Callback_0(mthis) native "AnimationPlayer_reverse_Callback";
  reverse_Callback_0_(mthis) => reverse_Callback_0(mthis);

  static reverse_Callback_1(mthis, __arg_0) native "AnimationPlayer_reverse_Callback";
  reverse_Callback_1_(mthis, __arg_0) => reverse_Callback_1(mthis, __arg_0);

  static reverse_Callback_2(mthis, __arg_0, __arg_1) native "AnimationPlayer_reverse_Callback";
  reverse_Callback_2_(mthis, __arg_0, __arg_1) => reverse_Callback_2(mthis, __arg_0, __arg_1);

  static source_Getter(mthis) native "AnimationPlayer_source_Getter";
  source_Getter_(mthis) => source_Getter(mthis);

  static source_Setter(mthis, __arg_0) native "AnimationPlayer_source_Setter";
  source_Setter_(mthis, __arg_0) => source_Setter(mthis, __arg_0);

  static startTime_Getter(mthis) native "AnimationPlayer_startTime_Getter";
  startTime_Getter_(mthis) => startTime_Getter(mthis);

  static startTime_Setter(mthis, __arg_0) native "AnimationPlayer_startTime_Setter";
  startTime_Setter_(mthis, __arg_0) => startTime_Setter(mthis, __arg_0);

}

class BlinkAnimationPlayerEvent extends BlinkEvent {
  static final instance = new BlinkAnimationPlayerEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "AnimationPlayerEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static currentTime_Getter(mthis) native "AnimationPlayerEvent_currentTime_Getter";
  currentTime_Getter_(mthis) => currentTime_Getter(mthis);

  static timelineTime_Getter(mthis) native "AnimationPlayerEvent_timelineTime_Getter";
  timelineTime_Getter_(mthis) => timelineTime_Getter(mthis);

}

class BlinkAnimationTimeline {
  static final instance = new BlinkAnimationTimeline();

  static currentTime_Getter(mthis) native "AnimationTimeline_currentTime_Getter";
  currentTime_Getter_(mthis) => currentTime_Getter(mthis);

  static getAnimationPlayers_Callback_0(mthis) native "AnimationTimeline_getAnimationPlayers_Callback";
  getAnimationPlayers_Callback_0_(mthis) => getAnimationPlayers_Callback_0(mthis);

  static getAnimationPlayers_Callback_1(mthis, __arg_0) native "AnimationTimeline_getAnimationPlayers_Callback";
  getAnimationPlayers_Callback_1_(mthis, __arg_0) => getAnimationPlayers_Callback_1(mthis, __arg_0);

  static getAnimationPlayers_Callback_2(mthis, __arg_0, __arg_1) native "AnimationTimeline_getAnimationPlayers_Callback";
  getAnimationPlayers_Callback_2_(mthis, __arg_0, __arg_1) => getAnimationPlayers_Callback_2(mthis, __arg_0, __arg_1);

  static play_Callback_0(mthis) native "AnimationTimeline_play_Callback";
  play_Callback_0_(mthis) => play_Callback_0(mthis);

  static play_Callback_1(mthis, __arg_0) native "AnimationTimeline_play_Callback";
  play_Callback_1_(mthis, __arg_0) => play_Callback_1(mthis, __arg_0);

  static play_Callback_2(mthis, __arg_0, __arg_1) native "AnimationTimeline_play_Callback";
  play_Callback_2_(mthis, __arg_0, __arg_1) => play_Callback_2(mthis, __arg_0, __arg_1);

  static play_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AnimationTimeline_play_Callback";
  play_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => play_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkApplicationCache extends BlinkEventTarget {
  static final instance = new BlinkApplicationCache();

  static abort_Callback_0(mthis) native "ApplicationCache_abort_Callback";
  abort_Callback_0_(mthis) => abort_Callback_0(mthis);

  static abort_Callback_1(mthis, __arg_0) native "ApplicationCache_abort_Callback";
  abort_Callback_1_(mthis, __arg_0) => abort_Callback_1(mthis, __arg_0);

  static abort_Callback_2(mthis, __arg_0, __arg_1) native "ApplicationCache_abort_Callback";
  abort_Callback_2_(mthis, __arg_0, __arg_1) => abort_Callback_2(mthis, __arg_0, __arg_1);

  static oncached_Getter(mthis) native "ApplicationCache_oncached_Getter";
  oncached_Getter_(mthis) => oncached_Getter(mthis);

  static oncached_Setter(mthis, __arg_0) native "ApplicationCache_oncached_Setter";
  oncached_Setter_(mthis, __arg_0) => oncached_Setter(mthis, __arg_0);

  static onchecking_Getter(mthis) native "ApplicationCache_onchecking_Getter";
  onchecking_Getter_(mthis) => onchecking_Getter(mthis);

  static onchecking_Setter(mthis, __arg_0) native "ApplicationCache_onchecking_Setter";
  onchecking_Setter_(mthis, __arg_0) => onchecking_Setter(mthis, __arg_0);

  static ondownloading_Getter(mthis) native "ApplicationCache_ondownloading_Getter";
  ondownloading_Getter_(mthis) => ondownloading_Getter(mthis);

  static ondownloading_Setter(mthis, __arg_0) native "ApplicationCache_ondownloading_Setter";
  ondownloading_Setter_(mthis, __arg_0) => ondownloading_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "ApplicationCache_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "ApplicationCache_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onnoupdate_Getter(mthis) native "ApplicationCache_onnoupdate_Getter";
  onnoupdate_Getter_(mthis) => onnoupdate_Getter(mthis);

  static onnoupdate_Setter(mthis, __arg_0) native "ApplicationCache_onnoupdate_Setter";
  onnoupdate_Setter_(mthis, __arg_0) => onnoupdate_Setter(mthis, __arg_0);

  static onobsolete_Getter(mthis) native "ApplicationCache_onobsolete_Getter";
  onobsolete_Getter_(mthis) => onobsolete_Getter(mthis);

  static onobsolete_Setter(mthis, __arg_0) native "ApplicationCache_onobsolete_Setter";
  onobsolete_Setter_(mthis, __arg_0) => onobsolete_Setter(mthis, __arg_0);

  static onprogress_Getter(mthis) native "ApplicationCache_onprogress_Getter";
  onprogress_Getter_(mthis) => onprogress_Getter(mthis);

  static onprogress_Setter(mthis, __arg_0) native "ApplicationCache_onprogress_Setter";
  onprogress_Setter_(mthis, __arg_0) => onprogress_Setter(mthis, __arg_0);

  static onupdateready_Getter(mthis) native "ApplicationCache_onupdateready_Getter";
  onupdateready_Getter_(mthis) => onupdateready_Getter(mthis);

  static onupdateready_Setter(mthis, __arg_0) native "ApplicationCache_onupdateready_Setter";
  onupdateready_Setter_(mthis, __arg_0) => onupdateready_Setter(mthis, __arg_0);

  static status_Getter(mthis) native "ApplicationCache_status_Getter";
  status_Getter_(mthis) => status_Getter(mthis);

  static swapCache_Callback_0(mthis) native "ApplicationCache_swapCache_Callback";
  swapCache_Callback_0_(mthis) => swapCache_Callback_0(mthis);

  static swapCache_Callback_1(mthis, __arg_0) native "ApplicationCache_swapCache_Callback";
  swapCache_Callback_1_(mthis, __arg_0) => swapCache_Callback_1(mthis, __arg_0);

  static swapCache_Callback_2(mthis, __arg_0, __arg_1) native "ApplicationCache_swapCache_Callback";
  swapCache_Callback_2_(mthis, __arg_0, __arg_1) => swapCache_Callback_2(mthis, __arg_0, __arg_1);

  static update_Callback_0(mthis) native "ApplicationCache_update_Callback";
  update_Callback_0_(mthis) => update_Callback_0(mthis);

  static update_Callback_1(mthis, __arg_0) native "ApplicationCache_update_Callback";
  update_Callback_1_(mthis, __arg_0) => update_Callback_1(mthis, __arg_0);

  static update_Callback_2(mthis, __arg_0, __arg_1) native "ApplicationCache_update_Callback";
  update_Callback_2_(mthis, __arg_0, __arg_1) => update_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkApplicationCacheErrorEvent extends BlinkEvent {
  static final instance = new BlinkApplicationCacheErrorEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "ApplicationCacheErrorEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static message_Getter(mthis) native "ApplicationCacheErrorEvent_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

  static reason_Getter(mthis) native "ApplicationCacheErrorEvent_reason_Getter";
  reason_Getter_(mthis) => reason_Getter(mthis);

  static status_Getter(mthis) native "ApplicationCacheErrorEvent_status_Getter";
  status_Getter_(mthis) => status_Getter(mthis);

  static url_Getter(mthis) native "ApplicationCacheErrorEvent_url_Getter";
  url_Getter_(mthis) => url_Getter(mthis);

}

class BlinkAttr extends BlinkNode {
  static final instance = new BlinkAttr();

  static localName_Getter(mthis) native "Attr_localName_Getter";
  localName_Getter_(mthis) => localName_Getter(mthis);

  static name_Getter(mthis) native "Attr_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static namespaceURI_Getter(mthis) native "Attr_namespaceURI_Getter";
  namespaceURI_Getter_(mthis) => namespaceURI_Getter(mthis);

  static nodeValue_Getter(mthis) native "Attr_nodeValue_Getter";
  nodeValue_Getter_(mthis) => nodeValue_Getter(mthis);

  static nodeValue_Setter(mthis, __arg_0) native "Attr_nodeValue_Setter";
  nodeValue_Setter_(mthis, __arg_0) => nodeValue_Setter(mthis, __arg_0);

  static ownerElement_Getter(mthis) native "Attr_ownerElement_Getter";
  ownerElement_Getter_(mthis) => ownerElement_Getter(mthis);

  static prefix_Getter(mthis) native "Attr_prefix_Getter";
  prefix_Getter_(mthis) => prefix_Getter(mthis);

  static specified_Getter(mthis) native "Attr_specified_Getter";
  specified_Getter_(mthis) => specified_Getter(mthis);

  static textContent_Getter(mthis) native "Attr_textContent_Getter";
  textContent_Getter_(mthis) => textContent_Getter(mthis);

  static textContent_Setter(mthis, __arg_0) native "Attr_textContent_Setter";
  textContent_Setter_(mthis, __arg_0) => textContent_Setter(mthis, __arg_0);

  static value_Getter(mthis) native "Attr_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "Attr_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkAudioBuffer {
  static final instance = new BlinkAudioBuffer();

  static duration_Getter(mthis) native "AudioBuffer_duration_Getter";
  duration_Getter_(mthis) => duration_Getter(mthis);

  static getChannelData_Callback_0(mthis) native "AudioBuffer_getChannelData_Callback";
  getChannelData_Callback_0_(mthis) => getChannelData_Callback_0(mthis);

  static getChannelData_Callback_1(mthis, __arg_0) native "AudioBuffer_getChannelData_Callback";
  getChannelData_Callback_1_(mthis, __arg_0) => getChannelData_Callback_1(mthis, __arg_0);

  static getChannelData_Callback_2(mthis, __arg_0, __arg_1) native "AudioBuffer_getChannelData_Callback";
  getChannelData_Callback_2_(mthis, __arg_0, __arg_1) => getChannelData_Callback_2(mthis, __arg_0, __arg_1);

  static getChannelData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioBuffer_getChannelData_Callback";
  getChannelData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getChannelData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "AudioBuffer_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static numberOfChannels_Getter(mthis) native "AudioBuffer_numberOfChannels_Getter";
  numberOfChannels_Getter_(mthis) => numberOfChannels_Getter(mthis);

  static sampleRate_Getter(mthis) native "AudioBuffer_sampleRate_Getter";
  sampleRate_Getter_(mthis) => sampleRate_Getter(mthis);

}

class BlinkAudioBufferSourceNode extends BlinkAudioSourceNode {
  static final instance = new BlinkAudioBufferSourceNode();

  static buffer_Getter(mthis) native "AudioBufferSourceNode_buffer_Getter";
  buffer_Getter_(mthis) => buffer_Getter(mthis);

  static buffer_Setter(mthis, __arg_0) native "AudioBufferSourceNode_buffer_Setter";
  buffer_Setter_(mthis, __arg_0) => buffer_Setter(mthis, __arg_0);

  static loopEnd_Getter(mthis) native "AudioBufferSourceNode_loopEnd_Getter";
  loopEnd_Getter_(mthis) => loopEnd_Getter(mthis);

  static loopEnd_Setter(mthis, __arg_0) native "AudioBufferSourceNode_loopEnd_Setter";
  loopEnd_Setter_(mthis, __arg_0) => loopEnd_Setter(mthis, __arg_0);

  static loopStart_Getter(mthis) native "AudioBufferSourceNode_loopStart_Getter";
  loopStart_Getter_(mthis) => loopStart_Getter(mthis);

  static loopStart_Setter(mthis, __arg_0) native "AudioBufferSourceNode_loopStart_Setter";
  loopStart_Setter_(mthis, __arg_0) => loopStart_Setter(mthis, __arg_0);

  static loop_Getter(mthis) native "AudioBufferSourceNode_loop_Getter";
  loop_Getter_(mthis) => loop_Getter(mthis);

  static loop_Setter(mthis, __arg_0) native "AudioBufferSourceNode_loop_Setter";
  loop_Setter_(mthis, __arg_0) => loop_Setter(mthis, __arg_0);

  static onended_Getter(mthis) native "AudioBufferSourceNode_onended_Getter";
  onended_Getter_(mthis) => onended_Getter(mthis);

  static onended_Setter(mthis, __arg_0) native "AudioBufferSourceNode_onended_Setter";
  onended_Setter_(mthis, __arg_0) => onended_Setter(mthis, __arg_0);

  static playbackRate_Getter(mthis) native "AudioBufferSourceNode_playbackRate_Getter";
  playbackRate_Getter_(mthis) => playbackRate_Getter(mthis);

  static start_Callback_0(mthis) native "AudioBufferSourceNode_start_Callback";
  start_Callback_0_(mthis) => start_Callback_0(mthis);

  static start_Callback_1(mthis, __arg_0) native "AudioBufferSourceNode_start_Callback";
  start_Callback_1_(mthis, __arg_0) => start_Callback_1(mthis, __arg_0);

  static start_Callback_2(mthis, __arg_0, __arg_1) native "AudioBufferSourceNode_start_Callback";
  start_Callback_2_(mthis, __arg_0, __arg_1) => start_Callback_2(mthis, __arg_0, __arg_1);

  static start_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioBufferSourceNode_start_Callback";
  start_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => start_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static start_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioBufferSourceNode_start_Callback";
  start_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => start_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static start_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioBufferSourceNode_start_Callback";
  start_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => start_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static stop_Callback_0(mthis) native "AudioBufferSourceNode_stop_Callback";
  stop_Callback_0_(mthis) => stop_Callback_0(mthis);

  static stop_Callback_1(mthis, __arg_0) native "AudioBufferSourceNode_stop_Callback";
  stop_Callback_1_(mthis, __arg_0) => stop_Callback_1(mthis, __arg_0);

  static stop_Callback_2(mthis, __arg_0, __arg_1) native "AudioBufferSourceNode_stop_Callback";
  stop_Callback_2_(mthis, __arg_0, __arg_1) => stop_Callback_2(mthis, __arg_0, __arg_1);

  static stop_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioBufferSourceNode_stop_Callback";
  stop_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stop_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkAudioContext extends BlinkEventTarget {
  static final instance = new BlinkAudioContext();

  static constructorCallback_0() native "AudioContext_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "AudioContext_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "AudioContext_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static createAnalyser_Callback_0(mthis) native "AudioContext_createAnalyser_Callback";
  createAnalyser_Callback_0_(mthis) => createAnalyser_Callback_0(mthis);

  static createAnalyser_Callback_1(mthis, __arg_0) native "AudioContext_createAnalyser_Callback";
  createAnalyser_Callback_1_(mthis, __arg_0) => createAnalyser_Callback_1(mthis, __arg_0);

  static createAnalyser_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createAnalyser_Callback";
  createAnalyser_Callback_2_(mthis, __arg_0, __arg_1) => createAnalyser_Callback_2(mthis, __arg_0, __arg_1);

  static createBiquadFilter_Callback_0(mthis) native "AudioContext_createBiquadFilter_Callback";
  createBiquadFilter_Callback_0_(mthis) => createBiquadFilter_Callback_0(mthis);

  static createBiquadFilter_Callback_1(mthis, __arg_0) native "AudioContext_createBiquadFilter_Callback";
  createBiquadFilter_Callback_1_(mthis, __arg_0) => createBiquadFilter_Callback_1(mthis, __arg_0);

  static createBiquadFilter_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createBiquadFilter_Callback";
  createBiquadFilter_Callback_2_(mthis, __arg_0, __arg_1) => createBiquadFilter_Callback_2(mthis, __arg_0, __arg_1);

  static createBufferSource_Callback_0(mthis) native "AudioContext_createBufferSource_Callback";
  createBufferSource_Callback_0_(mthis) => createBufferSource_Callback_0(mthis);

  static createBufferSource_Callback_1(mthis, __arg_0) native "AudioContext_createBufferSource_Callback";
  createBufferSource_Callback_1_(mthis, __arg_0) => createBufferSource_Callback_1(mthis, __arg_0);

  static createBufferSource_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createBufferSource_Callback";
  createBufferSource_Callback_2_(mthis, __arg_0, __arg_1) => createBufferSource_Callback_2(mthis, __arg_0, __arg_1);

  static createBuffer_Callback_1(mthis, __arg_0) native "AudioContext_createBuffer_Callback";
  createBuffer_Callback_1_(mthis, __arg_0) => createBuffer_Callback_1(mthis, __arg_0);

  static createBuffer_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createBuffer_Callback";
  createBuffer_Callback_2_(mthis, __arg_0, __arg_1) => createBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static createBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioContext_createBuffer_Callback";
  createBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createBuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioContext_createBuffer_Callback";
  createBuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createBuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createBuffer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioContext_createBuffer_Callback";
  createBuffer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createBuffer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createChannelMerger_Callback_0(mthis) native "AudioContext_createChannelMerger_Callback";
  createChannelMerger_Callback_0_(mthis) => createChannelMerger_Callback_0(mthis);

  static createChannelMerger_Callback_1(mthis, __arg_0) native "AudioContext_createChannelMerger_Callback";
  createChannelMerger_Callback_1_(mthis, __arg_0) => createChannelMerger_Callback_1(mthis, __arg_0);

  static createChannelMerger_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createChannelMerger_Callback";
  createChannelMerger_Callback_2_(mthis, __arg_0, __arg_1) => createChannelMerger_Callback_2(mthis, __arg_0, __arg_1);

  static createChannelMerger_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioContext_createChannelMerger_Callback";
  createChannelMerger_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createChannelMerger_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createChannelSplitter_Callback_0(mthis) native "AudioContext_createChannelSplitter_Callback";
  createChannelSplitter_Callback_0_(mthis) => createChannelSplitter_Callback_0(mthis);

  static createChannelSplitter_Callback_1(mthis, __arg_0) native "AudioContext_createChannelSplitter_Callback";
  createChannelSplitter_Callback_1_(mthis, __arg_0) => createChannelSplitter_Callback_1(mthis, __arg_0);

  static createChannelSplitter_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createChannelSplitter_Callback";
  createChannelSplitter_Callback_2_(mthis, __arg_0, __arg_1) => createChannelSplitter_Callback_2(mthis, __arg_0, __arg_1);

  static createChannelSplitter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioContext_createChannelSplitter_Callback";
  createChannelSplitter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createChannelSplitter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createConvolver_Callback_0(mthis) native "AudioContext_createConvolver_Callback";
  createConvolver_Callback_0_(mthis) => createConvolver_Callback_0(mthis);

  static createConvolver_Callback_1(mthis, __arg_0) native "AudioContext_createConvolver_Callback";
  createConvolver_Callback_1_(mthis, __arg_0) => createConvolver_Callback_1(mthis, __arg_0);

  static createConvolver_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createConvolver_Callback";
  createConvolver_Callback_2_(mthis, __arg_0, __arg_1) => createConvolver_Callback_2(mthis, __arg_0, __arg_1);

  static createDelay_Callback_0(mthis) native "AudioContext_createDelay_Callback";
  createDelay_Callback_0_(mthis) => createDelay_Callback_0(mthis);

  static createDelay_Callback_1(mthis, __arg_0) native "AudioContext_createDelay_Callback";
  createDelay_Callback_1_(mthis, __arg_0) => createDelay_Callback_1(mthis, __arg_0);

  static createDelay_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createDelay_Callback";
  createDelay_Callback_2_(mthis, __arg_0, __arg_1) => createDelay_Callback_2(mthis, __arg_0, __arg_1);

  static createDelay_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioContext_createDelay_Callback";
  createDelay_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createDelay_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createDynamicsCompressor_Callback_0(mthis) native "AudioContext_createDynamicsCompressor_Callback";
  createDynamicsCompressor_Callback_0_(mthis) => createDynamicsCompressor_Callback_0(mthis);

  static createDynamicsCompressor_Callback_1(mthis, __arg_0) native "AudioContext_createDynamicsCompressor_Callback";
  createDynamicsCompressor_Callback_1_(mthis, __arg_0) => createDynamicsCompressor_Callback_1(mthis, __arg_0);

  static createDynamicsCompressor_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createDynamicsCompressor_Callback";
  createDynamicsCompressor_Callback_2_(mthis, __arg_0, __arg_1) => createDynamicsCompressor_Callback_2(mthis, __arg_0, __arg_1);

  static createGain_Callback_0(mthis) native "AudioContext_createGain_Callback";
  createGain_Callback_0_(mthis) => createGain_Callback_0(mthis);

  static createGain_Callback_1(mthis, __arg_0) native "AudioContext_createGain_Callback";
  createGain_Callback_1_(mthis, __arg_0) => createGain_Callback_1(mthis, __arg_0);

  static createGain_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createGain_Callback";
  createGain_Callback_2_(mthis, __arg_0, __arg_1) => createGain_Callback_2(mthis, __arg_0, __arg_1);

  static createMediaElementSource_Callback_0(mthis) native "AudioContext_createMediaElementSource_Callback";
  createMediaElementSource_Callback_0_(mthis) => createMediaElementSource_Callback_0(mthis);

  static createMediaElementSource_Callback_1(mthis, __arg_0) native "AudioContext_createMediaElementSource_Callback";
  createMediaElementSource_Callback_1_(mthis, __arg_0) => createMediaElementSource_Callback_1(mthis, __arg_0);

  static createMediaElementSource_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createMediaElementSource_Callback";
  createMediaElementSource_Callback_2_(mthis, __arg_0, __arg_1) => createMediaElementSource_Callback_2(mthis, __arg_0, __arg_1);

  static createMediaElementSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioContext_createMediaElementSource_Callback";
  createMediaElementSource_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createMediaElementSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createMediaStreamDestination_Callback_0(mthis) native "AudioContext_createMediaStreamDestination_Callback";
  createMediaStreamDestination_Callback_0_(mthis) => createMediaStreamDestination_Callback_0(mthis);

  static createMediaStreamDestination_Callback_1(mthis, __arg_0) native "AudioContext_createMediaStreamDestination_Callback";
  createMediaStreamDestination_Callback_1_(mthis, __arg_0) => createMediaStreamDestination_Callback_1(mthis, __arg_0);

  static createMediaStreamDestination_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createMediaStreamDestination_Callback";
  createMediaStreamDestination_Callback_2_(mthis, __arg_0, __arg_1) => createMediaStreamDestination_Callback_2(mthis, __arg_0, __arg_1);

  static createMediaStreamSource_Callback_0(mthis) native "AudioContext_createMediaStreamSource_Callback";
  createMediaStreamSource_Callback_0_(mthis) => createMediaStreamSource_Callback_0(mthis);

  static createMediaStreamSource_Callback_1(mthis, __arg_0) native "AudioContext_createMediaStreamSource_Callback";
  createMediaStreamSource_Callback_1_(mthis, __arg_0) => createMediaStreamSource_Callback_1(mthis, __arg_0);

  static createMediaStreamSource_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createMediaStreamSource_Callback";
  createMediaStreamSource_Callback_2_(mthis, __arg_0, __arg_1) => createMediaStreamSource_Callback_2(mthis, __arg_0, __arg_1);

  static createMediaStreamSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioContext_createMediaStreamSource_Callback";
  createMediaStreamSource_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createMediaStreamSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createOscillator_Callback_0(mthis) native "AudioContext_createOscillator_Callback";
  createOscillator_Callback_0_(mthis) => createOscillator_Callback_0(mthis);

  static createOscillator_Callback_1(mthis, __arg_0) native "AudioContext_createOscillator_Callback";
  createOscillator_Callback_1_(mthis, __arg_0) => createOscillator_Callback_1(mthis, __arg_0);

  static createOscillator_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createOscillator_Callback";
  createOscillator_Callback_2_(mthis, __arg_0, __arg_1) => createOscillator_Callback_2(mthis, __arg_0, __arg_1);

  static createPanner_Callback_0(mthis) native "AudioContext_createPanner_Callback";
  createPanner_Callback_0_(mthis) => createPanner_Callback_0(mthis);

  static createPanner_Callback_1(mthis, __arg_0) native "AudioContext_createPanner_Callback";
  createPanner_Callback_1_(mthis, __arg_0) => createPanner_Callback_1(mthis, __arg_0);

  static createPanner_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createPanner_Callback";
  createPanner_Callback_2_(mthis, __arg_0, __arg_1) => createPanner_Callback_2(mthis, __arg_0, __arg_1);

  static createPeriodicWave_Callback_0(mthis) native "AudioContext_createPeriodicWave_Callback";
  createPeriodicWave_Callback_0_(mthis) => createPeriodicWave_Callback_0(mthis);

  static createPeriodicWave_Callback_1(mthis, __arg_0) native "AudioContext_createPeriodicWave_Callback";
  createPeriodicWave_Callback_1_(mthis, __arg_0) => createPeriodicWave_Callback_1(mthis, __arg_0);

  static createPeriodicWave_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createPeriodicWave_Callback";
  createPeriodicWave_Callback_2_(mthis, __arg_0, __arg_1) => createPeriodicWave_Callback_2(mthis, __arg_0, __arg_1);

  static createPeriodicWave_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioContext_createPeriodicWave_Callback";
  createPeriodicWave_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createPeriodicWave_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createPeriodicWave_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioContext_createPeriodicWave_Callback";
  createPeriodicWave_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createPeriodicWave_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createScriptProcessor_Callback_0(mthis) native "AudioContext_createScriptProcessor_Callback";
  createScriptProcessor_Callback_0_(mthis) => createScriptProcessor_Callback_0(mthis);

  static createScriptProcessor_Callback_1(mthis, __arg_0) native "AudioContext_createScriptProcessor_Callback";
  createScriptProcessor_Callback_1_(mthis, __arg_0) => createScriptProcessor_Callback_1(mthis, __arg_0);

  static createScriptProcessor_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createScriptProcessor_Callback";
  createScriptProcessor_Callback_2_(mthis, __arg_0, __arg_1) => createScriptProcessor_Callback_2(mthis, __arg_0, __arg_1);

  static createScriptProcessor_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioContext_createScriptProcessor_Callback";
  createScriptProcessor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createScriptProcessor_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createScriptProcessor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioContext_createScriptProcessor_Callback";
  createScriptProcessor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createScriptProcessor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createScriptProcessor_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioContext_createScriptProcessor_Callback";
  createScriptProcessor_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createScriptProcessor_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createWaveShaper_Callback_0(mthis) native "AudioContext_createWaveShaper_Callback";
  createWaveShaper_Callback_0_(mthis) => createWaveShaper_Callback_0(mthis);

  static createWaveShaper_Callback_1(mthis, __arg_0) native "AudioContext_createWaveShaper_Callback";
  createWaveShaper_Callback_1_(mthis, __arg_0) => createWaveShaper_Callback_1(mthis, __arg_0);

  static createWaveShaper_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_createWaveShaper_Callback";
  createWaveShaper_Callback_2_(mthis, __arg_0, __arg_1) => createWaveShaper_Callback_2(mthis, __arg_0, __arg_1);

  static currentTime_Getter(mthis) native "AudioContext_currentTime_Getter";
  currentTime_Getter_(mthis) => currentTime_Getter(mthis);

  static decodeAudioData_Callback_0(mthis) native "AudioContext_decodeAudioData_Callback";
  decodeAudioData_Callback_0_(mthis) => decodeAudioData_Callback_0(mthis);

  static decodeAudioData_Callback_1(mthis, __arg_0) native "AudioContext_decodeAudioData_Callback";
  decodeAudioData_Callback_1_(mthis, __arg_0) => decodeAudioData_Callback_1(mthis, __arg_0);

  static decodeAudioData_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_decodeAudioData_Callback";
  decodeAudioData_Callback_2_(mthis, __arg_0, __arg_1) => decodeAudioData_Callback_2(mthis, __arg_0, __arg_1);

  static decodeAudioData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioContext_decodeAudioData_Callback";
  decodeAudioData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => decodeAudioData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static decodeAudioData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioContext_decodeAudioData_Callback";
  decodeAudioData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => decodeAudioData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static decodeAudioData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioContext_decodeAudioData_Callback";
  decodeAudioData_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => decodeAudioData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static destination_Getter(mthis) native "AudioContext_destination_Getter";
  destination_Getter_(mthis) => destination_Getter(mthis);

  static listener_Getter(mthis) native "AudioContext_listener_Getter";
  listener_Getter_(mthis) => listener_Getter(mthis);

  static oncomplete_Getter(mthis) native "AudioContext_oncomplete_Getter";
  oncomplete_Getter_(mthis) => oncomplete_Getter(mthis);

  static oncomplete_Setter(mthis, __arg_0) native "AudioContext_oncomplete_Setter";
  oncomplete_Setter_(mthis, __arg_0) => oncomplete_Setter(mthis, __arg_0);

  static sampleRate_Getter(mthis) native "AudioContext_sampleRate_Getter";
  sampleRate_Getter_(mthis) => sampleRate_Getter(mthis);

  static startRendering_Callback_0(mthis) native "AudioContext_startRendering_Callback";
  startRendering_Callback_0_(mthis) => startRendering_Callback_0(mthis);

  static startRendering_Callback_1(mthis, __arg_0) native "AudioContext_startRendering_Callback";
  startRendering_Callback_1_(mthis, __arg_0) => startRendering_Callback_1(mthis, __arg_0);

  static startRendering_Callback_2(mthis, __arg_0, __arg_1) native "AudioContext_startRendering_Callback";
  startRendering_Callback_2_(mthis, __arg_0, __arg_1) => startRendering_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkAudioDestinationNode extends BlinkAudioNode {
  static final instance = new BlinkAudioDestinationNode();

  static maxChannelCount_Getter(mthis) native "AudioDestinationNode_maxChannelCount_Getter";
  maxChannelCount_Getter_(mthis) => maxChannelCount_Getter(mthis);

}

class BlinkAudioListener {
  static final instance = new BlinkAudioListener();

  static dopplerFactor_Getter(mthis) native "AudioListener_dopplerFactor_Getter";
  dopplerFactor_Getter_(mthis) => dopplerFactor_Getter(mthis);

  static dopplerFactor_Setter(mthis, __arg_0) native "AudioListener_dopplerFactor_Setter";
  dopplerFactor_Setter_(mthis, __arg_0) => dopplerFactor_Setter(mthis, __arg_0);

  static setOrientation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioListener_setOrientation_Callback";
  setOrientation_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setOrientation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setOrientation_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioListener_setOrientation_Callback";
  setOrientation_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setOrientation_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setOrientation_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "AudioListener_setOrientation_Callback";
  setOrientation_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => setOrientation_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static setOrientation_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "AudioListener_setOrientation_Callback";
  setOrientation_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => setOrientation_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static setOrientation_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "AudioListener_setOrientation_Callback";
  setOrientation_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => setOrientation_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static setPosition_Callback_1(mthis, __arg_0) native "AudioListener_setPosition_Callback";
  setPosition_Callback_1_(mthis, __arg_0) => setPosition_Callback_1(mthis, __arg_0);

  static setPosition_Callback_2(mthis, __arg_0, __arg_1) native "AudioListener_setPosition_Callback";
  setPosition_Callback_2_(mthis, __arg_0, __arg_1) => setPosition_Callback_2(mthis, __arg_0, __arg_1);

  static setPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioListener_setPosition_Callback";
  setPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioListener_setPosition_Callback";
  setPosition_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setPosition_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioListener_setPosition_Callback";
  setPosition_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setPosition_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setVelocity_Callback_1(mthis, __arg_0) native "AudioListener_setVelocity_Callback";
  setVelocity_Callback_1_(mthis, __arg_0) => setVelocity_Callback_1(mthis, __arg_0);

  static setVelocity_Callback_2(mthis, __arg_0, __arg_1) native "AudioListener_setVelocity_Callback";
  setVelocity_Callback_2_(mthis, __arg_0, __arg_1) => setVelocity_Callback_2(mthis, __arg_0, __arg_1);

  static setVelocity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioListener_setVelocity_Callback";
  setVelocity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setVelocity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setVelocity_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioListener_setVelocity_Callback";
  setVelocity_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setVelocity_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setVelocity_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioListener_setVelocity_Callback";
  setVelocity_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setVelocity_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static speedOfSound_Getter(mthis) native "AudioListener_speedOfSound_Getter";
  speedOfSound_Getter_(mthis) => speedOfSound_Getter(mthis);

  static speedOfSound_Setter(mthis, __arg_0) native "AudioListener_speedOfSound_Setter";
  speedOfSound_Setter_(mthis, __arg_0) => speedOfSound_Setter(mthis, __arg_0);

}

class BlinkAudioNode extends BlinkEventTarget {
  static final instance = new BlinkAudioNode();

  static channelCountMode_Getter(mthis) native "AudioNode_channelCountMode_Getter";
  channelCountMode_Getter_(mthis) => channelCountMode_Getter(mthis);

  static channelCountMode_Setter(mthis, __arg_0) native "AudioNode_channelCountMode_Setter";
  channelCountMode_Setter_(mthis, __arg_0) => channelCountMode_Setter(mthis, __arg_0);

  static channelCount_Getter(mthis) native "AudioNode_channelCount_Getter";
  channelCount_Getter_(mthis) => channelCount_Getter(mthis);

  static channelCount_Setter(mthis, __arg_0) native "AudioNode_channelCount_Setter";
  channelCount_Setter_(mthis, __arg_0) => channelCount_Setter(mthis, __arg_0);

  static channelInterpretation_Getter(mthis) native "AudioNode_channelInterpretation_Getter";
  channelInterpretation_Getter_(mthis) => channelInterpretation_Getter(mthis);

  static channelInterpretation_Setter(mthis, __arg_0) native "AudioNode_channelInterpretation_Setter";
  channelInterpretation_Setter_(mthis, __arg_0) => channelInterpretation_Setter(mthis, __arg_0);

  static connect_Callback_0(mthis) native "AudioNode_connect_Callback";
  connect_Callback_0_(mthis) => connect_Callback_0(mthis);

  static connect_Callback_1(mthis, __arg_0) native "AudioNode_connect_Callback";
  connect_Callback_1_(mthis, __arg_0) => connect_Callback_1(mthis, __arg_0);

  static connect_Callback_2(mthis, __arg_0, __arg_1) native "AudioNode_connect_Callback";
  connect_Callback_2_(mthis, __arg_0, __arg_1) => connect_Callback_2(mthis, __arg_0, __arg_1);

  static connect_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioNode_connect_Callback";
  connect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => connect_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static connect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioNode_connect_Callback";
  connect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => connect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static connect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioNode_connect_Callback";
  connect_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => connect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static context_Getter(mthis) native "AudioNode_context_Getter";
  context_Getter_(mthis) => context_Getter(mthis);

  static disconnect_Callback_0(mthis) native "AudioNode_disconnect_Callback";
  disconnect_Callback_0_(mthis) => disconnect_Callback_0(mthis);

  static disconnect_Callback_1(mthis, __arg_0) native "AudioNode_disconnect_Callback";
  disconnect_Callback_1_(mthis, __arg_0) => disconnect_Callback_1(mthis, __arg_0);

  static disconnect_Callback_2(mthis, __arg_0, __arg_1) native "AudioNode_disconnect_Callback";
  disconnect_Callback_2_(mthis, __arg_0, __arg_1) => disconnect_Callback_2(mthis, __arg_0, __arg_1);

  static disconnect_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioNode_disconnect_Callback";
  disconnect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => disconnect_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static numberOfInputs_Getter(mthis) native "AudioNode_numberOfInputs_Getter";
  numberOfInputs_Getter_(mthis) => numberOfInputs_Getter(mthis);

  static numberOfOutputs_Getter(mthis) native "AudioNode_numberOfOutputs_Getter";
  numberOfOutputs_Getter_(mthis) => numberOfOutputs_Getter(mthis);

}

class BlinkAudioParam {
  static final instance = new BlinkAudioParam();

  static cancelScheduledValues_Callback_0(mthis) native "AudioParam_cancelScheduledValues_Callback";
  cancelScheduledValues_Callback_0_(mthis) => cancelScheduledValues_Callback_0(mthis);

  static cancelScheduledValues_Callback_1(mthis, __arg_0) native "AudioParam_cancelScheduledValues_Callback";
  cancelScheduledValues_Callback_1_(mthis, __arg_0) => cancelScheduledValues_Callback_1(mthis, __arg_0);

  static cancelScheduledValues_Callback_2(mthis, __arg_0, __arg_1) native "AudioParam_cancelScheduledValues_Callback";
  cancelScheduledValues_Callback_2_(mthis, __arg_0, __arg_1) => cancelScheduledValues_Callback_2(mthis, __arg_0, __arg_1);

  static cancelScheduledValues_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioParam_cancelScheduledValues_Callback";
  cancelScheduledValues_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => cancelScheduledValues_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static defaultValue_Getter(mthis) native "AudioParam_defaultValue_Getter";
  defaultValue_Getter_(mthis) => defaultValue_Getter(mthis);

  static exponentialRampToValueAtTime_Callback_0(mthis) native "AudioParam_exponentialRampToValueAtTime_Callback";
  exponentialRampToValueAtTime_Callback_0_(mthis) => exponentialRampToValueAtTime_Callback_0(mthis);

  static exponentialRampToValueAtTime_Callback_1(mthis, __arg_0) native "AudioParam_exponentialRampToValueAtTime_Callback";
  exponentialRampToValueAtTime_Callback_1_(mthis, __arg_0) => exponentialRampToValueAtTime_Callback_1(mthis, __arg_0);

  static exponentialRampToValueAtTime_Callback_2(mthis, __arg_0, __arg_1) native "AudioParam_exponentialRampToValueAtTime_Callback";
  exponentialRampToValueAtTime_Callback_2_(mthis, __arg_0, __arg_1) => exponentialRampToValueAtTime_Callback_2(mthis, __arg_0, __arg_1);

  static exponentialRampToValueAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioParam_exponentialRampToValueAtTime_Callback";
  exponentialRampToValueAtTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => exponentialRampToValueAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static exponentialRampToValueAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioParam_exponentialRampToValueAtTime_Callback";
  exponentialRampToValueAtTime_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => exponentialRampToValueAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static linearRampToValueAtTime_Callback_0(mthis) native "AudioParam_linearRampToValueAtTime_Callback";
  linearRampToValueAtTime_Callback_0_(mthis) => linearRampToValueAtTime_Callback_0(mthis);

  static linearRampToValueAtTime_Callback_1(mthis, __arg_0) native "AudioParam_linearRampToValueAtTime_Callback";
  linearRampToValueAtTime_Callback_1_(mthis, __arg_0) => linearRampToValueAtTime_Callback_1(mthis, __arg_0);

  static linearRampToValueAtTime_Callback_2(mthis, __arg_0, __arg_1) native "AudioParam_linearRampToValueAtTime_Callback";
  linearRampToValueAtTime_Callback_2_(mthis, __arg_0, __arg_1) => linearRampToValueAtTime_Callback_2(mthis, __arg_0, __arg_1);

  static linearRampToValueAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioParam_linearRampToValueAtTime_Callback";
  linearRampToValueAtTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => linearRampToValueAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static linearRampToValueAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioParam_linearRampToValueAtTime_Callback";
  linearRampToValueAtTime_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => linearRampToValueAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setTargetAtTime_Callback_1(mthis, __arg_0) native "AudioParam_setTargetAtTime_Callback";
  setTargetAtTime_Callback_1_(mthis, __arg_0) => setTargetAtTime_Callback_1(mthis, __arg_0);

  static setTargetAtTime_Callback_2(mthis, __arg_0, __arg_1) native "AudioParam_setTargetAtTime_Callback";
  setTargetAtTime_Callback_2_(mthis, __arg_0, __arg_1) => setTargetAtTime_Callback_2(mthis, __arg_0, __arg_1);

  static setTargetAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioParam_setTargetAtTime_Callback";
  setTargetAtTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setTargetAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setTargetAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioParam_setTargetAtTime_Callback";
  setTargetAtTime_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setTargetAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setTargetAtTime_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioParam_setTargetAtTime_Callback";
  setTargetAtTime_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setTargetAtTime_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setValueAtTime_Callback_0(mthis) native "AudioParam_setValueAtTime_Callback";
  setValueAtTime_Callback_0_(mthis) => setValueAtTime_Callback_0(mthis);

  static setValueAtTime_Callback_1(mthis, __arg_0) native "AudioParam_setValueAtTime_Callback";
  setValueAtTime_Callback_1_(mthis, __arg_0) => setValueAtTime_Callback_1(mthis, __arg_0);

  static setValueAtTime_Callback_2(mthis, __arg_0, __arg_1) native "AudioParam_setValueAtTime_Callback";
  setValueAtTime_Callback_2_(mthis, __arg_0, __arg_1) => setValueAtTime_Callback_2(mthis, __arg_0, __arg_1);

  static setValueAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioParam_setValueAtTime_Callback";
  setValueAtTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setValueAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setValueAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioParam_setValueAtTime_Callback";
  setValueAtTime_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setValueAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setValueCurveAtTime_Callback_1(mthis, __arg_0) native "AudioParam_setValueCurveAtTime_Callback";
  setValueCurveAtTime_Callback_1_(mthis, __arg_0) => setValueCurveAtTime_Callback_1(mthis, __arg_0);

  static setValueCurveAtTime_Callback_2(mthis, __arg_0, __arg_1) native "AudioParam_setValueCurveAtTime_Callback";
  setValueCurveAtTime_Callback_2_(mthis, __arg_0, __arg_1) => setValueCurveAtTime_Callback_2(mthis, __arg_0, __arg_1);

  static setValueCurveAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioParam_setValueCurveAtTime_Callback";
  setValueCurveAtTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setValueCurveAtTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setValueCurveAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "AudioParam_setValueCurveAtTime_Callback";
  setValueCurveAtTime_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setValueCurveAtTime_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setValueCurveAtTime_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "AudioParam_setValueCurveAtTime_Callback";
  setValueCurveAtTime_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setValueCurveAtTime_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static value_Getter(mthis) native "AudioParam_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "AudioParam_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkAudioProcessingEvent extends BlinkEvent {
  static final instance = new BlinkAudioProcessingEvent();

  static inputBuffer_Getter(mthis) native "AudioProcessingEvent_inputBuffer_Getter";
  inputBuffer_Getter_(mthis) => inputBuffer_Getter(mthis);

  static outputBuffer_Getter(mthis) native "AudioProcessingEvent_outputBuffer_Getter";
  outputBuffer_Getter_(mthis) => outputBuffer_Getter(mthis);

  static playbackTime_Getter(mthis) native "AudioProcessingEvent_playbackTime_Getter";
  playbackTime_Getter_(mthis) => playbackTime_Getter(mthis);

}

class BlinkAudioSourceNode extends BlinkAudioNode {
  static final instance = new BlinkAudioSourceNode();

}

class BlinkAudioTrack {
  static final instance = new BlinkAudioTrack();

  static enabled_Getter(mthis) native "AudioTrack_enabled_Getter";
  enabled_Getter_(mthis) => enabled_Getter(mthis);

  static enabled_Setter(mthis, __arg_0) native "AudioTrack_enabled_Setter";
  enabled_Setter_(mthis, __arg_0) => enabled_Setter(mthis, __arg_0);

  static id_Getter(mthis) native "AudioTrack_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static kind_Getter(mthis) native "AudioTrack_kind_Getter";
  kind_Getter_(mthis) => kind_Getter(mthis);

  static label_Getter(mthis) native "AudioTrack_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static language_Getter(mthis) native "AudioTrack_language_Getter";
  language_Getter_(mthis) => language_Getter(mthis);

}

class BlinkAudioTrackList extends BlinkEventTarget {
  static final instance = new BlinkAudioTrackList();

  static $__getter___Callback_1(mthis, __arg_0) native "AudioTrackList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static getTrackById_Callback_0(mthis) native "AudioTrackList_getTrackById_Callback";
  getTrackById_Callback_0_(mthis) => getTrackById_Callback_0(mthis);

  static getTrackById_Callback_1(mthis, __arg_0) native "AudioTrackList_getTrackById_Callback";
  getTrackById_Callback_1_(mthis, __arg_0) => getTrackById_Callback_1(mthis, __arg_0);

  static getTrackById_Callback_2(mthis, __arg_0, __arg_1) native "AudioTrackList_getTrackById_Callback";
  getTrackById_Callback_2_(mthis, __arg_0, __arg_1) => getTrackById_Callback_2(mthis, __arg_0, __arg_1);

  static getTrackById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "AudioTrackList_getTrackById_Callback";
  getTrackById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getTrackById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "AudioTrackList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static onaddtrack_Getter(mthis) native "AudioTrackList_onaddtrack_Getter";
  onaddtrack_Getter_(mthis) => onaddtrack_Getter(mthis);

  static onaddtrack_Setter(mthis, __arg_0) native "AudioTrackList_onaddtrack_Setter";
  onaddtrack_Setter_(mthis, __arg_0) => onaddtrack_Setter(mthis, __arg_0);

  static onchange_Getter(mthis) native "AudioTrackList_onchange_Getter";
  onchange_Getter_(mthis) => onchange_Getter(mthis);

  static onchange_Setter(mthis, __arg_0) native "AudioTrackList_onchange_Setter";
  onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);

  static onremovetrack_Getter(mthis) native "AudioTrackList_onremovetrack_Getter";
  onremovetrack_Getter_(mthis) => onremovetrack_Getter(mthis);

  static onremovetrack_Setter(mthis, __arg_0) native "AudioTrackList_onremovetrack_Setter";
  onremovetrack_Setter_(mthis, __arg_0) => onremovetrack_Setter(mthis, __arg_0);

}

class BlinkAutocompleteErrorEvent extends BlinkEvent {
  static final instance = new BlinkAutocompleteErrorEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "AutocompleteErrorEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static reason_Getter(mthis) native "AutocompleteErrorEvent_reason_Getter";
  reason_Getter_(mthis) => reason_Getter(mthis);

}

class BlinkBarProp {
  static final instance = new BlinkBarProp();

  static visible_Getter(mthis) native "BarProp_visible_Getter";
  visible_Getter_(mthis) => visible_Getter(mthis);

}

class BlinkBatteryManager extends BlinkEventTarget {
  static final instance = new BlinkBatteryManager();

  static chargingTime_Getter(mthis) native "BatteryManager_chargingTime_Getter";
  chargingTime_Getter_(mthis) => chargingTime_Getter(mthis);

  static charging_Getter(mthis) native "BatteryManager_charging_Getter";
  charging_Getter_(mthis) => charging_Getter(mthis);

  static dischargingTime_Getter(mthis) native "BatteryManager_dischargingTime_Getter";
  dischargingTime_Getter_(mthis) => dischargingTime_Getter(mthis);

  static level_Getter(mthis) native "BatteryManager_level_Getter";
  level_Getter_(mthis) => level_Getter(mthis);

  static onchargingchange_Getter(mthis) native "BatteryManager_onchargingchange_Getter";
  onchargingchange_Getter_(mthis) => onchargingchange_Getter(mthis);

  static onchargingchange_Setter(mthis, __arg_0) native "BatteryManager_onchargingchange_Setter";
  onchargingchange_Setter_(mthis, __arg_0) => onchargingchange_Setter(mthis, __arg_0);

  static onchargingtimechange_Getter(mthis) native "BatteryManager_onchargingtimechange_Getter";
  onchargingtimechange_Getter_(mthis) => onchargingtimechange_Getter(mthis);

  static onchargingtimechange_Setter(mthis, __arg_0) native "BatteryManager_onchargingtimechange_Setter";
  onchargingtimechange_Setter_(mthis, __arg_0) => onchargingtimechange_Setter(mthis, __arg_0);

  static ondischargingtimechange_Getter(mthis) native "BatteryManager_ondischargingtimechange_Getter";
  ondischargingtimechange_Getter_(mthis) => ondischargingtimechange_Getter(mthis);

  static ondischargingtimechange_Setter(mthis, __arg_0) native "BatteryManager_ondischargingtimechange_Setter";
  ondischargingtimechange_Setter_(mthis, __arg_0) => ondischargingtimechange_Setter(mthis, __arg_0);

  static onlevelchange_Getter(mthis) native "BatteryManager_onlevelchange_Getter";
  onlevelchange_Getter_(mthis) => onlevelchange_Getter(mthis);

  static onlevelchange_Setter(mthis, __arg_0) native "BatteryManager_onlevelchange_Setter";
  onlevelchange_Setter_(mthis, __arg_0) => onlevelchange_Setter(mthis, __arg_0);

}

class BlinkBeforeUnloadEvent extends BlinkEvent {
  static final instance = new BlinkBeforeUnloadEvent();

  static returnValue_Getter(mthis) native "BeforeUnloadEvent_returnValue_Getter";
  returnValue_Getter_(mthis) => returnValue_Getter(mthis);

  static returnValue_Setter(mthis, __arg_0) native "BeforeUnloadEvent_returnValue_Setter";
  returnValue_Setter_(mthis, __arg_0) => returnValue_Setter(mthis, __arg_0);

}

class BlinkBiquadFilterNode extends BlinkAudioNode {
  static final instance = new BlinkBiquadFilterNode();

  static Q_Getter(mthis) native "BiquadFilterNode_Q_Getter";
  Q_Getter_(mthis) => Q_Getter(mthis);

  static detune_Getter(mthis) native "BiquadFilterNode_detune_Getter";
  detune_Getter_(mthis) => detune_Getter(mthis);

  static frequency_Getter(mthis) native "BiquadFilterNode_frequency_Getter";
  frequency_Getter_(mthis) => frequency_Getter(mthis);

  static gain_Getter(mthis) native "BiquadFilterNode_gain_Getter";
  gain_Getter_(mthis) => gain_Getter(mthis);

  static getFrequencyResponse_Callback_1(mthis, __arg_0) native "BiquadFilterNode_getFrequencyResponse_Callback";
  getFrequencyResponse_Callback_1_(mthis, __arg_0) => getFrequencyResponse_Callback_1(mthis, __arg_0);

  static getFrequencyResponse_Callback_2(mthis, __arg_0, __arg_1) native "BiquadFilterNode_getFrequencyResponse_Callback";
  getFrequencyResponse_Callback_2_(mthis, __arg_0, __arg_1) => getFrequencyResponse_Callback_2(mthis, __arg_0, __arg_1);

  static getFrequencyResponse_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "BiquadFilterNode_getFrequencyResponse_Callback";
  getFrequencyResponse_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getFrequencyResponse_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getFrequencyResponse_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "BiquadFilterNode_getFrequencyResponse_Callback";
  getFrequencyResponse_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getFrequencyResponse_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getFrequencyResponse_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "BiquadFilterNode_getFrequencyResponse_Callback";
  getFrequencyResponse_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => getFrequencyResponse_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static type_Getter(mthis) native "BiquadFilterNode_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "BiquadFilterNode_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkBlob {
  static final instance = new BlinkBlob();

  static close_Callback_0(mthis) native "Blob_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "Blob_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "Blob_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "Blob_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Blob_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Blob_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Blob_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "Blob_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static size_Getter(mthis) native "Blob_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

  static slice_Callback_0(mthis) native "Blob_slice_Callback";
  slice_Callback_0_(mthis) => slice_Callback_0(mthis);

  static slice_Callback_1(mthis, __arg_0) native "Blob_slice_Callback";
  slice_Callback_1_(mthis, __arg_0) => slice_Callback_1(mthis, __arg_0);

  static slice_Callback_2(mthis, __arg_0, __arg_1) native "Blob_slice_Callback";
  slice_Callback_2_(mthis, __arg_0, __arg_1) => slice_Callback_2(mthis, __arg_0, __arg_1);

  static slice_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Blob_slice_Callback";
  slice_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => slice_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static slice_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Blob_slice_Callback";
  slice_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => slice_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static slice_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Blob_slice_Callback";
  slice_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => slice_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static type_Getter(mthis) native "Blob_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkBody {
  static final instance = new BlinkBody();

  static arrayBuffer_Callback_0(mthis) native "Body_arrayBuffer_Callback";
  arrayBuffer_Callback_0_(mthis) => arrayBuffer_Callback_0(mthis);

  static arrayBuffer_Callback_1(mthis, __arg_0) native "Body_arrayBuffer_Callback";
  arrayBuffer_Callback_1_(mthis, __arg_0) => arrayBuffer_Callback_1(mthis, __arg_0);

  static arrayBuffer_Callback_2(mthis, __arg_0, __arg_1) native "Body_arrayBuffer_Callback";
  arrayBuffer_Callback_2_(mthis, __arg_0, __arg_1) => arrayBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static blob_Callback_0(mthis) native "Body_blob_Callback";
  blob_Callback_0_(mthis) => blob_Callback_0(mthis);

  static blob_Callback_1(mthis, __arg_0) native "Body_blob_Callback";
  blob_Callback_1_(mthis, __arg_0) => blob_Callback_1(mthis, __arg_0);

  static blob_Callback_2(mthis, __arg_0, __arg_1) native "Body_blob_Callback";
  blob_Callback_2_(mthis, __arg_0, __arg_1) => blob_Callback_2(mthis, __arg_0, __arg_1);

  static bodyUsed_Getter(mthis) native "Body_bodyUsed_Getter";
  bodyUsed_Getter_(mthis) => bodyUsed_Getter(mthis);

  static json_Callback_0(mthis) native "Body_json_Callback";
  json_Callback_0_(mthis) => json_Callback_0(mthis);

  static json_Callback_1(mthis, __arg_0) native "Body_json_Callback";
  json_Callback_1_(mthis, __arg_0) => json_Callback_1(mthis, __arg_0);

  static json_Callback_2(mthis, __arg_0, __arg_1) native "Body_json_Callback";
  json_Callback_2_(mthis, __arg_0, __arg_1) => json_Callback_2(mthis, __arg_0, __arg_1);

  static text_Callback_0(mthis) native "Body_text_Callback";
  text_Callback_0_(mthis) => text_Callback_0(mthis);

  static text_Callback_1(mthis, __arg_0) native "Body_text_Callback";
  text_Callback_1_(mthis, __arg_0) => text_Callback_1(mthis, __arg_0);

  static text_Callback_2(mthis, __arg_0, __arg_1) native "Body_text_Callback";
  text_Callback_2_(mthis, __arg_0, __arg_1) => text_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkCDATASection extends BlinkText {
  static final instance = new BlinkCDATASection();

}

class BlinkCSS {
  static final instance = new BlinkCSS();

  static supports_Callback_0(mthis) native "CSS_supports_Callback";
  supports_Callback_0_(mthis) => supports_Callback_0(mthis);

  static supports_Callback_1(mthis, __arg_0) native "CSS_supports_Callback";
  supports_Callback_1_(mthis, __arg_0) => supports_Callback_1(mthis, __arg_0);

  static supports_Callback_2(mthis, __arg_0, __arg_1) native "CSS_supports_Callback";
  supports_Callback_2_(mthis, __arg_0, __arg_1) => supports_Callback_2(mthis, __arg_0, __arg_1);

  static supports_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSS_supports_Callback";
  supports_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => supports_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static supports_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CSS_supports_Callback";
  supports_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => supports_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkCSSCharsetRule extends BlinkCSSRule {
  static final instance = new BlinkCSSCharsetRule();

  static encoding_Getter(mthis) native "CSSCharsetRule_encoding_Getter";
  encoding_Getter_(mthis) => encoding_Getter(mthis);

  static encoding_Setter(mthis, __arg_0) native "CSSCharsetRule_encoding_Setter";
  encoding_Setter_(mthis, __arg_0) => encoding_Setter(mthis, __arg_0);

}

class BlinkCSSFontFaceRule extends BlinkCSSRule {
  static final instance = new BlinkCSSFontFaceRule();

  static style_Getter(mthis) native "CSSFontFaceRule_style_Getter";
  style_Getter_(mthis) => style_Getter(mthis);

}

class BlinkCSSImportRule extends BlinkCSSRule {
  static final instance = new BlinkCSSImportRule();

  static href_Getter(mthis) native "CSSImportRule_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static media_Getter(mthis) native "CSSImportRule_media_Getter";
  media_Getter_(mthis) => media_Getter(mthis);

  static styleSheet_Getter(mthis) native "CSSImportRule_styleSheet_Getter";
  styleSheet_Getter_(mthis) => styleSheet_Getter(mthis);

}

class BlinkCSSKeyframeRule extends BlinkCSSRule {
  static final instance = new BlinkCSSKeyframeRule();

  static keyText_Getter(mthis) native "CSSKeyframeRule_keyText_Getter";
  keyText_Getter_(mthis) => keyText_Getter(mthis);

  static keyText_Setter(mthis, __arg_0) native "CSSKeyframeRule_keyText_Setter";
  keyText_Setter_(mthis, __arg_0) => keyText_Setter(mthis, __arg_0);

  static style_Getter(mthis) native "CSSKeyframeRule_style_Getter";
  style_Getter_(mthis) => style_Getter(mthis);

}

class BlinkCSSKeyframesRule extends BlinkCSSRule {
  static final instance = new BlinkCSSKeyframesRule();

  static $__getter___Callback_1(mthis, __arg_0) native "CSSKeyframesRule___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static cssRules_Getter(mthis) native "CSSKeyframesRule_cssRules_Getter";
  cssRules_Getter_(mthis) => cssRules_Getter(mthis);

  static deleteRule_Callback_0(mthis) native "CSSKeyframesRule_deleteRule_Callback";
  deleteRule_Callback_0_(mthis) => deleteRule_Callback_0(mthis);

  static deleteRule_Callback_1(mthis, __arg_0) native "CSSKeyframesRule_deleteRule_Callback";
  deleteRule_Callback_1_(mthis, __arg_0) => deleteRule_Callback_1(mthis, __arg_0);

  static deleteRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSKeyframesRule_deleteRule_Callback";
  deleteRule_Callback_2_(mthis, __arg_0, __arg_1) => deleteRule_Callback_2(mthis, __arg_0, __arg_1);

  static deleteRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSKeyframesRule_deleteRule_Callback";
  deleteRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static findRule_Callback_0(mthis) native "CSSKeyframesRule_findRule_Callback";
  findRule_Callback_0_(mthis) => findRule_Callback_0(mthis);

  static findRule_Callback_1(mthis, __arg_0) native "CSSKeyframesRule_findRule_Callback";
  findRule_Callback_1_(mthis, __arg_0) => findRule_Callback_1(mthis, __arg_0);

  static findRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSKeyframesRule_findRule_Callback";
  findRule_Callback_2_(mthis, __arg_0, __arg_1) => findRule_Callback_2(mthis, __arg_0, __arg_1);

  static findRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSKeyframesRule_findRule_Callback";
  findRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => findRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertRule_Callback_0(mthis) native "CSSKeyframesRule_insertRule_Callback";
  insertRule_Callback_0_(mthis) => insertRule_Callback_0(mthis);

  static insertRule_Callback_1(mthis, __arg_0) native "CSSKeyframesRule_insertRule_Callback";
  insertRule_Callback_1_(mthis, __arg_0) => insertRule_Callback_1(mthis, __arg_0);

  static insertRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSKeyframesRule_insertRule_Callback";
  insertRule_Callback_2_(mthis, __arg_0, __arg_1) => insertRule_Callback_2(mthis, __arg_0, __arg_1);

  static insertRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSKeyframesRule_insertRule_Callback";
  insertRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static name_Getter(mthis) native "CSSKeyframesRule_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "CSSKeyframesRule_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

}

class BlinkCSSMediaRule extends BlinkCSSRule {
  static final instance = new BlinkCSSMediaRule();

  static cssRules_Getter(mthis) native "CSSMediaRule_cssRules_Getter";
  cssRules_Getter_(mthis) => cssRules_Getter(mthis);

  static deleteRule_Callback_0(mthis) native "CSSMediaRule_deleteRule_Callback";
  deleteRule_Callback_0_(mthis) => deleteRule_Callback_0(mthis);

  static deleteRule_Callback_1(mthis, __arg_0) native "CSSMediaRule_deleteRule_Callback";
  deleteRule_Callback_1_(mthis, __arg_0) => deleteRule_Callback_1(mthis, __arg_0);

  static deleteRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSMediaRule_deleteRule_Callback";
  deleteRule_Callback_2_(mthis, __arg_0, __arg_1) => deleteRule_Callback_2(mthis, __arg_0, __arg_1);

  static deleteRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSMediaRule_deleteRule_Callback";
  deleteRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertRule_Callback_0(mthis) native "CSSMediaRule_insertRule_Callback";
  insertRule_Callback_0_(mthis) => insertRule_Callback_0(mthis);

  static insertRule_Callback_1(mthis, __arg_0) native "CSSMediaRule_insertRule_Callback";
  insertRule_Callback_1_(mthis, __arg_0) => insertRule_Callback_1(mthis, __arg_0);

  static insertRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSMediaRule_insertRule_Callback";
  insertRule_Callback_2_(mthis, __arg_0, __arg_1) => insertRule_Callback_2(mthis, __arg_0, __arg_1);

  static insertRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSMediaRule_insertRule_Callback";
  insertRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertRule_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CSSMediaRule_insertRule_Callback";
  insertRule_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertRule_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static media_Getter(mthis) native "CSSMediaRule_media_Getter";
  media_Getter_(mthis) => media_Getter(mthis);

}

class BlinkCSSPageRule extends BlinkCSSRule {
  static final instance = new BlinkCSSPageRule();

  static selectorText_Getter(mthis) native "CSSPageRule_selectorText_Getter";
  selectorText_Getter_(mthis) => selectorText_Getter(mthis);

  static selectorText_Setter(mthis, __arg_0) native "CSSPageRule_selectorText_Setter";
  selectorText_Setter_(mthis, __arg_0) => selectorText_Setter(mthis, __arg_0);

  static style_Getter(mthis) native "CSSPageRule_style_Getter";
  style_Getter_(mthis) => style_Getter(mthis);

}

class BlinkCSSPrimitiveValue extends BlinkCSSValue {
  static final instance = new BlinkCSSPrimitiveValue();

  static getCounterValue_Callback_0(mthis) native "CSSPrimitiveValue_getCounterValue_Callback";
  getCounterValue_Callback_0_(mthis) => getCounterValue_Callback_0(mthis);

  static getCounterValue_Callback_1(mthis, __arg_0) native "CSSPrimitiveValue_getCounterValue_Callback";
  getCounterValue_Callback_1_(mthis, __arg_0) => getCounterValue_Callback_1(mthis, __arg_0);

  static getCounterValue_Callback_2(mthis, __arg_0, __arg_1) native "CSSPrimitiveValue_getCounterValue_Callback";
  getCounterValue_Callback_2_(mthis, __arg_0, __arg_1) => getCounterValue_Callback_2(mthis, __arg_0, __arg_1);

  static getFloatValue_Callback_0(mthis) native "CSSPrimitiveValue_getFloatValue_Callback";
  getFloatValue_Callback_0_(mthis) => getFloatValue_Callback_0(mthis);

  static getFloatValue_Callback_1(mthis, __arg_0) native "CSSPrimitiveValue_getFloatValue_Callback";
  getFloatValue_Callback_1_(mthis, __arg_0) => getFloatValue_Callback_1(mthis, __arg_0);

  static getFloatValue_Callback_2(mthis, __arg_0, __arg_1) native "CSSPrimitiveValue_getFloatValue_Callback";
  getFloatValue_Callback_2_(mthis, __arg_0, __arg_1) => getFloatValue_Callback_2(mthis, __arg_0, __arg_1);

  static getFloatValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSPrimitiveValue_getFloatValue_Callback";
  getFloatValue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getFloatValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getRGBColorValue_Callback_0(mthis) native "CSSPrimitiveValue_getRGBColorValue_Callback";
  getRGBColorValue_Callback_0_(mthis) => getRGBColorValue_Callback_0(mthis);

  static getRGBColorValue_Callback_1(mthis, __arg_0) native "CSSPrimitiveValue_getRGBColorValue_Callback";
  getRGBColorValue_Callback_1_(mthis, __arg_0) => getRGBColorValue_Callback_1(mthis, __arg_0);

  static getRGBColorValue_Callback_2(mthis, __arg_0, __arg_1) native "CSSPrimitiveValue_getRGBColorValue_Callback";
  getRGBColorValue_Callback_2_(mthis, __arg_0, __arg_1) => getRGBColorValue_Callback_2(mthis, __arg_0, __arg_1);

  static getRectValue_Callback_0(mthis) native "CSSPrimitiveValue_getRectValue_Callback";
  getRectValue_Callback_0_(mthis) => getRectValue_Callback_0(mthis);

  static getRectValue_Callback_1(mthis, __arg_0) native "CSSPrimitiveValue_getRectValue_Callback";
  getRectValue_Callback_1_(mthis, __arg_0) => getRectValue_Callback_1(mthis, __arg_0);

  static getRectValue_Callback_2(mthis, __arg_0, __arg_1) native "CSSPrimitiveValue_getRectValue_Callback";
  getRectValue_Callback_2_(mthis, __arg_0, __arg_1) => getRectValue_Callback_2(mthis, __arg_0, __arg_1);

  static getStringValue_Callback_0(mthis) native "CSSPrimitiveValue_getStringValue_Callback";
  getStringValue_Callback_0_(mthis) => getStringValue_Callback_0(mthis);

  static getStringValue_Callback_1(mthis, __arg_0) native "CSSPrimitiveValue_getStringValue_Callback";
  getStringValue_Callback_1_(mthis, __arg_0) => getStringValue_Callback_1(mthis, __arg_0);

  static getStringValue_Callback_2(mthis, __arg_0, __arg_1) native "CSSPrimitiveValue_getStringValue_Callback";
  getStringValue_Callback_2_(mthis, __arg_0, __arg_1) => getStringValue_Callback_2(mthis, __arg_0, __arg_1);

  static primitiveType_Getter(mthis) native "CSSPrimitiveValue_primitiveType_Getter";
  primitiveType_Getter_(mthis) => primitiveType_Getter(mthis);

  static setFloatValue_Callback_0(mthis) native "CSSPrimitiveValue_setFloatValue_Callback";
  setFloatValue_Callback_0_(mthis) => setFloatValue_Callback_0(mthis);

  static setFloatValue_Callback_1(mthis, __arg_0) native "CSSPrimitiveValue_setFloatValue_Callback";
  setFloatValue_Callback_1_(mthis, __arg_0) => setFloatValue_Callback_1(mthis, __arg_0);

  static setFloatValue_Callback_2(mthis, __arg_0, __arg_1) native "CSSPrimitiveValue_setFloatValue_Callback";
  setFloatValue_Callback_2_(mthis, __arg_0, __arg_1) => setFloatValue_Callback_2(mthis, __arg_0, __arg_1);

  static setFloatValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSPrimitiveValue_setFloatValue_Callback";
  setFloatValue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setFloatValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setFloatValue_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CSSPrimitiveValue_setFloatValue_Callback";
  setFloatValue_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setFloatValue_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setStringValue_Callback_0(mthis) native "CSSPrimitiveValue_setStringValue_Callback";
  setStringValue_Callback_0_(mthis) => setStringValue_Callback_0(mthis);

  static setStringValue_Callback_1(mthis, __arg_0) native "CSSPrimitiveValue_setStringValue_Callback";
  setStringValue_Callback_1_(mthis, __arg_0) => setStringValue_Callback_1(mthis, __arg_0);

  static setStringValue_Callback_2(mthis, __arg_0, __arg_1) native "CSSPrimitiveValue_setStringValue_Callback";
  setStringValue_Callback_2_(mthis, __arg_0, __arg_1) => setStringValue_Callback_2(mthis, __arg_0, __arg_1);

  static setStringValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSPrimitiveValue_setStringValue_Callback";
  setStringValue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setStringValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setStringValue_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CSSPrimitiveValue_setStringValue_Callback";
  setStringValue_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setStringValue_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkCSSRule {
  static final instance = new BlinkCSSRule();

  static cssText_Getter(mthis) native "CSSRule_cssText_Getter";
  cssText_Getter_(mthis) => cssText_Getter(mthis);

  static cssText_Setter(mthis, __arg_0) native "CSSRule_cssText_Setter";
  cssText_Setter_(mthis, __arg_0) => cssText_Setter(mthis, __arg_0);

  static parentRule_Getter(mthis) native "CSSRule_parentRule_Getter";
  parentRule_Getter_(mthis) => parentRule_Getter(mthis);

  static parentStyleSheet_Getter(mthis) native "CSSRule_parentStyleSheet_Getter";
  parentStyleSheet_Getter_(mthis) => parentStyleSheet_Getter(mthis);

  static type_Getter(mthis) native "CSSRule_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkCSSRuleList {
  static final instance = new BlinkCSSRuleList();

  static $__getter___Callback_1(mthis, __arg_0) native "CSSRuleList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "CSSRuleList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "CSSRuleList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "CSSRuleList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSRuleList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "CSSRuleList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkCSSStyleDeclaration {
  static final instance = new BlinkCSSStyleDeclaration();

  static $__getter___Callback_1(mthis, __arg_0) native "CSSStyleDeclaration___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__propertyQuery___Callback_1(mthis, __arg_0) native "CSSStyleDeclaration___propertyQuery___Callback";
  $__propertyQuery___Callback_1_(mthis, __arg_0) => $__propertyQuery___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleDeclaration___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static cssText_Getter(mthis) native "CSSStyleDeclaration_cssText_Getter";
  cssText_Getter_(mthis) => cssText_Getter(mthis);

  static cssText_Setter(mthis, __arg_0) native "CSSStyleDeclaration_cssText_Setter";
  cssText_Setter_(mthis, __arg_0) => cssText_Setter(mthis, __arg_0);

  static getPropertyPriority_Callback_0(mthis) native "CSSStyleDeclaration_getPropertyPriority_Callback";
  getPropertyPriority_Callback_0_(mthis) => getPropertyPriority_Callback_0(mthis);

  static getPropertyPriority_Callback_1(mthis, __arg_0) native "CSSStyleDeclaration_getPropertyPriority_Callback";
  getPropertyPriority_Callback_1_(mthis, __arg_0) => getPropertyPriority_Callback_1(mthis, __arg_0);

  static getPropertyPriority_Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleDeclaration_getPropertyPriority_Callback";
  getPropertyPriority_Callback_2_(mthis, __arg_0, __arg_1) => getPropertyPriority_Callback_2(mthis, __arg_0, __arg_1);

  static getPropertyPriority_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSStyleDeclaration_getPropertyPriority_Callback";
  getPropertyPriority_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getPropertyPriority_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getPropertyValue_Callback_0(mthis) native "CSSStyleDeclaration_getPropertyValue_Callback";
  getPropertyValue_Callback_0_(mthis) => getPropertyValue_Callback_0(mthis);

  static getPropertyValue_Callback_1(mthis, __arg_0) native "CSSStyleDeclaration_getPropertyValue_Callback";
  getPropertyValue_Callback_1_(mthis, __arg_0) => getPropertyValue_Callback_1(mthis, __arg_0);

  static getPropertyValue_Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleDeclaration_getPropertyValue_Callback";
  getPropertyValue_Callback_2_(mthis, __arg_0, __arg_1) => getPropertyValue_Callback_2(mthis, __arg_0, __arg_1);

  static getPropertyValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSStyleDeclaration_getPropertyValue_Callback";
  getPropertyValue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getPropertyValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static item_Callback_0(mthis) native "CSSStyleDeclaration_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "CSSStyleDeclaration_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleDeclaration_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSStyleDeclaration_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "CSSStyleDeclaration_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static parentRule_Getter(mthis) native "CSSStyleDeclaration_parentRule_Getter";
  parentRule_Getter_(mthis) => parentRule_Getter(mthis);

  static removeProperty_Callback_0(mthis) native "CSSStyleDeclaration_removeProperty_Callback";
  removeProperty_Callback_0_(mthis) => removeProperty_Callback_0(mthis);

  static removeProperty_Callback_1(mthis, __arg_0) native "CSSStyleDeclaration_removeProperty_Callback";
  removeProperty_Callback_1_(mthis, __arg_0) => removeProperty_Callback_1(mthis, __arg_0);

  static removeProperty_Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleDeclaration_removeProperty_Callback";
  removeProperty_Callback_2_(mthis, __arg_0, __arg_1) => removeProperty_Callback_2(mthis, __arg_0, __arg_1);

  static removeProperty_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSStyleDeclaration_removeProperty_Callback";
  removeProperty_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeProperty_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setProperty_Callback_0(mthis) native "CSSStyleDeclaration_setProperty_Callback";
  setProperty_Callback_0_(mthis) => setProperty_Callback_0(mthis);

  static setProperty_Callback_1(mthis, __arg_0) native "CSSStyleDeclaration_setProperty_Callback";
  setProperty_Callback_1_(mthis, __arg_0) => setProperty_Callback_1(mthis, __arg_0);

  static setProperty_Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleDeclaration_setProperty_Callback";
  setProperty_Callback_2_(mthis, __arg_0, __arg_1) => setProperty_Callback_2(mthis, __arg_0, __arg_1);

  static setProperty_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSStyleDeclaration_setProperty_Callback";
  setProperty_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setProperty_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setProperty_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CSSStyleDeclaration_setProperty_Callback";
  setProperty_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setProperty_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setProperty_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CSSStyleDeclaration_setProperty_Callback";
  setProperty_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setProperty_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkCSSStyleRule extends BlinkCSSRule {
  static final instance = new BlinkCSSStyleRule();

  static selectorText_Getter(mthis) native "CSSStyleRule_selectorText_Getter";
  selectorText_Getter_(mthis) => selectorText_Getter(mthis);

  static selectorText_Setter(mthis, __arg_0) native "CSSStyleRule_selectorText_Setter";
  selectorText_Setter_(mthis, __arg_0) => selectorText_Setter(mthis, __arg_0);

  static style_Getter(mthis) native "CSSStyleRule_style_Getter";
  style_Getter_(mthis) => style_Getter(mthis);

}

class BlinkCSSStyleSheet extends BlinkStyleSheet {
  static final instance = new BlinkCSSStyleSheet();

  static addRule_Callback_0(mthis) native "CSSStyleSheet_addRule_Callback";
  addRule_Callback_0_(mthis) => addRule_Callback_0(mthis);

  static addRule_Callback_1(mthis, __arg_0) native "CSSStyleSheet_addRule_Callback";
  addRule_Callback_1_(mthis, __arg_0) => addRule_Callback_1(mthis, __arg_0);

  static addRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleSheet_addRule_Callback";
  addRule_Callback_2_(mthis, __arg_0, __arg_1) => addRule_Callback_2(mthis, __arg_0, __arg_1);

  static addRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSStyleSheet_addRule_Callback";
  addRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addRule_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CSSStyleSheet_addRule_Callback";
  addRule_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => addRule_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static addRule_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CSSStyleSheet_addRule_Callback";
  addRule_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => addRule_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static cssRules_Getter(mthis) native "CSSStyleSheet_cssRules_Getter";
  cssRules_Getter_(mthis) => cssRules_Getter(mthis);

  static deleteRule_Callback_0(mthis) native "CSSStyleSheet_deleteRule_Callback";
  deleteRule_Callback_0_(mthis) => deleteRule_Callback_0(mthis);

  static deleteRule_Callback_1(mthis, __arg_0) native "CSSStyleSheet_deleteRule_Callback";
  deleteRule_Callback_1_(mthis, __arg_0) => deleteRule_Callback_1(mthis, __arg_0);

  static deleteRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleSheet_deleteRule_Callback";
  deleteRule_Callback_2_(mthis, __arg_0, __arg_1) => deleteRule_Callback_2(mthis, __arg_0, __arg_1);

  static deleteRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSStyleSheet_deleteRule_Callback";
  deleteRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertRule_Callback_0(mthis) native "CSSStyleSheet_insertRule_Callback";
  insertRule_Callback_0_(mthis) => insertRule_Callback_0(mthis);

  static insertRule_Callback_1(mthis, __arg_0) native "CSSStyleSheet_insertRule_Callback";
  insertRule_Callback_1_(mthis, __arg_0) => insertRule_Callback_1(mthis, __arg_0);

  static insertRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleSheet_insertRule_Callback";
  insertRule_Callback_2_(mthis, __arg_0, __arg_1) => insertRule_Callback_2(mthis, __arg_0, __arg_1);

  static insertRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSStyleSheet_insertRule_Callback";
  insertRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertRule_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CSSStyleSheet_insertRule_Callback";
  insertRule_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertRule_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static ownerRule_Getter(mthis) native "CSSStyleSheet_ownerRule_Getter";
  ownerRule_Getter_(mthis) => ownerRule_Getter(mthis);

  static removeRule_Callback_0(mthis) native "CSSStyleSheet_removeRule_Callback";
  removeRule_Callback_0_(mthis) => removeRule_Callback_0(mthis);

  static removeRule_Callback_1(mthis, __arg_0) native "CSSStyleSheet_removeRule_Callback";
  removeRule_Callback_1_(mthis, __arg_0) => removeRule_Callback_1(mthis, __arg_0);

  static removeRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSStyleSheet_removeRule_Callback";
  removeRule_Callback_2_(mthis, __arg_0, __arg_1) => removeRule_Callback_2(mthis, __arg_0, __arg_1);

  static removeRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSStyleSheet_removeRule_Callback";
  removeRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rules_Getter(mthis) native "CSSStyleSheet_rules_Getter";
  rules_Getter_(mthis) => rules_Getter(mthis);

}

class BlinkCSSSupportsRule extends BlinkCSSRule {
  static final instance = new BlinkCSSSupportsRule();

  static conditionText_Getter(mthis) native "CSSSupportsRule_conditionText_Getter";
  conditionText_Getter_(mthis) => conditionText_Getter(mthis);

  static cssRules_Getter(mthis) native "CSSSupportsRule_cssRules_Getter";
  cssRules_Getter_(mthis) => cssRules_Getter(mthis);

  static deleteRule_Callback_0(mthis) native "CSSSupportsRule_deleteRule_Callback";
  deleteRule_Callback_0_(mthis) => deleteRule_Callback_0(mthis);

  static deleteRule_Callback_1(mthis, __arg_0) native "CSSSupportsRule_deleteRule_Callback";
  deleteRule_Callback_1_(mthis, __arg_0) => deleteRule_Callback_1(mthis, __arg_0);

  static deleteRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSSupportsRule_deleteRule_Callback";
  deleteRule_Callback_2_(mthis, __arg_0, __arg_1) => deleteRule_Callback_2(mthis, __arg_0, __arg_1);

  static deleteRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSSupportsRule_deleteRule_Callback";
  deleteRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertRule_Callback_0(mthis) native "CSSSupportsRule_insertRule_Callback";
  insertRule_Callback_0_(mthis) => insertRule_Callback_0(mthis);

  static insertRule_Callback_1(mthis, __arg_0) native "CSSSupportsRule_insertRule_Callback";
  insertRule_Callback_1_(mthis, __arg_0) => insertRule_Callback_1(mthis, __arg_0);

  static insertRule_Callback_2(mthis, __arg_0, __arg_1) native "CSSSupportsRule_insertRule_Callback";
  insertRule_Callback_2_(mthis, __arg_0, __arg_1) => insertRule_Callback_2(mthis, __arg_0, __arg_1);

  static insertRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSSupportsRule_insertRule_Callback";
  insertRule_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertRule_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertRule_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CSSSupportsRule_insertRule_Callback";
  insertRule_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertRule_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkCSSUnknownRule extends BlinkCSSRule {
  static final instance = new BlinkCSSUnknownRule();

}

class BlinkCSSValue {
  static final instance = new BlinkCSSValue();

  static cssText_Getter(mthis) native "CSSValue_cssText_Getter";
  cssText_Getter_(mthis) => cssText_Getter(mthis);

  static cssText_Setter(mthis, __arg_0) native "CSSValue_cssText_Setter";
  cssText_Setter_(mthis, __arg_0) => cssText_Setter(mthis, __arg_0);

  static cssValueType_Getter(mthis) native "CSSValue_cssValueType_Getter";
  cssValueType_Getter_(mthis) => cssValueType_Getter(mthis);

}

class BlinkCSSValueList extends BlinkCSSValue {
  static final instance = new BlinkCSSValueList();

  static $__getter___Callback_1(mthis, __arg_0) native "CSSValueList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "CSSValueList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "CSSValueList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "CSSValueList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CSSValueList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "CSSValueList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkCSSViewportRule extends BlinkCSSRule {
  static final instance = new BlinkCSSViewportRule();

  static style_Getter(mthis) native "CSSViewportRule_style_Getter";
  style_Getter_(mthis) => style_Getter(mthis);

}

class BlinkCache {
  static final instance = new BlinkCache();

  static addAll_Callback_0(mthis) native "Cache_addAll_Callback";
  addAll_Callback_0_(mthis) => addAll_Callback_0(mthis);

  static addAll_Callback_1(mthis, __arg_0) native "Cache_addAll_Callback";
  addAll_Callback_1_(mthis, __arg_0) => addAll_Callback_1(mthis, __arg_0);

  static addAll_Callback_2(mthis, __arg_0, __arg_1) native "Cache_addAll_Callback";
  addAll_Callback_2_(mthis, __arg_0, __arg_1) => addAll_Callback_2(mthis, __arg_0, __arg_1);

  static addAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Cache_addAll_Callback";
  addAll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static add_Callback_0(mthis) native "Cache_add_Callback";
  add_Callback_0_(mthis) => add_Callback_0(mthis);

  static add_Callback_1(mthis, __arg_0) native "Cache_add_Callback";
  add_Callback_1_(mthis, __arg_0) => add_Callback_1(mthis, __arg_0);

  static add_Callback_2(mthis, __arg_0, __arg_1) native "Cache_add_Callback";
  add_Callback_2_(mthis, __arg_0, __arg_1) => add_Callback_2(mthis, __arg_0, __arg_1);

  static add_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Cache_add_Callback";
  add_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => add_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static delete_Callback_0(mthis) native "Cache_delete_Callback";
  delete_Callback_0_(mthis) => delete_Callback_0(mthis);

  static delete_Callback_1(mthis, __arg_0) native "Cache_delete_Callback";
  delete_Callback_1_(mthis, __arg_0) => delete_Callback_1(mthis, __arg_0);

  static delete_Callback_2(mthis, __arg_0, __arg_1) native "Cache_delete_Callback";
  delete_Callback_2_(mthis, __arg_0, __arg_1) => delete_Callback_2(mthis, __arg_0, __arg_1);

  static delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Cache_delete_Callback";
  delete_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static delete_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Cache_delete_Callback";
  delete_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => delete_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static keys_Callback_0(mthis) native "Cache_keys_Callback";
  keys_Callback_0_(mthis) => keys_Callback_0(mthis);

  static keys_Callback_1(mthis, __arg_0) native "Cache_keys_Callback";
  keys_Callback_1_(mthis, __arg_0) => keys_Callback_1(mthis, __arg_0);

  static keys_Callback_2(mthis, __arg_0, __arg_1) native "Cache_keys_Callback";
  keys_Callback_2_(mthis, __arg_0, __arg_1) => keys_Callback_2(mthis, __arg_0, __arg_1);

  static keys_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Cache_keys_Callback";
  keys_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => keys_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static keys_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Cache_keys_Callback";
  keys_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => keys_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static matchAll_Callback_0(mthis) native "Cache_matchAll_Callback";
  matchAll_Callback_0_(mthis) => matchAll_Callback_0(mthis);

  static matchAll_Callback_1(mthis, __arg_0) native "Cache_matchAll_Callback";
  matchAll_Callback_1_(mthis, __arg_0) => matchAll_Callback_1(mthis, __arg_0);

  static matchAll_Callback_2(mthis, __arg_0, __arg_1) native "Cache_matchAll_Callback";
  matchAll_Callback_2_(mthis, __arg_0, __arg_1) => matchAll_Callback_2(mthis, __arg_0, __arg_1);

  static matchAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Cache_matchAll_Callback";
  matchAll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => matchAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static matchAll_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Cache_matchAll_Callback";
  matchAll_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => matchAll_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static match_Callback_0(mthis) native "Cache_match_Callback";
  match_Callback_0_(mthis) => match_Callback_0(mthis);

  static match_Callback_1(mthis, __arg_0) native "Cache_match_Callback";
  match_Callback_1_(mthis, __arg_0) => match_Callback_1(mthis, __arg_0);

  static match_Callback_2(mthis, __arg_0, __arg_1) native "Cache_match_Callback";
  match_Callback_2_(mthis, __arg_0, __arg_1) => match_Callback_2(mthis, __arg_0, __arg_1);

  static match_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Cache_match_Callback";
  match_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => match_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static match_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Cache_match_Callback";
  match_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => match_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static put_Callback_0(mthis) native "Cache_put_Callback";
  put_Callback_0_(mthis) => put_Callback_0(mthis);

  static put_Callback_1(mthis, __arg_0) native "Cache_put_Callback";
  put_Callback_1_(mthis, __arg_0) => put_Callback_1(mthis, __arg_0);

  static put_Callback_2(mthis, __arg_0, __arg_1) native "Cache_put_Callback";
  put_Callback_2_(mthis, __arg_0, __arg_1) => put_Callback_2(mthis, __arg_0, __arg_1);

  static put_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Cache_put_Callback";
  put_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => put_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static put_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Cache_put_Callback";
  put_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => put_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkCacheStorage {
  static final instance = new BlinkCacheStorage();

  static create_Callback_0(mthis) native "CacheStorage_create_Callback";
  create_Callback_0_(mthis) => create_Callback_0(mthis);

  static create_Callback_1(mthis, __arg_0) native "CacheStorage_create_Callback";
  create_Callback_1_(mthis, __arg_0) => create_Callback_1(mthis, __arg_0);

  static create_Callback_2(mthis, __arg_0, __arg_1) native "CacheStorage_create_Callback";
  create_Callback_2_(mthis, __arg_0, __arg_1) => create_Callback_2(mthis, __arg_0, __arg_1);

  static create_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CacheStorage_create_Callback";
  create_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => create_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static delete_Callback_0(mthis) native "CacheStorage_delete_Callback";
  delete_Callback_0_(mthis) => delete_Callback_0(mthis);

  static delete_Callback_1(mthis, __arg_0) native "CacheStorage_delete_Callback";
  delete_Callback_1_(mthis, __arg_0) => delete_Callback_1(mthis, __arg_0);

  static delete_Callback_2(mthis, __arg_0, __arg_1) native "CacheStorage_delete_Callback";
  delete_Callback_2_(mthis, __arg_0, __arg_1) => delete_Callback_2(mthis, __arg_0, __arg_1);

  static delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CacheStorage_delete_Callback";
  delete_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static get_Callback_0(mthis) native "CacheStorage_get_Callback";
  get_Callback_0_(mthis) => get_Callback_0(mthis);

  static get_Callback_1(mthis, __arg_0) native "CacheStorage_get_Callback";
  get_Callback_1_(mthis, __arg_0) => get_Callback_1(mthis, __arg_0);

  static get_Callback_2(mthis, __arg_0, __arg_1) native "CacheStorage_get_Callback";
  get_Callback_2_(mthis, __arg_0, __arg_1) => get_Callback_2(mthis, __arg_0, __arg_1);

  static get_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CacheStorage_get_Callback";
  get_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => get_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static has_Callback_0(mthis) native "CacheStorage_has_Callback";
  has_Callback_0_(mthis) => has_Callback_0(mthis);

  static has_Callback_1(mthis, __arg_0) native "CacheStorage_has_Callback";
  has_Callback_1_(mthis, __arg_0) => has_Callback_1(mthis, __arg_0);

  static has_Callback_2(mthis, __arg_0, __arg_1) native "CacheStorage_has_Callback";
  has_Callback_2_(mthis, __arg_0, __arg_1) => has_Callback_2(mthis, __arg_0, __arg_1);

  static has_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CacheStorage_has_Callback";
  has_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => has_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static keys_Callback_0(mthis) native "CacheStorage_keys_Callback";
  keys_Callback_0_(mthis) => keys_Callback_0(mthis);

  static keys_Callback_1(mthis, __arg_0) native "CacheStorage_keys_Callback";
  keys_Callback_1_(mthis, __arg_0) => keys_Callback_1(mthis, __arg_0);

  static keys_Callback_2(mthis, __arg_0, __arg_1) native "CacheStorage_keys_Callback";
  keys_Callback_2_(mthis, __arg_0, __arg_1) => keys_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkCanvas2DContextAttributes {
  static final instance = new BlinkCanvas2DContextAttributes();

  static alpha_Getter(mthis) native "Canvas2DContextAttributes_alpha_Getter";
  alpha_Getter_(mthis) => alpha_Getter(mthis);

  static alpha_Setter(mthis, __arg_0) native "Canvas2DContextAttributes_alpha_Setter";
  alpha_Setter_(mthis, __arg_0) => alpha_Setter(mthis, __arg_0);

  static storage_Getter(mthis) native "Canvas2DContextAttributes_storage_Getter";
  storage_Getter_(mthis) => storage_Getter(mthis);

  static storage_Setter(mthis, __arg_0) native "Canvas2DContextAttributes_storage_Setter";
  storage_Setter_(mthis, __arg_0) => storage_Setter(mthis, __arg_0);

}

class BlinkCanvasGradient {
  static final instance = new BlinkCanvasGradient();

  static addColorStop_Callback_0(mthis) native "CanvasGradient_addColorStop_Callback";
  addColorStop_Callback_0_(mthis) => addColorStop_Callback_0(mthis);

  static addColorStop_Callback_1(mthis, __arg_0) native "CanvasGradient_addColorStop_Callback";
  addColorStop_Callback_1_(mthis, __arg_0) => addColorStop_Callback_1(mthis, __arg_0);

  static addColorStop_Callback_2(mthis, __arg_0, __arg_1) native "CanvasGradient_addColorStop_Callback";
  addColorStop_Callback_2_(mthis, __arg_0, __arg_1) => addColorStop_Callback_2(mthis, __arg_0, __arg_1);

  static addColorStop_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasGradient_addColorStop_Callback";
  addColorStop_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addColorStop_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addColorStop_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasGradient_addColorStop_Callback";
  addColorStop_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => addColorStop_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkCanvasPattern {
  static final instance = new BlinkCanvasPattern();

  static setTransform_Callback_0(mthis) native "CanvasPattern_setTransform_Callback";
  setTransform_Callback_0_(mthis) => setTransform_Callback_0(mthis);

  static setTransform_Callback_1(mthis, __arg_0) native "CanvasPattern_setTransform_Callback";
  setTransform_Callback_1_(mthis, __arg_0) => setTransform_Callback_1(mthis, __arg_0);

  static setTransform_Callback_2(mthis, __arg_0, __arg_1) native "CanvasPattern_setTransform_Callback";
  setTransform_Callback_2_(mthis, __arg_0, __arg_1) => setTransform_Callback_2(mthis, __arg_0, __arg_1);

  static setTransform_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasPattern_setTransform_Callback";
  setTransform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setTransform_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkCanvasRenderingContext2D {
  static final instance = new BlinkCanvasRenderingContext2D();

  static addHitRegion_Callback_0(mthis) native "CanvasRenderingContext2D_addHitRegion_Callback";
  addHitRegion_Callback_0_(mthis) => addHitRegion_Callback_0(mthis);

  static addHitRegion_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_addHitRegion_Callback";
  addHitRegion_Callback_1_(mthis, __arg_0) => addHitRegion_Callback_1(mthis, __arg_0);

  static addHitRegion_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_addHitRegion_Callback";
  addHitRegion_Callback_2_(mthis, __arg_0, __arg_1) => addHitRegion_Callback_2(mthis, __arg_0, __arg_1);

  static addHitRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_addHitRegion_Callback";
  addHitRegion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addHitRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static arcTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_arcTo_Callback";
  arcTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => arcTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static arcTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_arcTo_Callback";
  arcTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => arcTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static arcTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_arcTo_Callback";
  arcTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => arcTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static arcTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_arcTo_Callback";
  arcTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => arcTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static arcTo_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CanvasRenderingContext2D_arcTo_Callback";
  arcTo_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => arcTo_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static arc_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_arc_Callback";
  arc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => arc_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static arc_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_arc_Callback";
  arc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => arc_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static arc_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_arc_Callback";
  arc_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => arc_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static arc_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_arc_Callback";
  arc_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => arc_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static arc_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CanvasRenderingContext2D_arc_Callback";
  arc_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => arc_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static arc_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "CanvasRenderingContext2D_arc_Callback";
  arc_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => arc_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static beginPath_Callback_0(mthis) native "CanvasRenderingContext2D_beginPath_Callback";
  beginPath_Callback_0_(mthis) => beginPath_Callback_0(mthis);

  static beginPath_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_beginPath_Callback";
  beginPath_Callback_1_(mthis, __arg_0) => beginPath_Callback_1(mthis, __arg_0);

  static beginPath_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_beginPath_Callback";
  beginPath_Callback_2_(mthis, __arg_0, __arg_1) => beginPath_Callback_2(mthis, __arg_0, __arg_1);

  static bezierCurveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => bezierCurveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bezierCurveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => bezierCurveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static bezierCurveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => bezierCurveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static bezierCurveTo_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CanvasRenderingContext2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => bezierCurveTo_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static bezierCurveTo_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "CanvasRenderingContext2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => bezierCurveTo_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static canvas_Getter(mthis) native "CanvasRenderingContext2D_canvas_Getter";
  canvas_Getter_(mthis) => canvas_Getter(mthis);

  static clearHitRegions_Callback_0(mthis) native "CanvasRenderingContext2D_clearHitRegions_Callback";
  clearHitRegions_Callback_0_(mthis) => clearHitRegions_Callback_0(mthis);

  static clearHitRegions_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_clearHitRegions_Callback";
  clearHitRegions_Callback_1_(mthis, __arg_0) => clearHitRegions_Callback_1(mthis, __arg_0);

  static clearHitRegions_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_clearHitRegions_Callback";
  clearHitRegions_Callback_2_(mthis, __arg_0, __arg_1) => clearHitRegions_Callback_2(mthis, __arg_0, __arg_1);

  static clearRect_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_clearRect_Callback";
  clearRect_Callback_2_(mthis, __arg_0, __arg_1) => clearRect_Callback_2(mthis, __arg_0, __arg_1);

  static clearRect_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_clearRect_Callback";
  clearRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearRect_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clearRect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_clearRect_Callback";
  clearRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => clearRect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static clearRect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_clearRect_Callback";
  clearRect_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => clearRect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static clearRect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_clearRect_Callback";
  clearRect_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => clearRect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static clip_Callback_0(mthis) native "CanvasRenderingContext2D_clip_Callback";
  clip_Callback_0_(mthis) => clip_Callback_0(mthis);

  static clip_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_clip_Callback";
  clip_Callback_1_(mthis, __arg_0) => clip_Callback_1(mthis, __arg_0);

  static clip_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_clip_Callback";
  clip_Callback_2_(mthis, __arg_0, __arg_1) => clip_Callback_2(mthis, __arg_0, __arg_1);

  static clip_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_clip_Callback";
  clip_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clip_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clip_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_clip_Callback";
  clip_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => clip_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static closePath_Callback_0(mthis) native "CanvasRenderingContext2D_closePath_Callback";
  closePath_Callback_0_(mthis) => closePath_Callback_0(mthis);

  static closePath_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_closePath_Callback";
  closePath_Callback_1_(mthis, __arg_0) => closePath_Callback_1(mthis, __arg_0);

  static closePath_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_closePath_Callback";
  closePath_Callback_2_(mthis, __arg_0, __arg_1) => closePath_Callback_2(mthis, __arg_0, __arg_1);

  static createImageData_Callback_0(mthis) native "CanvasRenderingContext2D_createImageData_Callback";
  createImageData_Callback_0_(mthis) => createImageData_Callback_0(mthis);

  static createImageData_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_createImageData_Callback";
  createImageData_Callback_1_(mthis, __arg_0) => createImageData_Callback_1(mthis, __arg_0);

  static createImageData_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_createImageData_Callback";
  createImageData_Callback_2_(mthis, __arg_0, __arg_1) => createImageData_Callback_2(mthis, __arg_0, __arg_1);

  static createImageData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_createImageData_Callback";
  createImageData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createImageData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createImageData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_createImageData_Callback";
  createImageData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createImageData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createLinearGradient_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_createLinearGradient_Callback";
  createLinearGradient_Callback_2_(mthis, __arg_0, __arg_1) => createLinearGradient_Callback_2(mthis, __arg_0, __arg_1);

  static createLinearGradient_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_createLinearGradient_Callback";
  createLinearGradient_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createLinearGradient_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createLinearGradient_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_createLinearGradient_Callback";
  createLinearGradient_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createLinearGradient_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createLinearGradient_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_createLinearGradient_Callback";
  createLinearGradient_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createLinearGradient_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createLinearGradient_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_createLinearGradient_Callback";
  createLinearGradient_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createLinearGradient_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createPattern_Callback_0(mthis) native "CanvasRenderingContext2D_createPattern_Callback";
  createPattern_Callback_0_(mthis) => createPattern_Callback_0(mthis);

  static createPattern_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_createPattern_Callback";
  createPattern_Callback_1_(mthis, __arg_0) => createPattern_Callback_1(mthis, __arg_0);

  static createPattern_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_createPattern_Callback";
  createPattern_Callback_2_(mthis, __arg_0, __arg_1) => createPattern_Callback_2(mthis, __arg_0, __arg_1);

  static createPattern_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_createPattern_Callback";
  createPattern_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createPattern_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createPattern_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_createPattern_Callback";
  createPattern_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createPattern_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createRadialGradient_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_createRadialGradient_Callback";
  createRadialGradient_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createRadialGradient_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createRadialGradient_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_createRadialGradient_Callback";
  createRadialGradient_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createRadialGradient_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createRadialGradient_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_createRadialGradient_Callback";
  createRadialGradient_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createRadialGradient_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createRadialGradient_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CanvasRenderingContext2D_createRadialGradient_Callback";
  createRadialGradient_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => createRadialGradient_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static createRadialGradient_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "CanvasRenderingContext2D_createRadialGradient_Callback";
  createRadialGradient_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => createRadialGradient_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static currentTransform_Getter(mthis) native "CanvasRenderingContext2D_currentTransform_Getter";
  currentTransform_Getter_(mthis) => currentTransform_Getter(mthis);

  static currentTransform_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_currentTransform_Setter";
  currentTransform_Setter_(mthis, __arg_0) => currentTransform_Setter(mthis, __arg_0);

  static direction_Getter(mthis) native "CanvasRenderingContext2D_direction_Getter";
  direction_Getter_(mthis) => direction_Getter(mthis);

  static direction_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_direction_Setter";
  direction_Setter_(mthis, __arg_0) => direction_Setter(mthis, __arg_0);

  static drawFocusIfNeeded_Callback_0(mthis) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback";
  drawFocusIfNeeded_Callback_0_(mthis) => drawFocusIfNeeded_Callback_0(mthis);

  static drawFocusIfNeeded_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback";
  drawFocusIfNeeded_Callback_1_(mthis, __arg_0) => drawFocusIfNeeded_Callback_1(mthis, __arg_0);

  static drawFocusIfNeeded_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback";
  drawFocusIfNeeded_Callback_2_(mthis, __arg_0, __arg_1) => drawFocusIfNeeded_Callback_2(mthis, __arg_0, __arg_1);

  static drawFocusIfNeeded_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback";
  drawFocusIfNeeded_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => drawFocusIfNeeded_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static drawFocusIfNeeded_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_drawFocusIfNeeded_Callback";
  drawFocusIfNeeded_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => drawFocusIfNeeded_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static drawImage_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_1_(mthis, __arg_0) => drawImage_Callback_1(mthis, __arg_0);

  static drawImage_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => drawImage_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static drawImage_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => drawImage_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10);

  static drawImage_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_2_(mthis, __arg_0, __arg_1) => drawImage_Callback_2(mthis, __arg_0, __arg_1);

  static drawImage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => drawImage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static drawImage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => drawImage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static drawImage_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => drawImage_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static drawImage_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => drawImage_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static drawImage_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => drawImage_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static drawImage_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => drawImage_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static drawImage_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "CanvasRenderingContext2D_drawImage_Callback";
  drawImage_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => drawImage_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static ellipse_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "CanvasRenderingContext2D_ellipse_Callback";
  ellipse_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => ellipse_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static ellipse_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_ellipse_Callback";
  ellipse_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => ellipse_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static ellipse_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_ellipse_Callback";
  ellipse_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => ellipse_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static ellipse_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CanvasRenderingContext2D_ellipse_Callback";
  ellipse_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => ellipse_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static ellipse_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "CanvasRenderingContext2D_ellipse_Callback";
  ellipse_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => ellipse_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static ellipse_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "CanvasRenderingContext2D_ellipse_Callback";
  ellipse_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => ellipse_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static fillRect_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_fillRect_Callback";
  fillRect_Callback_2_(mthis, __arg_0, __arg_1) => fillRect_Callback_2(mthis, __arg_0, __arg_1);

  static fillRect_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_fillRect_Callback";
  fillRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => fillRect_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static fillRect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_fillRect_Callback";
  fillRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => fillRect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static fillRect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_fillRect_Callback";
  fillRect_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => fillRect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static fillRect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_fillRect_Callback";
  fillRect_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => fillRect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static fillStyle_Getter(mthis) native "CanvasRenderingContext2D_fillStyle_Getter";
  fillStyle_Getter_(mthis) => fillStyle_Getter(mthis);

  static fillStyle_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_fillStyle_Setter";
  fillStyle_Setter_(mthis, __arg_0) => fillStyle_Setter(mthis, __arg_0);

  static fillText_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_fillText_Callback";
  fillText_Callback_1_(mthis, __arg_0) => fillText_Callback_1(mthis, __arg_0);

  static fillText_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_fillText_Callback";
  fillText_Callback_2_(mthis, __arg_0, __arg_1) => fillText_Callback_2(mthis, __arg_0, __arg_1);

  static fillText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_fillText_Callback";
  fillText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => fillText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static fillText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_fillText_Callback";
  fillText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => fillText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static fillText_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_fillText_Callback";
  fillText_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => fillText_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static fillText_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_fillText_Callback";
  fillText_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => fillText_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static fill_Callback_0(mthis) native "CanvasRenderingContext2D_fill_Callback";
  fill_Callback_0_(mthis) => fill_Callback_0(mthis);

  static fill_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_fill_Callback";
  fill_Callback_1_(mthis, __arg_0) => fill_Callback_1(mthis, __arg_0);

  static fill_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_fill_Callback";
  fill_Callback_2_(mthis, __arg_0, __arg_1) => fill_Callback_2(mthis, __arg_0, __arg_1);

  static fill_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_fill_Callback";
  fill_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => fill_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static fill_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_fill_Callback";
  fill_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => fill_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static font_Getter(mthis) native "CanvasRenderingContext2D_font_Getter";
  font_Getter_(mthis) => font_Getter(mthis);

  static font_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_font_Setter";
  font_Setter_(mthis, __arg_0) => font_Setter(mthis, __arg_0);

  static getContextAttributes_Callback_0(mthis) native "CanvasRenderingContext2D_getContextAttributes_Callback";
  getContextAttributes_Callback_0_(mthis) => getContextAttributes_Callback_0(mthis);

  static getContextAttributes_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_getContextAttributes_Callback";
  getContextAttributes_Callback_1_(mthis, __arg_0) => getContextAttributes_Callback_1(mthis, __arg_0);

  static getContextAttributes_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_getContextAttributes_Callback";
  getContextAttributes_Callback_2_(mthis, __arg_0, __arg_1) => getContextAttributes_Callback_2(mthis, __arg_0, __arg_1);

  static getImageData_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_getImageData_Callback";
  getImageData_Callback_2_(mthis, __arg_0, __arg_1) => getImageData_Callback_2(mthis, __arg_0, __arg_1);

  static getImageData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_getImageData_Callback";
  getImageData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getImageData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getImageData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_getImageData_Callback";
  getImageData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getImageData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getImageData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_getImageData_Callback";
  getImageData_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => getImageData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static getImageData_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_getImageData_Callback";
  getImageData_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => getImageData_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static getLineDash_Callback_0(mthis) native "CanvasRenderingContext2D_getLineDash_Callback";
  getLineDash_Callback_0_(mthis) => getLineDash_Callback_0(mthis);

  static getLineDash_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_getLineDash_Callback";
  getLineDash_Callback_1_(mthis, __arg_0) => getLineDash_Callback_1(mthis, __arg_0);

  static getLineDash_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_getLineDash_Callback";
  getLineDash_Callback_2_(mthis, __arg_0, __arg_1) => getLineDash_Callback_2(mthis, __arg_0, __arg_1);

  static globalAlpha_Getter(mthis) native "CanvasRenderingContext2D_globalAlpha_Getter";
  globalAlpha_Getter_(mthis) => globalAlpha_Getter(mthis);

  static globalAlpha_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_globalAlpha_Setter";
  globalAlpha_Setter_(mthis, __arg_0) => globalAlpha_Setter(mthis, __arg_0);

  static globalCompositeOperation_Getter(mthis) native "CanvasRenderingContext2D_globalCompositeOperation_Getter";
  globalCompositeOperation_Getter_(mthis) => globalCompositeOperation_Getter(mthis);

  static globalCompositeOperation_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_globalCompositeOperation_Setter";
  globalCompositeOperation_Setter_(mthis, __arg_0) => globalCompositeOperation_Setter(mthis, __arg_0);

  static imageSmoothingEnabled_Getter(mthis) native "CanvasRenderingContext2D_imageSmoothingEnabled_Getter";
  imageSmoothingEnabled_Getter_(mthis) => imageSmoothingEnabled_Getter(mthis);

  static imageSmoothingEnabled_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_imageSmoothingEnabled_Setter";
  imageSmoothingEnabled_Setter_(mthis, __arg_0) => imageSmoothingEnabled_Setter(mthis, __arg_0);

  static isContextLost_Callback_0(mthis) native "CanvasRenderingContext2D_isContextLost_Callback";
  isContextLost_Callback_0_(mthis) => isContextLost_Callback_0(mthis);

  static isContextLost_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_isContextLost_Callback";
  isContextLost_Callback_1_(mthis, __arg_0) => isContextLost_Callback_1(mthis, __arg_0);

  static isContextLost_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_isContextLost_Callback";
  isContextLost_Callback_2_(mthis, __arg_0, __arg_1) => isContextLost_Callback_2(mthis, __arg_0, __arg_1);

  static isPointInPath_Callback_0(mthis) native "CanvasRenderingContext2D_isPointInPath_Callback";
  isPointInPath_Callback_0_(mthis) => isPointInPath_Callback_0(mthis);

  static isPointInPath_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_isPointInPath_Callback";
  isPointInPath_Callback_1_(mthis, __arg_0) => isPointInPath_Callback_1(mthis, __arg_0);

  static isPointInPath_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_isPointInPath_Callback";
  isPointInPath_Callback_2_(mthis, __arg_0, __arg_1) => isPointInPath_Callback_2(mthis, __arg_0, __arg_1);

  static isPointInPath_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_isPointInPath_Callback";
  isPointInPath_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isPointInPath_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isPointInPath_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_isPointInPath_Callback";
  isPointInPath_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => isPointInPath_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static isPointInPath_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_isPointInPath_Callback";
  isPointInPath_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => isPointInPath_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static isPointInPath_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_isPointInPath_Callback";
  isPointInPath_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => isPointInPath_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static isPointInStroke_Callback_0(mthis) native "CanvasRenderingContext2D_isPointInStroke_Callback";
  isPointInStroke_Callback_0_(mthis) => isPointInStroke_Callback_0(mthis);

  static isPointInStroke_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_isPointInStroke_Callback";
  isPointInStroke_Callback_1_(mthis, __arg_0) => isPointInStroke_Callback_1(mthis, __arg_0);

  static isPointInStroke_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_isPointInStroke_Callback";
  isPointInStroke_Callback_2_(mthis, __arg_0, __arg_1) => isPointInStroke_Callback_2(mthis, __arg_0, __arg_1);

  static isPointInStroke_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_isPointInStroke_Callback";
  isPointInStroke_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isPointInStroke_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isPointInStroke_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_isPointInStroke_Callback";
  isPointInStroke_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => isPointInStroke_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static isPointInStroke_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_isPointInStroke_Callback";
  isPointInStroke_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => isPointInStroke_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static lineCap_Getter(mthis) native "CanvasRenderingContext2D_lineCap_Getter";
  lineCap_Getter_(mthis) => lineCap_Getter(mthis);

  static lineCap_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_lineCap_Setter";
  lineCap_Setter_(mthis, __arg_0) => lineCap_Setter(mthis, __arg_0);

  static lineDashOffset_Getter(mthis) native "CanvasRenderingContext2D_lineDashOffset_Getter";
  lineDashOffset_Getter_(mthis) => lineDashOffset_Getter(mthis);

  static lineDashOffset_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_lineDashOffset_Setter";
  lineDashOffset_Setter_(mthis, __arg_0) => lineDashOffset_Setter(mthis, __arg_0);

  static lineJoin_Getter(mthis) native "CanvasRenderingContext2D_lineJoin_Getter";
  lineJoin_Getter_(mthis) => lineJoin_Getter(mthis);

  static lineJoin_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_lineJoin_Setter";
  lineJoin_Setter_(mthis, __arg_0) => lineJoin_Setter(mthis, __arg_0);

  static lineTo_Callback_0(mthis) native "CanvasRenderingContext2D_lineTo_Callback";
  lineTo_Callback_0_(mthis) => lineTo_Callback_0(mthis);

  static lineTo_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_lineTo_Callback";
  lineTo_Callback_1_(mthis, __arg_0) => lineTo_Callback_1(mthis, __arg_0);

  static lineTo_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_lineTo_Callback";
  lineTo_Callback_2_(mthis, __arg_0, __arg_1) => lineTo_Callback_2(mthis, __arg_0, __arg_1);

  static lineTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_lineTo_Callback";
  lineTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => lineTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static lineTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_lineTo_Callback";
  lineTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => lineTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static lineWidth_Getter(mthis) native "CanvasRenderingContext2D_lineWidth_Getter";
  lineWidth_Getter_(mthis) => lineWidth_Getter(mthis);

  static lineWidth_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_lineWidth_Setter";
  lineWidth_Setter_(mthis, __arg_0) => lineWidth_Setter(mthis, __arg_0);

  static measureText_Callback_0(mthis) native "CanvasRenderingContext2D_measureText_Callback";
  measureText_Callback_0_(mthis) => measureText_Callback_0(mthis);

  static measureText_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_measureText_Callback";
  measureText_Callback_1_(mthis, __arg_0) => measureText_Callback_1(mthis, __arg_0);

  static measureText_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_measureText_Callback";
  measureText_Callback_2_(mthis, __arg_0, __arg_1) => measureText_Callback_2(mthis, __arg_0, __arg_1);

  static measureText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_measureText_Callback";
  measureText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => measureText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static miterLimit_Getter(mthis) native "CanvasRenderingContext2D_miterLimit_Getter";
  miterLimit_Getter_(mthis) => miterLimit_Getter(mthis);

  static miterLimit_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_miterLimit_Setter";
  miterLimit_Setter_(mthis, __arg_0) => miterLimit_Setter(mthis, __arg_0);

  static moveTo_Callback_0(mthis) native "CanvasRenderingContext2D_moveTo_Callback";
  moveTo_Callback_0_(mthis) => moveTo_Callback_0(mthis);

  static moveTo_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_moveTo_Callback";
  moveTo_Callback_1_(mthis, __arg_0) => moveTo_Callback_1(mthis, __arg_0);

  static moveTo_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_moveTo_Callback";
  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => moveTo_Callback_2(mthis, __arg_0, __arg_1);

  static moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_moveTo_Callback";
  moveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_moveTo_Callback";
  moveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static putImageData_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_putImageData_Callback";
  putImageData_Callback_1_(mthis, __arg_0) => putImageData_Callback_1(mthis, __arg_0);

  static putImageData_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_putImageData_Callback";
  putImageData_Callback_2_(mthis, __arg_0, __arg_1) => putImageData_Callback_2(mthis, __arg_0, __arg_1);

  static putImageData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_putImageData_Callback";
  putImageData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => putImageData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static putImageData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_putImageData_Callback";
  putImageData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => putImageData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static putImageData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_putImageData_Callback";
  putImageData_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => putImageData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static putImageData_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_putImageData_Callback";
  putImageData_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => putImageData_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static putImageData_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CanvasRenderingContext2D_putImageData_Callback";
  putImageData_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => putImageData_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static putImageData_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "CanvasRenderingContext2D_putImageData_Callback";
  putImageData_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => putImageData_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static putImageData_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "CanvasRenderingContext2D_putImageData_Callback";
  putImageData_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => putImageData_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static quadraticCurveTo_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_2_(mthis, __arg_0, __arg_1) => quadraticCurveTo_Callback_2(mthis, __arg_0, __arg_1);

  static quadraticCurveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => quadraticCurveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static quadraticCurveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => quadraticCurveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static quadraticCurveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => quadraticCurveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static quadraticCurveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => quadraticCurveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static rect_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_rect_Callback";
  rect_Callback_2_(mthis, __arg_0, __arg_1) => rect_Callback_2(mthis, __arg_0, __arg_1);

  static rect_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_rect_Callback";
  rect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => rect_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_rect_Callback";
  rect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => rect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static rect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_rect_Callback";
  rect_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => rect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static rect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_rect_Callback";
  rect_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => rect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static removeHitRegion_Callback_0(mthis) native "CanvasRenderingContext2D_removeHitRegion_Callback";
  removeHitRegion_Callback_0_(mthis) => removeHitRegion_Callback_0(mthis);

  static removeHitRegion_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_removeHitRegion_Callback";
  removeHitRegion_Callback_1_(mthis, __arg_0) => removeHitRegion_Callback_1(mthis, __arg_0);

  static removeHitRegion_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_removeHitRegion_Callback";
  removeHitRegion_Callback_2_(mthis, __arg_0, __arg_1) => removeHitRegion_Callback_2(mthis, __arg_0, __arg_1);

  static removeHitRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_removeHitRegion_Callback";
  removeHitRegion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeHitRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static resetTransform_Callback_0(mthis) native "CanvasRenderingContext2D_resetTransform_Callback";
  resetTransform_Callback_0_(mthis) => resetTransform_Callback_0(mthis);

  static resetTransform_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_resetTransform_Callback";
  resetTransform_Callback_1_(mthis, __arg_0) => resetTransform_Callback_1(mthis, __arg_0);

  static resetTransform_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_resetTransform_Callback";
  resetTransform_Callback_2_(mthis, __arg_0, __arg_1) => resetTransform_Callback_2(mthis, __arg_0, __arg_1);

  static restore_Callback_0(mthis) native "CanvasRenderingContext2D_restore_Callback";
  restore_Callback_0_(mthis) => restore_Callback_0(mthis);

  static restore_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_restore_Callback";
  restore_Callback_1_(mthis, __arg_0) => restore_Callback_1(mthis, __arg_0);

  static restore_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_restore_Callback";
  restore_Callback_2_(mthis, __arg_0, __arg_1) => restore_Callback_2(mthis, __arg_0, __arg_1);

  static rotate_Callback_0(mthis) native "CanvasRenderingContext2D_rotate_Callback";
  rotate_Callback_0_(mthis) => rotate_Callback_0(mthis);

  static rotate_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_rotate_Callback";
  rotate_Callback_1_(mthis, __arg_0) => rotate_Callback_1(mthis, __arg_0);

  static rotate_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_rotate_Callback";
  rotate_Callback_2_(mthis, __arg_0, __arg_1) => rotate_Callback_2(mthis, __arg_0, __arg_1);

  static rotate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_rotate_Callback";
  rotate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => rotate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static save_Callback_0(mthis) native "CanvasRenderingContext2D_save_Callback";
  save_Callback_0_(mthis) => save_Callback_0(mthis);

  static save_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_save_Callback";
  save_Callback_1_(mthis, __arg_0) => save_Callback_1(mthis, __arg_0);

  static save_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_save_Callback";
  save_Callback_2_(mthis, __arg_0, __arg_1) => save_Callback_2(mthis, __arg_0, __arg_1);

  static scale_Callback_0(mthis) native "CanvasRenderingContext2D_scale_Callback";
  scale_Callback_0_(mthis) => scale_Callback_0(mthis);

  static scale_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_scale_Callback";
  scale_Callback_1_(mthis, __arg_0) => scale_Callback_1(mthis, __arg_0);

  static scale_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_scale_Callback";
  scale_Callback_2_(mthis, __arg_0, __arg_1) => scale_Callback_2(mthis, __arg_0, __arg_1);

  static scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_scale_Callback";
  scale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_scale_Callback";
  scale_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scrollPathIntoView_Callback_0(mthis) native "CanvasRenderingContext2D_scrollPathIntoView_Callback";
  scrollPathIntoView_Callback_0_(mthis) => scrollPathIntoView_Callback_0(mthis);

  static scrollPathIntoView_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_scrollPathIntoView_Callback";
  scrollPathIntoView_Callback_1_(mthis, __arg_0) => scrollPathIntoView_Callback_1(mthis, __arg_0);

  static scrollPathIntoView_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_scrollPathIntoView_Callback";
  scrollPathIntoView_Callback_2_(mthis, __arg_0, __arg_1) => scrollPathIntoView_Callback_2(mthis, __arg_0, __arg_1);

  static scrollPathIntoView_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_scrollPathIntoView_Callback";
  scrollPathIntoView_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scrollPathIntoView_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setLineDash_Callback_0(mthis) native "CanvasRenderingContext2D_setLineDash_Callback";
  setLineDash_Callback_0_(mthis) => setLineDash_Callback_0(mthis);

  static setLineDash_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_setLineDash_Callback";
  setLineDash_Callback_1_(mthis, __arg_0) => setLineDash_Callback_1(mthis, __arg_0);

  static setLineDash_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_setLineDash_Callback";
  setLineDash_Callback_2_(mthis, __arg_0, __arg_1) => setLineDash_Callback_2(mthis, __arg_0, __arg_1);

  static setLineDash_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_setLineDash_Callback";
  setLineDash_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setLineDash_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setTransform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_setTransform_Callback";
  setTransform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setTransform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setTransform_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_setTransform_Callback";
  setTransform_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setTransform_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setTransform_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_setTransform_Callback";
  setTransform_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => setTransform_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static setTransform_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CanvasRenderingContext2D_setTransform_Callback";
  setTransform_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => setTransform_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static setTransform_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "CanvasRenderingContext2D_setTransform_Callback";
  setTransform_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => setTransform_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static shadowBlur_Getter(mthis) native "CanvasRenderingContext2D_shadowBlur_Getter";
  shadowBlur_Getter_(mthis) => shadowBlur_Getter(mthis);

  static shadowBlur_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_shadowBlur_Setter";
  shadowBlur_Setter_(mthis, __arg_0) => shadowBlur_Setter(mthis, __arg_0);

  static shadowColor_Getter(mthis) native "CanvasRenderingContext2D_shadowColor_Getter";
  shadowColor_Getter_(mthis) => shadowColor_Getter(mthis);

  static shadowColor_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_shadowColor_Setter";
  shadowColor_Setter_(mthis, __arg_0) => shadowColor_Setter(mthis, __arg_0);

  static shadowOffsetX_Getter(mthis) native "CanvasRenderingContext2D_shadowOffsetX_Getter";
  shadowOffsetX_Getter_(mthis) => shadowOffsetX_Getter(mthis);

  static shadowOffsetX_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_shadowOffsetX_Setter";
  shadowOffsetX_Setter_(mthis, __arg_0) => shadowOffsetX_Setter(mthis, __arg_0);

  static shadowOffsetY_Getter(mthis) native "CanvasRenderingContext2D_shadowOffsetY_Getter";
  shadowOffsetY_Getter_(mthis) => shadowOffsetY_Getter(mthis);

  static shadowOffsetY_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_shadowOffsetY_Setter";
  shadowOffsetY_Setter_(mthis, __arg_0) => shadowOffsetY_Setter(mthis, __arg_0);

  static strokeRect_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_strokeRect_Callback";
  strokeRect_Callback_2_(mthis, __arg_0, __arg_1) => strokeRect_Callback_2(mthis, __arg_0, __arg_1);

  static strokeRect_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_strokeRect_Callback";
  strokeRect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => strokeRect_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static strokeRect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_strokeRect_Callback";
  strokeRect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => strokeRect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static strokeRect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_strokeRect_Callback";
  strokeRect_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => strokeRect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static strokeRect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_strokeRect_Callback";
  strokeRect_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => strokeRect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static strokeStyle_Getter(mthis) native "CanvasRenderingContext2D_strokeStyle_Getter";
  strokeStyle_Getter_(mthis) => strokeStyle_Getter(mthis);

  static strokeStyle_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_strokeStyle_Setter";
  strokeStyle_Setter_(mthis, __arg_0) => strokeStyle_Setter(mthis, __arg_0);

  static strokeText_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_strokeText_Callback";
  strokeText_Callback_1_(mthis, __arg_0) => strokeText_Callback_1(mthis, __arg_0);

  static strokeText_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_strokeText_Callback";
  strokeText_Callback_2_(mthis, __arg_0, __arg_1) => strokeText_Callback_2(mthis, __arg_0, __arg_1);

  static strokeText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_strokeText_Callback";
  strokeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => strokeText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static strokeText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_strokeText_Callback";
  strokeText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => strokeText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static strokeText_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_strokeText_Callback";
  strokeText_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => strokeText_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static strokeText_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_strokeText_Callback";
  strokeText_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => strokeText_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static stroke_Callback_0(mthis) native "CanvasRenderingContext2D_stroke_Callback";
  stroke_Callback_0_(mthis) => stroke_Callback_0(mthis);

  static stroke_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_stroke_Callback";
  stroke_Callback_1_(mthis, __arg_0) => stroke_Callback_1(mthis, __arg_0);

  static stroke_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_stroke_Callback";
  stroke_Callback_2_(mthis, __arg_0, __arg_1) => stroke_Callback_2(mthis, __arg_0, __arg_1);

  static stroke_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_stroke_Callback";
  stroke_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stroke_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static textAlign_Getter(mthis) native "CanvasRenderingContext2D_textAlign_Getter";
  textAlign_Getter_(mthis) => textAlign_Getter(mthis);

  static textAlign_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_textAlign_Setter";
  textAlign_Setter_(mthis, __arg_0) => textAlign_Setter(mthis, __arg_0);

  static textBaseline_Getter(mthis) native "CanvasRenderingContext2D_textBaseline_Getter";
  textBaseline_Getter_(mthis) => textBaseline_Getter(mthis);

  static textBaseline_Setter(mthis, __arg_0) native "CanvasRenderingContext2D_textBaseline_Setter";
  textBaseline_Setter_(mthis, __arg_0) => textBaseline_Setter(mthis, __arg_0);

  static transform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_transform_Callback";
  transform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => transform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static transform_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CanvasRenderingContext2D_transform_Callback";
  transform_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => transform_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static transform_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CanvasRenderingContext2D_transform_Callback";
  transform_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => transform_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static transform_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CanvasRenderingContext2D_transform_Callback";
  transform_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => transform_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static transform_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "CanvasRenderingContext2D_transform_Callback";
  transform_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => transform_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static translate_Callback_0(mthis) native "CanvasRenderingContext2D_translate_Callback";
  translate_Callback_0_(mthis) => translate_Callback_0(mthis);

  static translate_Callback_1(mthis, __arg_0) native "CanvasRenderingContext2D_translate_Callback";
  translate_Callback_1_(mthis, __arg_0) => translate_Callback_1(mthis, __arg_0);

  static translate_Callback_2(mthis, __arg_0, __arg_1) native "CanvasRenderingContext2D_translate_Callback";
  translate_Callback_2_(mthis, __arg_0, __arg_1) => translate_Callback_2(mthis, __arg_0, __arg_1);

  static translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CanvasRenderingContext2D_translate_Callback";
  translate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CanvasRenderingContext2D_translate_Callback";
  translate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkChannelMergerNode extends BlinkAudioNode {
  static final instance = new BlinkChannelMergerNode();

}

class BlinkChannelSplitterNode extends BlinkAudioNode {
  static final instance = new BlinkChannelSplitterNode();

}

class BlinkCharacterData extends BlinkNode {
  static final instance = new BlinkCharacterData();

  static appendData_Callback_0(mthis) native "CharacterData_appendData_Callback";
  appendData_Callback_0_(mthis) => appendData_Callback_0(mthis);

  static appendData_Callback_1(mthis, __arg_0) native "CharacterData_appendData_Callback";
  appendData_Callback_1_(mthis, __arg_0) => appendData_Callback_1(mthis, __arg_0);

  static appendData_Callback_2(mthis, __arg_0, __arg_1) native "CharacterData_appendData_Callback";
  appendData_Callback_2_(mthis, __arg_0, __arg_1) => appendData_Callback_2(mthis, __arg_0, __arg_1);

  static appendData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CharacterData_appendData_Callback";
  appendData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static data_Getter(mthis) native "CharacterData_data_Getter";
  data_Getter_(mthis) => data_Getter(mthis);

  static data_Setter(mthis, __arg_0) native "CharacterData_data_Setter";
  data_Setter_(mthis, __arg_0) => data_Setter(mthis, __arg_0);

  static deleteData_Callback_0(mthis) native "CharacterData_deleteData_Callback";
  deleteData_Callback_0_(mthis) => deleteData_Callback_0(mthis);

  static deleteData_Callback_1(mthis, __arg_0) native "CharacterData_deleteData_Callback";
  deleteData_Callback_1_(mthis, __arg_0) => deleteData_Callback_1(mthis, __arg_0);

  static deleteData_Callback_2(mthis, __arg_0, __arg_1) native "CharacterData_deleteData_Callback";
  deleteData_Callback_2_(mthis, __arg_0, __arg_1) => deleteData_Callback_2(mthis, __arg_0, __arg_1);

  static deleteData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CharacterData_deleteData_Callback";
  deleteData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CharacterData_deleteData_Callback";
  deleteData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => deleteData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static insertData_Callback_0(mthis) native "CharacterData_insertData_Callback";
  insertData_Callback_0_(mthis) => insertData_Callback_0(mthis);

  static insertData_Callback_1(mthis, __arg_0) native "CharacterData_insertData_Callback";
  insertData_Callback_1_(mthis, __arg_0) => insertData_Callback_1(mthis, __arg_0);

  static insertData_Callback_2(mthis, __arg_0, __arg_1) native "CharacterData_insertData_Callback";
  insertData_Callback_2_(mthis, __arg_0, __arg_1) => insertData_Callback_2(mthis, __arg_0, __arg_1);

  static insertData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CharacterData_insertData_Callback";
  insertData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CharacterData_insertData_Callback";
  insertData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static length_Getter(mthis) native "CharacterData_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static nextElementSibling_Getter(mthis) native "CharacterData_nextElementSibling_Getter";
  nextElementSibling_Getter_(mthis) => nextElementSibling_Getter(mthis);

  static previousElementSibling_Getter(mthis) native "CharacterData_previousElementSibling_Getter";
  previousElementSibling_Getter_(mthis) => previousElementSibling_Getter(mthis);

  static replaceData_Callback_1(mthis, __arg_0) native "CharacterData_replaceData_Callback";
  replaceData_Callback_1_(mthis, __arg_0) => replaceData_Callback_1(mthis, __arg_0);

  static replaceData_Callback_2(mthis, __arg_0, __arg_1) native "CharacterData_replaceData_Callback";
  replaceData_Callback_2_(mthis, __arg_0, __arg_1) => replaceData_Callback_2(mthis, __arg_0, __arg_1);

  static replaceData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CharacterData_replaceData_Callback";
  replaceData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CharacterData_replaceData_Callback";
  replaceData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => replaceData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static replaceData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CharacterData_replaceData_Callback";
  replaceData_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => replaceData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static substringData_Callback_0(mthis) native "CharacterData_substringData_Callback";
  substringData_Callback_0_(mthis) => substringData_Callback_0(mthis);

  static substringData_Callback_1(mthis, __arg_0) native "CharacterData_substringData_Callback";
  substringData_Callback_1_(mthis, __arg_0) => substringData_Callback_1(mthis, __arg_0);

  static substringData_Callback_2(mthis, __arg_0, __arg_1) native "CharacterData_substringData_Callback";
  substringData_Callback_2_(mthis, __arg_0, __arg_1) => substringData_Callback_2(mthis, __arg_0, __arg_1);

  static substringData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CharacterData_substringData_Callback";
  substringData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => substringData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static substringData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CharacterData_substringData_Callback";
  substringData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => substringData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkCircularGeofencingRegion extends BlinkGeofencingRegion {
  static final instance = new BlinkCircularGeofencingRegion();

  static constructorCallback_0() native "CircularGeofencingRegion_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "CircularGeofencingRegion_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "CircularGeofencingRegion_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "CircularGeofencingRegion_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static latitude_Getter(mthis) native "CircularGeofencingRegion_latitude_Getter";
  latitude_Getter_(mthis) => latitude_Getter(mthis);

  static longitude_Getter(mthis) native "CircularGeofencingRegion_longitude_Getter";
  longitude_Getter_(mthis) => longitude_Getter(mthis);

  static radius_Getter(mthis) native "CircularGeofencingRegion_radius_Getter";
  radius_Getter_(mthis) => radius_Getter(mthis);

}

class BlinkClientRect {
  static final instance = new BlinkClientRect();

  static bottom_Getter(mthis) native "ClientRect_bottom_Getter";
  bottom_Getter_(mthis) => bottom_Getter(mthis);

  static height_Getter(mthis) native "ClientRect_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static left_Getter(mthis) native "ClientRect_left_Getter";
  left_Getter_(mthis) => left_Getter(mthis);

  static right_Getter(mthis) native "ClientRect_right_Getter";
  right_Getter_(mthis) => right_Getter(mthis);

  static top_Getter(mthis) native "ClientRect_top_Getter";
  top_Getter_(mthis) => top_Getter(mthis);

  static width_Getter(mthis) native "ClientRect_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

}

class BlinkClientRectList {
  static final instance = new BlinkClientRectList();

  static $__getter___Callback_1(mthis, __arg_0) native "ClientRectList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "ClientRectList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "ClientRectList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "ClientRectList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ClientRectList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "ClientRectList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkCloseEvent extends BlinkEvent {
  static final instance = new BlinkCloseEvent();

  static code_Getter(mthis) native "CloseEvent_code_Getter";
  code_Getter_(mthis) => code_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "CloseEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static reason_Getter(mthis) native "CloseEvent_reason_Getter";
  reason_Getter_(mthis) => reason_Getter(mthis);

  static wasClean_Getter(mthis) native "CloseEvent_wasClean_Getter";
  wasClean_Getter_(mthis) => wasClean_Getter(mthis);

}

class BlinkComment extends BlinkCharacterData {
  static final instance = new BlinkComment();

  static constructorCallback_0() native "Comment_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Comment_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Comment_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Comment_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

}

class BlinkCompositionEvent extends BlinkUIEvent {
  static final instance = new BlinkCompositionEvent();

  static activeSegmentEnd_Getter(mthis) native "CompositionEvent_activeSegmentEnd_Getter";
  activeSegmentEnd_Getter_(mthis) => activeSegmentEnd_Getter(mthis);

  static activeSegmentStart_Getter(mthis) native "CompositionEvent_activeSegmentStart_Getter";
  activeSegmentStart_Getter_(mthis) => activeSegmentStart_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "CompositionEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static data_Getter(mthis) native "CompositionEvent_data_Getter";
  data_Getter_(mthis) => data_Getter(mthis);

  static getSegments_Callback_0(mthis) native "CompositionEvent_getSegments_Callback";
  getSegments_Callback_0_(mthis) => getSegments_Callback_0(mthis);

  static getSegments_Callback_1(mthis, __arg_0) native "CompositionEvent_getSegments_Callback";
  getSegments_Callback_1_(mthis, __arg_0) => getSegments_Callback_1(mthis, __arg_0);

  static getSegments_Callback_2(mthis, __arg_0, __arg_1) native "CompositionEvent_getSegments_Callback";
  getSegments_Callback_2_(mthis, __arg_0, __arg_1) => getSegments_Callback_2(mthis, __arg_0, __arg_1);

  static initCompositionEvent_Callback_0(mthis) native "CompositionEvent_initCompositionEvent_Callback";
  initCompositionEvent_Callback_0_(mthis) => initCompositionEvent_Callback_0(mthis);

  static initCompositionEvent_Callback_1(mthis, __arg_0) native "CompositionEvent_initCompositionEvent_Callback";
  initCompositionEvent_Callback_1_(mthis, __arg_0) => initCompositionEvent_Callback_1(mthis, __arg_0);

  static initCompositionEvent_Callback_2(mthis, __arg_0, __arg_1) native "CompositionEvent_initCompositionEvent_Callback";
  initCompositionEvent_Callback_2_(mthis, __arg_0, __arg_1) => initCompositionEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initCompositionEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CompositionEvent_initCompositionEvent_Callback";
  initCompositionEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initCompositionEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initCompositionEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CompositionEvent_initCompositionEvent_Callback";
  initCompositionEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initCompositionEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initCompositionEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CompositionEvent_initCompositionEvent_Callback";
  initCompositionEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initCompositionEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initCompositionEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CompositionEvent_initCompositionEvent_Callback";
  initCompositionEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initCompositionEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initCompositionEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "CompositionEvent_initCompositionEvent_Callback";
  initCompositionEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initCompositionEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

}

class BlinkConsole extends BlinkConsoleBase {
  static final instance = new BlinkConsole();

  static memory_Getter(mthis) native "Console_memory_Getter";
  memory_Getter_(mthis) => memory_Getter(mthis);

}

class BlinkConsoleBase {
  static final instance = new BlinkConsoleBase();

  static assert_Callback_0(mthis) native "ConsoleBase_assert_Callback";
  assert_Callback_0_(mthis) => assert_Callback_0(mthis);

  static assert_Callback_1(mthis, __arg_0) native "ConsoleBase_assert_Callback";
  assert_Callback_1_(mthis, __arg_0) => assert_Callback_1(mthis, __arg_0);

  static assert_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_assert_Callback";
  assert_Callback_2_(mthis, __arg_0, __arg_1) => assert_Callback_2(mthis, __arg_0, __arg_1);

  static assert_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ConsoleBase_assert_Callback";
  assert_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => assert_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clear_Callback_0(mthis) native "ConsoleBase_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "ConsoleBase_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static count_Callback_0(mthis) native "ConsoleBase_count_Callback";
  count_Callback_0_(mthis) => count_Callback_0(mthis);

  static count_Callback_1(mthis, __arg_0) native "ConsoleBase_count_Callback";
  count_Callback_1_(mthis, __arg_0) => count_Callback_1(mthis, __arg_0);

  static count_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_count_Callback";
  count_Callback_2_(mthis, __arg_0, __arg_1) => count_Callback_2(mthis, __arg_0, __arg_1);

  static debug_Callback_0(mthis) native "ConsoleBase_debug_Callback";
  debug_Callback_0_(mthis) => debug_Callback_0(mthis);

  static debug_Callback_1(mthis, __arg_0) native "ConsoleBase_debug_Callback";
  debug_Callback_1_(mthis, __arg_0) => debug_Callback_1(mthis, __arg_0);

  static debug_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_debug_Callback";
  debug_Callback_2_(mthis, __arg_0, __arg_1) => debug_Callback_2(mthis, __arg_0, __arg_1);

  static dir_Callback_0(mthis) native "ConsoleBase_dir_Callback";
  dir_Callback_0_(mthis) => dir_Callback_0(mthis);

  static dir_Callback_1(mthis, __arg_0) native "ConsoleBase_dir_Callback";
  dir_Callback_1_(mthis, __arg_0) => dir_Callback_1(mthis, __arg_0);

  static dir_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_dir_Callback";
  dir_Callback_2_(mthis, __arg_0, __arg_1) => dir_Callback_2(mthis, __arg_0, __arg_1);

  static dirxml_Callback_0(mthis) native "ConsoleBase_dirxml_Callback";
  dirxml_Callback_0_(mthis) => dirxml_Callback_0(mthis);

  static dirxml_Callback_1(mthis, __arg_0) native "ConsoleBase_dirxml_Callback";
  dirxml_Callback_1_(mthis, __arg_0) => dirxml_Callback_1(mthis, __arg_0);

  static dirxml_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_dirxml_Callback";
  dirxml_Callback_2_(mthis, __arg_0, __arg_1) => dirxml_Callback_2(mthis, __arg_0, __arg_1);

  static error_Callback_0(mthis) native "ConsoleBase_error_Callback";
  error_Callback_0_(mthis) => error_Callback_0(mthis);

  static error_Callback_1(mthis, __arg_0) native "ConsoleBase_error_Callback";
  error_Callback_1_(mthis, __arg_0) => error_Callback_1(mthis, __arg_0);

  static error_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_error_Callback";
  error_Callback_2_(mthis, __arg_0, __arg_1) => error_Callback_2(mthis, __arg_0, __arg_1);

  static groupCollapsed_Callback_0(mthis) native "ConsoleBase_groupCollapsed_Callback";
  groupCollapsed_Callback_0_(mthis) => groupCollapsed_Callback_0(mthis);

  static groupCollapsed_Callback_1(mthis, __arg_0) native "ConsoleBase_groupCollapsed_Callback";
  groupCollapsed_Callback_1_(mthis, __arg_0) => groupCollapsed_Callback_1(mthis, __arg_0);

  static groupCollapsed_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_groupCollapsed_Callback";
  groupCollapsed_Callback_2_(mthis, __arg_0, __arg_1) => groupCollapsed_Callback_2(mthis, __arg_0, __arg_1);

  static groupEnd_Callback_0(mthis) native "ConsoleBase_groupEnd_Callback";
  groupEnd_Callback_0_(mthis) => groupEnd_Callback_0(mthis);

  static groupEnd_Callback_1(mthis, __arg_0) native "ConsoleBase_groupEnd_Callback";
  groupEnd_Callback_1_(mthis, __arg_0) => groupEnd_Callback_1(mthis, __arg_0);

  static groupEnd_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_groupEnd_Callback";
  groupEnd_Callback_2_(mthis, __arg_0, __arg_1) => groupEnd_Callback_2(mthis, __arg_0, __arg_1);

  static group_Callback_0(mthis) native "ConsoleBase_group_Callback";
  group_Callback_0_(mthis) => group_Callback_0(mthis);

  static group_Callback_1(mthis, __arg_0) native "ConsoleBase_group_Callback";
  group_Callback_1_(mthis, __arg_0) => group_Callback_1(mthis, __arg_0);

  static group_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_group_Callback";
  group_Callback_2_(mthis, __arg_0, __arg_1) => group_Callback_2(mthis, __arg_0, __arg_1);

  static info_Callback_0(mthis) native "ConsoleBase_info_Callback";
  info_Callback_0_(mthis) => info_Callback_0(mthis);

  static info_Callback_1(mthis, __arg_0) native "ConsoleBase_info_Callback";
  info_Callback_1_(mthis, __arg_0) => info_Callback_1(mthis, __arg_0);

  static info_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_info_Callback";
  info_Callback_2_(mthis, __arg_0, __arg_1) => info_Callback_2(mthis, __arg_0, __arg_1);

  static log_Callback_0(mthis) native "ConsoleBase_log_Callback";
  log_Callback_0_(mthis) => log_Callback_0(mthis);

  static log_Callback_1(mthis, __arg_0) native "ConsoleBase_log_Callback";
  log_Callback_1_(mthis, __arg_0) => log_Callback_1(mthis, __arg_0);

  static log_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_log_Callback";
  log_Callback_2_(mthis, __arg_0, __arg_1) => log_Callback_2(mthis, __arg_0, __arg_1);

  static markTimeline_Callback_0(mthis) native "ConsoleBase_markTimeline_Callback";
  markTimeline_Callback_0_(mthis) => markTimeline_Callback_0(mthis);

  static markTimeline_Callback_1(mthis, __arg_0) native "ConsoleBase_markTimeline_Callback";
  markTimeline_Callback_1_(mthis, __arg_0) => markTimeline_Callback_1(mthis, __arg_0);

  static markTimeline_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_markTimeline_Callback";
  markTimeline_Callback_2_(mthis, __arg_0, __arg_1) => markTimeline_Callback_2(mthis, __arg_0, __arg_1);

  static markTimeline_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ConsoleBase_markTimeline_Callback";
  markTimeline_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => markTimeline_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static profileEnd_Callback_0(mthis) native "ConsoleBase_profileEnd_Callback";
  profileEnd_Callback_0_(mthis) => profileEnd_Callback_0(mthis);

  static profileEnd_Callback_1(mthis, __arg_0) native "ConsoleBase_profileEnd_Callback";
  profileEnd_Callback_1_(mthis, __arg_0) => profileEnd_Callback_1(mthis, __arg_0);

  static profileEnd_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_profileEnd_Callback";
  profileEnd_Callback_2_(mthis, __arg_0, __arg_1) => profileEnd_Callback_2(mthis, __arg_0, __arg_1);

  static profileEnd_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ConsoleBase_profileEnd_Callback";
  profileEnd_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => profileEnd_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static profile_Callback_0(mthis) native "ConsoleBase_profile_Callback";
  profile_Callback_0_(mthis) => profile_Callback_0(mthis);

  static profile_Callback_1(mthis, __arg_0) native "ConsoleBase_profile_Callback";
  profile_Callback_1_(mthis, __arg_0) => profile_Callback_1(mthis, __arg_0);

  static profile_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_profile_Callback";
  profile_Callback_2_(mthis, __arg_0, __arg_1) => profile_Callback_2(mthis, __arg_0, __arg_1);

  static profile_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ConsoleBase_profile_Callback";
  profile_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => profile_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static table_Callback_0(mthis) native "ConsoleBase_table_Callback";
  table_Callback_0_(mthis) => table_Callback_0(mthis);

  static table_Callback_1(mthis, __arg_0) native "ConsoleBase_table_Callback";
  table_Callback_1_(mthis, __arg_0) => table_Callback_1(mthis, __arg_0);

  static table_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_table_Callback";
  table_Callback_2_(mthis, __arg_0, __arg_1) => table_Callback_2(mthis, __arg_0, __arg_1);

  static timeEnd_Callback_0(mthis) native "ConsoleBase_timeEnd_Callback";
  timeEnd_Callback_0_(mthis) => timeEnd_Callback_0(mthis);

  static timeEnd_Callback_1(mthis, __arg_0) native "ConsoleBase_timeEnd_Callback";
  timeEnd_Callback_1_(mthis, __arg_0) => timeEnd_Callback_1(mthis, __arg_0);

  static timeEnd_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_timeEnd_Callback";
  timeEnd_Callback_2_(mthis, __arg_0, __arg_1) => timeEnd_Callback_2(mthis, __arg_0, __arg_1);

  static timeEnd_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ConsoleBase_timeEnd_Callback";
  timeEnd_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => timeEnd_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static timeStamp_Callback_0(mthis) native "ConsoleBase_timeStamp_Callback";
  timeStamp_Callback_0_(mthis) => timeStamp_Callback_0(mthis);

  static timeStamp_Callback_1(mthis, __arg_0) native "ConsoleBase_timeStamp_Callback";
  timeStamp_Callback_1_(mthis, __arg_0) => timeStamp_Callback_1(mthis, __arg_0);

  static timeStamp_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_timeStamp_Callback";
  timeStamp_Callback_2_(mthis, __arg_0, __arg_1) => timeStamp_Callback_2(mthis, __arg_0, __arg_1);

  static timeStamp_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ConsoleBase_timeStamp_Callback";
  timeStamp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => timeStamp_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static time_Callback_0(mthis) native "ConsoleBase_time_Callback";
  time_Callback_0_(mthis) => time_Callback_0(mthis);

  static time_Callback_1(mthis, __arg_0) native "ConsoleBase_time_Callback";
  time_Callback_1_(mthis, __arg_0) => time_Callback_1(mthis, __arg_0);

  static time_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_time_Callback";
  time_Callback_2_(mthis, __arg_0, __arg_1) => time_Callback_2(mthis, __arg_0, __arg_1);

  static time_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ConsoleBase_time_Callback";
  time_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => time_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static timelineEnd_Callback_0(mthis) native "ConsoleBase_timelineEnd_Callback";
  timelineEnd_Callback_0_(mthis) => timelineEnd_Callback_0(mthis);

  static timelineEnd_Callback_1(mthis, __arg_0) native "ConsoleBase_timelineEnd_Callback";
  timelineEnd_Callback_1_(mthis, __arg_0) => timelineEnd_Callback_1(mthis, __arg_0);

  static timelineEnd_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_timelineEnd_Callback";
  timelineEnd_Callback_2_(mthis, __arg_0, __arg_1) => timelineEnd_Callback_2(mthis, __arg_0, __arg_1);

  static timelineEnd_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ConsoleBase_timelineEnd_Callback";
  timelineEnd_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => timelineEnd_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static timeline_Callback_0(mthis) native "ConsoleBase_timeline_Callback";
  timeline_Callback_0_(mthis) => timeline_Callback_0(mthis);

  static timeline_Callback_1(mthis, __arg_0) native "ConsoleBase_timeline_Callback";
  timeline_Callback_1_(mthis, __arg_0) => timeline_Callback_1(mthis, __arg_0);

  static timeline_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_timeline_Callback";
  timeline_Callback_2_(mthis, __arg_0, __arg_1) => timeline_Callback_2(mthis, __arg_0, __arg_1);

  static timeline_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ConsoleBase_timeline_Callback";
  timeline_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => timeline_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static trace_Callback_0(mthis) native "ConsoleBase_trace_Callback";
  trace_Callback_0_(mthis) => trace_Callback_0(mthis);

  static trace_Callback_1(mthis, __arg_0) native "ConsoleBase_trace_Callback";
  trace_Callback_1_(mthis, __arg_0) => trace_Callback_1(mthis, __arg_0);

  static trace_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_trace_Callback";
  trace_Callback_2_(mthis, __arg_0, __arg_1) => trace_Callback_2(mthis, __arg_0, __arg_1);

  static warn_Callback_0(mthis) native "ConsoleBase_warn_Callback";
  warn_Callback_0_(mthis) => warn_Callback_0(mthis);

  static warn_Callback_1(mthis, __arg_0) native "ConsoleBase_warn_Callback";
  warn_Callback_1_(mthis, __arg_0) => warn_Callback_1(mthis, __arg_0);

  static warn_Callback_2(mthis, __arg_0, __arg_1) native "ConsoleBase_warn_Callback";
  warn_Callback_2_(mthis, __arg_0, __arg_1) => warn_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkConvolverNode extends BlinkAudioNode {
  static final instance = new BlinkConvolverNode();

  static buffer_Getter(mthis) native "ConvolverNode_buffer_Getter";
  buffer_Getter_(mthis) => buffer_Getter(mthis);

  static buffer_Setter(mthis, __arg_0) native "ConvolverNode_buffer_Setter";
  buffer_Setter_(mthis, __arg_0) => buffer_Setter(mthis, __arg_0);

  static normalize_Getter(mthis) native "ConvolverNode_normalize_Getter";
  normalize_Getter_(mthis) => normalize_Getter(mthis);

  static normalize_Setter(mthis, __arg_0) native "ConvolverNode_normalize_Setter";
  normalize_Setter_(mthis, __arg_0) => normalize_Setter(mthis, __arg_0);

}

class BlinkCoordinates {
  static final instance = new BlinkCoordinates();

  static accuracy_Getter(mthis) native "Coordinates_accuracy_Getter";
  accuracy_Getter_(mthis) => accuracy_Getter(mthis);

  static altitudeAccuracy_Getter(mthis) native "Coordinates_altitudeAccuracy_Getter";
  altitudeAccuracy_Getter_(mthis) => altitudeAccuracy_Getter(mthis);

  static altitude_Getter(mthis) native "Coordinates_altitude_Getter";
  altitude_Getter_(mthis) => altitude_Getter(mthis);

  static heading_Getter(mthis) native "Coordinates_heading_Getter";
  heading_Getter_(mthis) => heading_Getter(mthis);

  static latitude_Getter(mthis) native "Coordinates_latitude_Getter";
  latitude_Getter_(mthis) => latitude_Getter(mthis);

  static longitude_Getter(mthis) native "Coordinates_longitude_Getter";
  longitude_Getter_(mthis) => longitude_Getter(mthis);

  static speed_Getter(mthis) native "Coordinates_speed_Getter";
  speed_Getter_(mthis) => speed_Getter(mthis);

}

class BlinkCounter {
  static final instance = new BlinkCounter();

  static identifier_Getter(mthis) native "Counter_identifier_Getter";
  identifier_Getter_(mthis) => identifier_Getter(mthis);

  static listStyle_Getter(mthis) native "Counter_listStyle_Getter";
  listStyle_Getter_(mthis) => listStyle_Getter(mthis);

  static separator_Getter(mthis) native "Counter_separator_Getter";
  separator_Getter_(mthis) => separator_Getter(mthis);

}

class BlinkCredential {
  static final instance = new BlinkCredential();

  static avatarURL_Getter(mthis) native "Credential_avatarURL_Getter";
  avatarURL_Getter_(mthis) => avatarURL_Getter(mthis);

  static id_Getter(mthis) native "Credential_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static name_Getter(mthis) native "Credential_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

}

class BlinkCredentialsContainer {
  static final instance = new BlinkCredentialsContainer();

  static notifyFailedSignIn_Callback_0(mthis) native "CredentialsContainer_notifyFailedSignIn_Callback";
  notifyFailedSignIn_Callback_0_(mthis) => notifyFailedSignIn_Callback_0(mthis);

  static notifyFailedSignIn_Callback_1(mthis, __arg_0) native "CredentialsContainer_notifyFailedSignIn_Callback";
  notifyFailedSignIn_Callback_1_(mthis, __arg_0) => notifyFailedSignIn_Callback_1(mthis, __arg_0);

  static notifyFailedSignIn_Callback_2(mthis, __arg_0, __arg_1) native "CredentialsContainer_notifyFailedSignIn_Callback";
  notifyFailedSignIn_Callback_2_(mthis, __arg_0, __arg_1) => notifyFailedSignIn_Callback_2(mthis, __arg_0, __arg_1);

  static notifyFailedSignIn_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CredentialsContainer_notifyFailedSignIn_Callback";
  notifyFailedSignIn_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => notifyFailedSignIn_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static notifySignedIn_Callback_0(mthis) native "CredentialsContainer_notifySignedIn_Callback";
  notifySignedIn_Callback_0_(mthis) => notifySignedIn_Callback_0(mthis);

  static notifySignedIn_Callback_1(mthis, __arg_0) native "CredentialsContainer_notifySignedIn_Callback";
  notifySignedIn_Callback_1_(mthis, __arg_0) => notifySignedIn_Callback_1(mthis, __arg_0);

  static notifySignedIn_Callback_2(mthis, __arg_0, __arg_1) native "CredentialsContainer_notifySignedIn_Callback";
  notifySignedIn_Callback_2_(mthis, __arg_0, __arg_1) => notifySignedIn_Callback_2(mthis, __arg_0, __arg_1);

  static notifySignedIn_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CredentialsContainer_notifySignedIn_Callback";
  notifySignedIn_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => notifySignedIn_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static notifySignedOut_Callback_0(mthis) native "CredentialsContainer_notifySignedOut_Callback";
  notifySignedOut_Callback_0_(mthis) => notifySignedOut_Callback_0(mthis);

  static notifySignedOut_Callback_1(mthis, __arg_0) native "CredentialsContainer_notifySignedOut_Callback";
  notifySignedOut_Callback_1_(mthis, __arg_0) => notifySignedOut_Callback_1(mthis, __arg_0);

  static notifySignedOut_Callback_2(mthis, __arg_0, __arg_1) native "CredentialsContainer_notifySignedOut_Callback";
  notifySignedOut_Callback_2_(mthis, __arg_0, __arg_1) => notifySignedOut_Callback_2(mthis, __arg_0, __arg_1);

  static request_Callback_0(mthis) native "CredentialsContainer_request_Callback";
  request_Callback_0_(mthis) => request_Callback_0(mthis);

  static request_Callback_1(mthis, __arg_0) native "CredentialsContainer_request_Callback";
  request_Callback_1_(mthis, __arg_0) => request_Callback_1(mthis, __arg_0);

  static request_Callback_2(mthis, __arg_0, __arg_1) native "CredentialsContainer_request_Callback";
  request_Callback_2_(mthis, __arg_0, __arg_1) => request_Callback_2(mthis, __arg_0, __arg_1);

  static request_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CredentialsContainer_request_Callback";
  request_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => request_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkCrypto {
  static final instance = new BlinkCrypto();

  static getRandomValues_Callback_0(mthis) native "Crypto_getRandomValues_Callback";
  getRandomValues_Callback_0_(mthis) => getRandomValues_Callback_0(mthis);

  static getRandomValues_Callback_1(mthis, __arg_0) native "Crypto_getRandomValues_Callback";
  getRandomValues_Callback_1_(mthis, __arg_0) => getRandomValues_Callback_1(mthis, __arg_0);

  static getRandomValues_Callback_2(mthis, __arg_0, __arg_1) native "Crypto_getRandomValues_Callback";
  getRandomValues_Callback_2_(mthis, __arg_0, __arg_1) => getRandomValues_Callback_2(mthis, __arg_0, __arg_1);

  static getRandomValues_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Crypto_getRandomValues_Callback";
  getRandomValues_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getRandomValues_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static subtle_Getter(mthis) native "Crypto_subtle_Getter";
  subtle_Getter_(mthis) => subtle_Getter(mthis);

}

class BlinkCryptoKey {
  static final instance = new BlinkCryptoKey();

  static algorithm_Getter(mthis) native "CryptoKey_algorithm_Getter";
  algorithm_Getter_(mthis) => algorithm_Getter(mthis);

  static extractable_Getter(mthis) native "CryptoKey_extractable_Getter";
  extractable_Getter_(mthis) => extractable_Getter(mthis);

  static type_Getter(mthis) native "CryptoKey_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static usages_Getter(mthis) native "CryptoKey_usages_Getter";
  usages_Getter_(mthis) => usages_Getter(mthis);

}

class BlinkCustomEvent extends BlinkEvent {
  static final instance = new BlinkCustomEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "CustomEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static detail_Getter(mthis) native "CustomEvent_detail_Getter";
  detail_Getter_(mthis) => detail_Getter(mthis);

  static initCustomEvent_Callback_0(mthis) native "CustomEvent_initCustomEvent_Callback";
  initCustomEvent_Callback_0_(mthis) => initCustomEvent_Callback_0(mthis);

  static initCustomEvent_Callback_1(mthis, __arg_0) native "CustomEvent_initCustomEvent_Callback";
  initCustomEvent_Callback_1_(mthis, __arg_0) => initCustomEvent_Callback_1(mthis, __arg_0);

  static initCustomEvent_Callback_2(mthis, __arg_0, __arg_1) native "CustomEvent_initCustomEvent_Callback";
  initCustomEvent_Callback_2_(mthis, __arg_0, __arg_1) => initCustomEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initCustomEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "CustomEvent_initCustomEvent_Callback";
  initCustomEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initCustomEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initCustomEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "CustomEvent_initCustomEvent_Callback";
  initCustomEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initCustomEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initCustomEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "CustomEvent_initCustomEvent_Callback";
  initCustomEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initCustomEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initCustomEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "CustomEvent_initCustomEvent_Callback";
  initCustomEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initCustomEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

}

class BlinkDOMError {
  static final instance = new BlinkDOMError();

  static constructorCallback_0() native "DOMError_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "DOMError_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "DOMError_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "DOMError_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "DOMError_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static message_Getter(mthis) native "DOMError_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

  static name_Getter(mthis) native "DOMError_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

}

class BlinkDOMException {
  static final instance = new BlinkDOMException();

  static message_Getter(mthis) native "DOMException_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

  static name_Getter(mthis) native "DOMException_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static toString_Callback_0(mthis) native "DOMException_toString_Callback";
  toString_Callback_0_(mthis) => toString_Callback_0(mthis);

  static toString_Callback_1(mthis, __arg_0) native "DOMException_toString_Callback";
  toString_Callback_1_(mthis, __arg_0) => toString_Callback_1(mthis, __arg_0);

  static toString_Callback_2(mthis, __arg_0, __arg_1) native "DOMException_toString_Callback";
  toString_Callback_2_(mthis, __arg_0, __arg_1) => toString_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkDOMFileSystem {
  static final instance = new BlinkDOMFileSystem();

  static name_Getter(mthis) native "DOMFileSystem_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static root_Getter(mthis) native "DOMFileSystem_root_Getter";
  root_Getter_(mthis) => root_Getter(mthis);

}

class BlinkDOMFileSystemSync {
  static final instance = new BlinkDOMFileSystemSync();

  static name_Getter(mthis) native "DOMFileSystemSync_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static root_Getter(mthis) native "DOMFileSystemSync_root_Getter";
  root_Getter_(mthis) => root_Getter(mthis);

}

class BlinkDOMImplementation {
  static final instance = new BlinkDOMImplementation();

  static createDocumentType_Callback_1(mthis, __arg_0) native "DOMImplementation_createDocumentType_Callback";
  createDocumentType_Callback_1_(mthis, __arg_0) => createDocumentType_Callback_1(mthis, __arg_0);

  static createDocumentType_Callback_2(mthis, __arg_0, __arg_1) native "DOMImplementation_createDocumentType_Callback";
  createDocumentType_Callback_2_(mthis, __arg_0, __arg_1) => createDocumentType_Callback_2(mthis, __arg_0, __arg_1);

  static createDocumentType_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMImplementation_createDocumentType_Callback";
  createDocumentType_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createDocumentType_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createDocumentType_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMImplementation_createDocumentType_Callback";
  createDocumentType_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createDocumentType_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createDocumentType_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMImplementation_createDocumentType_Callback";
  createDocumentType_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createDocumentType_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createDocument_Callback_0(mthis) native "DOMImplementation_createDocument_Callback";
  createDocument_Callback_0_(mthis) => createDocument_Callback_0(mthis);

  static createDocument_Callback_1(mthis, __arg_0) native "DOMImplementation_createDocument_Callback";
  createDocument_Callback_1_(mthis, __arg_0) => createDocument_Callback_1(mthis, __arg_0);

  static createDocument_Callback_2(mthis, __arg_0, __arg_1) native "DOMImplementation_createDocument_Callback";
  createDocument_Callback_2_(mthis, __arg_0, __arg_1) => createDocument_Callback_2(mthis, __arg_0, __arg_1);

  static createDocument_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMImplementation_createDocument_Callback";
  createDocument_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createDocument_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createDocument_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMImplementation_createDocument_Callback";
  createDocument_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createDocument_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createDocument_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMImplementation_createDocument_Callback";
  createDocument_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createDocument_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createHTMLDocument_Callback_0(mthis) native "DOMImplementation_createHTMLDocument_Callback";
  createHTMLDocument_Callback_0_(mthis) => createHTMLDocument_Callback_0(mthis);

  static createHTMLDocument_Callback_1(mthis, __arg_0) native "DOMImplementation_createHTMLDocument_Callback";
  createHTMLDocument_Callback_1_(mthis, __arg_0) => createHTMLDocument_Callback_1(mthis, __arg_0);

  static createHTMLDocument_Callback_2(mthis, __arg_0, __arg_1) native "DOMImplementation_createHTMLDocument_Callback";
  createHTMLDocument_Callback_2_(mthis, __arg_0, __arg_1) => createHTMLDocument_Callback_2(mthis, __arg_0, __arg_1);

  static createHTMLDocument_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMImplementation_createHTMLDocument_Callback";
  createHTMLDocument_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createHTMLDocument_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static hasFeature_Callback_0(mthis) native "DOMImplementation_hasFeature_Callback";
  hasFeature_Callback_0_(mthis) => hasFeature_Callback_0(mthis);

  static hasFeature_Callback_1(mthis, __arg_0) native "DOMImplementation_hasFeature_Callback";
  hasFeature_Callback_1_(mthis, __arg_0) => hasFeature_Callback_1(mthis, __arg_0);

  static hasFeature_Callback_2(mthis, __arg_0, __arg_1) native "DOMImplementation_hasFeature_Callback";
  hasFeature_Callback_2_(mthis, __arg_0, __arg_1) => hasFeature_Callback_2(mthis, __arg_0, __arg_1);

  static hasFeature_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMImplementation_hasFeature_Callback";
  hasFeature_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => hasFeature_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static hasFeature_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMImplementation_hasFeature_Callback";
  hasFeature_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => hasFeature_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkDOMMatrix extends BlinkDOMMatrixReadOnly {
  static final instance = new BlinkDOMMatrix();

  static a_Getter(mthis) native "DOMMatrix_a_Getter";
  a_Getter_(mthis) => a_Getter(mthis);

  static a_Setter(mthis, __arg_0) native "DOMMatrix_a_Setter";
  a_Setter_(mthis, __arg_0) => a_Setter(mthis, __arg_0);

  static b_Getter(mthis) native "DOMMatrix_b_Getter";
  b_Getter_(mthis) => b_Getter(mthis);

  static b_Setter(mthis, __arg_0) native "DOMMatrix_b_Setter";
  b_Setter_(mthis, __arg_0) => b_Setter(mthis, __arg_0);

  static c_Getter(mthis) native "DOMMatrix_c_Getter";
  c_Getter_(mthis) => c_Getter(mthis);

  static c_Setter(mthis, __arg_0) native "DOMMatrix_c_Setter";
  c_Setter_(mthis, __arg_0) => c_Setter(mthis, __arg_0);

  static constructorCallback_0() native "DOMMatrix_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "DOMMatrix_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "DOMMatrix_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "DOMMatrix_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static d_Getter(mthis) native "DOMMatrix_d_Getter";
  d_Getter_(mthis) => d_Getter(mthis);

  static d_Setter(mthis, __arg_0) native "DOMMatrix_d_Setter";
  d_Setter_(mthis, __arg_0) => d_Setter(mthis, __arg_0);

  static e_Getter(mthis) native "DOMMatrix_e_Getter";
  e_Getter_(mthis) => e_Getter(mthis);

  static e_Setter(mthis, __arg_0) native "DOMMatrix_e_Setter";
  e_Setter_(mthis, __arg_0) => e_Setter(mthis, __arg_0);

  static f_Getter(mthis) native "DOMMatrix_f_Getter";
  f_Getter_(mthis) => f_Getter(mthis);

  static f_Setter(mthis, __arg_0) native "DOMMatrix_f_Setter";
  f_Setter_(mthis, __arg_0) => f_Setter(mthis, __arg_0);

  static m11_Getter(mthis) native "DOMMatrix_m11_Getter";
  m11_Getter_(mthis) => m11_Getter(mthis);

  static m11_Setter(mthis, __arg_0) native "DOMMatrix_m11_Setter";
  m11_Setter_(mthis, __arg_0) => m11_Setter(mthis, __arg_0);

  static m12_Getter(mthis) native "DOMMatrix_m12_Getter";
  m12_Getter_(mthis) => m12_Getter(mthis);

  static m12_Setter(mthis, __arg_0) native "DOMMatrix_m12_Setter";
  m12_Setter_(mthis, __arg_0) => m12_Setter(mthis, __arg_0);

  static m13_Getter(mthis) native "DOMMatrix_m13_Getter";
  m13_Getter_(mthis) => m13_Getter(mthis);

  static m13_Setter(mthis, __arg_0) native "DOMMatrix_m13_Setter";
  m13_Setter_(mthis, __arg_0) => m13_Setter(mthis, __arg_0);

  static m14_Getter(mthis) native "DOMMatrix_m14_Getter";
  m14_Getter_(mthis) => m14_Getter(mthis);

  static m14_Setter(mthis, __arg_0) native "DOMMatrix_m14_Setter";
  m14_Setter_(mthis, __arg_0) => m14_Setter(mthis, __arg_0);

  static m21_Getter(mthis) native "DOMMatrix_m21_Getter";
  m21_Getter_(mthis) => m21_Getter(mthis);

  static m21_Setter(mthis, __arg_0) native "DOMMatrix_m21_Setter";
  m21_Setter_(mthis, __arg_0) => m21_Setter(mthis, __arg_0);

  static m22_Getter(mthis) native "DOMMatrix_m22_Getter";
  m22_Getter_(mthis) => m22_Getter(mthis);

  static m22_Setter(mthis, __arg_0) native "DOMMatrix_m22_Setter";
  m22_Setter_(mthis, __arg_0) => m22_Setter(mthis, __arg_0);

  static m23_Getter(mthis) native "DOMMatrix_m23_Getter";
  m23_Getter_(mthis) => m23_Getter(mthis);

  static m23_Setter(mthis, __arg_0) native "DOMMatrix_m23_Setter";
  m23_Setter_(mthis, __arg_0) => m23_Setter(mthis, __arg_0);

  static m24_Getter(mthis) native "DOMMatrix_m24_Getter";
  m24_Getter_(mthis) => m24_Getter(mthis);

  static m24_Setter(mthis, __arg_0) native "DOMMatrix_m24_Setter";
  m24_Setter_(mthis, __arg_0) => m24_Setter(mthis, __arg_0);

  static m31_Getter(mthis) native "DOMMatrix_m31_Getter";
  m31_Getter_(mthis) => m31_Getter(mthis);

  static m31_Setter(mthis, __arg_0) native "DOMMatrix_m31_Setter";
  m31_Setter_(mthis, __arg_0) => m31_Setter(mthis, __arg_0);

  static m32_Getter(mthis) native "DOMMatrix_m32_Getter";
  m32_Getter_(mthis) => m32_Getter(mthis);

  static m32_Setter(mthis, __arg_0) native "DOMMatrix_m32_Setter";
  m32_Setter_(mthis, __arg_0) => m32_Setter(mthis, __arg_0);

  static m33_Getter(mthis) native "DOMMatrix_m33_Getter";
  m33_Getter_(mthis) => m33_Getter(mthis);

  static m33_Setter(mthis, __arg_0) native "DOMMatrix_m33_Setter";
  m33_Setter_(mthis, __arg_0) => m33_Setter(mthis, __arg_0);

  static m34_Getter(mthis) native "DOMMatrix_m34_Getter";
  m34_Getter_(mthis) => m34_Getter(mthis);

  static m34_Setter(mthis, __arg_0) native "DOMMatrix_m34_Setter";
  m34_Setter_(mthis, __arg_0) => m34_Setter(mthis, __arg_0);

  static m41_Getter(mthis) native "DOMMatrix_m41_Getter";
  m41_Getter_(mthis) => m41_Getter(mthis);

  static m41_Setter(mthis, __arg_0) native "DOMMatrix_m41_Setter";
  m41_Setter_(mthis, __arg_0) => m41_Setter(mthis, __arg_0);

  static m42_Getter(mthis) native "DOMMatrix_m42_Getter";
  m42_Getter_(mthis) => m42_Getter(mthis);

  static m42_Setter(mthis, __arg_0) native "DOMMatrix_m42_Setter";
  m42_Setter_(mthis, __arg_0) => m42_Setter(mthis, __arg_0);

  static m43_Getter(mthis) native "DOMMatrix_m43_Getter";
  m43_Getter_(mthis) => m43_Getter(mthis);

  static m43_Setter(mthis, __arg_0) native "DOMMatrix_m43_Setter";
  m43_Setter_(mthis, __arg_0) => m43_Setter(mthis, __arg_0);

  static m44_Getter(mthis) native "DOMMatrix_m44_Getter";
  m44_Getter_(mthis) => m44_Getter(mthis);

  static m44_Setter(mthis, __arg_0) native "DOMMatrix_m44_Setter";
  m44_Setter_(mthis, __arg_0) => m44_Setter(mthis, __arg_0);

  static multiplySelf_Callback_0(mthis) native "DOMMatrix_multiplySelf_Callback";
  multiplySelf_Callback_0_(mthis) => multiplySelf_Callback_0(mthis);

  static multiplySelf_Callback_1(mthis, __arg_0) native "DOMMatrix_multiplySelf_Callback";
  multiplySelf_Callback_1_(mthis, __arg_0) => multiplySelf_Callback_1(mthis, __arg_0);

  static multiplySelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_multiplySelf_Callback";
  multiplySelf_Callback_2_(mthis, __arg_0, __arg_1) => multiplySelf_Callback_2(mthis, __arg_0, __arg_1);

  static multiplySelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_multiplySelf_Callback";
  multiplySelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => multiplySelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static preMultiplySelf_Callback_0(mthis) native "DOMMatrix_preMultiplySelf_Callback";
  preMultiplySelf_Callback_0_(mthis) => preMultiplySelf_Callback_0(mthis);

  static preMultiplySelf_Callback_1(mthis, __arg_0) native "DOMMatrix_preMultiplySelf_Callback";
  preMultiplySelf_Callback_1_(mthis, __arg_0) => preMultiplySelf_Callback_1(mthis, __arg_0);

  static preMultiplySelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_preMultiplySelf_Callback";
  preMultiplySelf_Callback_2_(mthis, __arg_0, __arg_1) => preMultiplySelf_Callback_2(mthis, __arg_0, __arg_1);

  static preMultiplySelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_preMultiplySelf_Callback";
  preMultiplySelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => preMultiplySelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scale3dSelf_Callback_0(mthis) native "DOMMatrix_scale3dSelf_Callback";
  scale3dSelf_Callback_0_(mthis) => scale3dSelf_Callback_0(mthis);

  static scale3dSelf_Callback_1(mthis, __arg_0) native "DOMMatrix_scale3dSelf_Callback";
  scale3dSelf_Callback_1_(mthis, __arg_0) => scale3dSelf_Callback_1(mthis, __arg_0);

  static scale3dSelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_scale3dSelf_Callback";
  scale3dSelf_Callback_2_(mthis, __arg_0, __arg_1) => scale3dSelf_Callback_2(mthis, __arg_0, __arg_1);

  static scale3dSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_scale3dSelf_Callback";
  scale3dSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scale3dSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scale3dSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrix_scale3dSelf_Callback";
  scale3dSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scale3dSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scale3dSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrix_scale3dSelf_Callback";
  scale3dSelf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scale3dSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static scale3dSelf_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMMatrix_scale3dSelf_Callback";
  scale3dSelf_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => scale3dSelf_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static scaleNonUniformSelf_Callback_0(mthis) native "DOMMatrix_scaleNonUniformSelf_Callback";
  scaleNonUniformSelf_Callback_0_(mthis) => scaleNonUniformSelf_Callback_0(mthis);

  static scaleNonUniformSelf_Callback_1(mthis, __arg_0) native "DOMMatrix_scaleNonUniformSelf_Callback";
  scaleNonUniformSelf_Callback_1_(mthis, __arg_0) => scaleNonUniformSelf_Callback_1(mthis, __arg_0);

  static scaleNonUniformSelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_scaleNonUniformSelf_Callback";
  scaleNonUniformSelf_Callback_2_(mthis, __arg_0, __arg_1) => scaleNonUniformSelf_Callback_2(mthis, __arg_0, __arg_1);

  static scaleNonUniformSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_scaleNonUniformSelf_Callback";
  scaleNonUniformSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scaleNonUniformSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scaleNonUniformSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrix_scaleNonUniformSelf_Callback";
  scaleNonUniformSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scaleNonUniformSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scaleNonUniformSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrix_scaleNonUniformSelf_Callback";
  scaleNonUniformSelf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scaleNonUniformSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static scaleNonUniformSelf_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMMatrix_scaleNonUniformSelf_Callback";
  scaleNonUniformSelf_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => scaleNonUniformSelf_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static scaleNonUniformSelf_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "DOMMatrix_scaleNonUniformSelf_Callback";
  scaleNonUniformSelf_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => scaleNonUniformSelf_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static scaleNonUniformSelf_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "DOMMatrix_scaleNonUniformSelf_Callback";
  scaleNonUniformSelf_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => scaleNonUniformSelf_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static scaleSelf_Callback_0(mthis) native "DOMMatrix_scaleSelf_Callback";
  scaleSelf_Callback_0_(mthis) => scaleSelf_Callback_0(mthis);

  static scaleSelf_Callback_1(mthis, __arg_0) native "DOMMatrix_scaleSelf_Callback";
  scaleSelf_Callback_1_(mthis, __arg_0) => scaleSelf_Callback_1(mthis, __arg_0);

  static scaleSelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_scaleSelf_Callback";
  scaleSelf_Callback_2_(mthis, __arg_0, __arg_1) => scaleSelf_Callback_2(mthis, __arg_0, __arg_1);

  static scaleSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_scaleSelf_Callback";
  scaleSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scaleSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scaleSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrix_scaleSelf_Callback";
  scaleSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scaleSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scaleSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrix_scaleSelf_Callback";
  scaleSelf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scaleSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static translateSelf_Callback_0(mthis) native "DOMMatrix_translateSelf_Callback";
  translateSelf_Callback_0_(mthis) => translateSelf_Callback_0(mthis);

  static translateSelf_Callback_1(mthis, __arg_0) native "DOMMatrix_translateSelf_Callback";
  translateSelf_Callback_1_(mthis, __arg_0) => translateSelf_Callback_1(mthis, __arg_0);

  static translateSelf_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrix_translateSelf_Callback";
  translateSelf_Callback_2_(mthis, __arg_0, __arg_1) => translateSelf_Callback_2(mthis, __arg_0, __arg_1);

  static translateSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrix_translateSelf_Callback";
  translateSelf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => translateSelf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static translateSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrix_translateSelf_Callback";
  translateSelf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => translateSelf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static translateSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrix_translateSelf_Callback";
  translateSelf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => translateSelf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkDOMMatrixReadOnly {
  static final instance = new BlinkDOMMatrixReadOnly();

  static a_Getter(mthis) native "DOMMatrixReadOnly_a_Getter";
  a_Getter_(mthis) => a_Getter(mthis);

  static b_Getter(mthis) native "DOMMatrixReadOnly_b_Getter";
  b_Getter_(mthis) => b_Getter(mthis);

  static c_Getter(mthis) native "DOMMatrixReadOnly_c_Getter";
  c_Getter_(mthis) => c_Getter(mthis);

  static d_Getter(mthis) native "DOMMatrixReadOnly_d_Getter";
  d_Getter_(mthis) => d_Getter(mthis);

  static e_Getter(mthis) native "DOMMatrixReadOnly_e_Getter";
  e_Getter_(mthis) => e_Getter(mthis);

  static f_Getter(mthis) native "DOMMatrixReadOnly_f_Getter";
  f_Getter_(mthis) => f_Getter(mthis);

  static is2D_Getter(mthis) native "DOMMatrixReadOnly_is2D_Getter";
  is2D_Getter_(mthis) => is2D_Getter(mthis);

  static isIdentity_Getter(mthis) native "DOMMatrixReadOnly_isIdentity_Getter";
  isIdentity_Getter_(mthis) => isIdentity_Getter(mthis);

  static m11_Getter(mthis) native "DOMMatrixReadOnly_m11_Getter";
  m11_Getter_(mthis) => m11_Getter(mthis);

  static m12_Getter(mthis) native "DOMMatrixReadOnly_m12_Getter";
  m12_Getter_(mthis) => m12_Getter(mthis);

  static m13_Getter(mthis) native "DOMMatrixReadOnly_m13_Getter";
  m13_Getter_(mthis) => m13_Getter(mthis);

  static m14_Getter(mthis) native "DOMMatrixReadOnly_m14_Getter";
  m14_Getter_(mthis) => m14_Getter(mthis);

  static m21_Getter(mthis) native "DOMMatrixReadOnly_m21_Getter";
  m21_Getter_(mthis) => m21_Getter(mthis);

  static m22_Getter(mthis) native "DOMMatrixReadOnly_m22_Getter";
  m22_Getter_(mthis) => m22_Getter(mthis);

  static m23_Getter(mthis) native "DOMMatrixReadOnly_m23_Getter";
  m23_Getter_(mthis) => m23_Getter(mthis);

  static m24_Getter(mthis) native "DOMMatrixReadOnly_m24_Getter";
  m24_Getter_(mthis) => m24_Getter(mthis);

  static m31_Getter(mthis) native "DOMMatrixReadOnly_m31_Getter";
  m31_Getter_(mthis) => m31_Getter(mthis);

  static m32_Getter(mthis) native "DOMMatrixReadOnly_m32_Getter";
  m32_Getter_(mthis) => m32_Getter(mthis);

  static m33_Getter(mthis) native "DOMMatrixReadOnly_m33_Getter";
  m33_Getter_(mthis) => m33_Getter(mthis);

  static m34_Getter(mthis) native "DOMMatrixReadOnly_m34_Getter";
  m34_Getter_(mthis) => m34_Getter(mthis);

  static m41_Getter(mthis) native "DOMMatrixReadOnly_m41_Getter";
  m41_Getter_(mthis) => m41_Getter(mthis);

  static m42_Getter(mthis) native "DOMMatrixReadOnly_m42_Getter";
  m42_Getter_(mthis) => m42_Getter(mthis);

  static m43_Getter(mthis) native "DOMMatrixReadOnly_m43_Getter";
  m43_Getter_(mthis) => m43_Getter(mthis);

  static m44_Getter(mthis) native "DOMMatrixReadOnly_m44_Getter";
  m44_Getter_(mthis) => m44_Getter(mthis);

  static multiply_Callback_0(mthis) native "DOMMatrixReadOnly_multiply_Callback";
  multiply_Callback_0_(mthis) => multiply_Callback_0(mthis);

  static multiply_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_multiply_Callback";
  multiply_Callback_1_(mthis, __arg_0) => multiply_Callback_1(mthis, __arg_0);

  static multiply_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_multiply_Callback";
  multiply_Callback_2_(mthis, __arg_0, __arg_1) => multiply_Callback_2(mthis, __arg_0, __arg_1);

  static multiply_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_multiply_Callback";
  multiply_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => multiply_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scale3d_Callback_0(mthis) native "DOMMatrixReadOnly_scale3d_Callback";
  scale3d_Callback_0_(mthis) => scale3d_Callback_0(mthis);

  static scale3d_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_scale3d_Callback";
  scale3d_Callback_1_(mthis, __arg_0) => scale3d_Callback_1(mthis, __arg_0);

  static scale3d_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_scale3d_Callback";
  scale3d_Callback_2_(mthis, __arg_0, __arg_1) => scale3d_Callback_2(mthis, __arg_0, __arg_1);

  static scale3d_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_scale3d_Callback";
  scale3d_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scale3d_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scale3d_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrixReadOnly_scale3d_Callback";
  scale3d_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scale3d_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scale3d_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrixReadOnly_scale3d_Callback";
  scale3d_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scale3d_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static scale3d_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMMatrixReadOnly_scale3d_Callback";
  scale3d_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => scale3d_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static scaleNonUniform_Callback_0(mthis) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
  scaleNonUniform_Callback_0_(mthis) => scaleNonUniform_Callback_0(mthis);

  static scaleNonUniform_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
  scaleNonUniform_Callback_1_(mthis, __arg_0) => scaleNonUniform_Callback_1(mthis, __arg_0);

  static scaleNonUniform_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
  scaleNonUniform_Callback_2_(mthis, __arg_0, __arg_1) => scaleNonUniform_Callback_2(mthis, __arg_0, __arg_1);

  static scaleNonUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
  scaleNonUniform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scaleNonUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scaleNonUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
  scaleNonUniform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scaleNonUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scaleNonUniform_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
  scaleNonUniform_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scaleNonUniform_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static scaleNonUniform_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
  scaleNonUniform_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => scaleNonUniform_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static scaleNonUniform_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
  scaleNonUniform_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => scaleNonUniform_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static scaleNonUniform_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "DOMMatrixReadOnly_scaleNonUniform_Callback";
  scaleNonUniform_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => scaleNonUniform_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static scale_Callback_0(mthis) native "DOMMatrixReadOnly_scale_Callback";
  scale_Callback_0_(mthis) => scale_Callback_0(mthis);

  static scale_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_scale_Callback";
  scale_Callback_1_(mthis, __arg_0) => scale_Callback_1(mthis, __arg_0);

  static scale_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_scale_Callback";
  scale_Callback_2_(mthis, __arg_0, __arg_1) => scale_Callback_2(mthis, __arg_0, __arg_1);

  static scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_scale_Callback";
  scale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrixReadOnly_scale_Callback";
  scale_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scale_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrixReadOnly_scale_Callback";
  scale_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scale_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static toFloat32Array_Callback_0(mthis) native "DOMMatrixReadOnly_toFloat32Array_Callback";
  toFloat32Array_Callback_0_(mthis) => toFloat32Array_Callback_0(mthis);

  static toFloat32Array_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_toFloat32Array_Callback";
  toFloat32Array_Callback_1_(mthis, __arg_0) => toFloat32Array_Callback_1(mthis, __arg_0);

  static toFloat32Array_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_toFloat32Array_Callback";
  toFloat32Array_Callback_2_(mthis, __arg_0, __arg_1) => toFloat32Array_Callback_2(mthis, __arg_0, __arg_1);

  static toFloat64Array_Callback_0(mthis) native "DOMMatrixReadOnly_toFloat64Array_Callback";
  toFloat64Array_Callback_0_(mthis) => toFloat64Array_Callback_0(mthis);

  static toFloat64Array_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_toFloat64Array_Callback";
  toFloat64Array_Callback_1_(mthis, __arg_0) => toFloat64Array_Callback_1(mthis, __arg_0);

  static toFloat64Array_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_toFloat64Array_Callback";
  toFloat64Array_Callback_2_(mthis, __arg_0, __arg_1) => toFloat64Array_Callback_2(mthis, __arg_0, __arg_1);

  static translate_Callback_0(mthis) native "DOMMatrixReadOnly_translate_Callback";
  translate_Callback_0_(mthis) => translate_Callback_0(mthis);

  static translate_Callback_1(mthis, __arg_0) native "DOMMatrixReadOnly_translate_Callback";
  translate_Callback_1_(mthis, __arg_0) => translate_Callback_1(mthis, __arg_0);

  static translate_Callback_2(mthis, __arg_0, __arg_1) native "DOMMatrixReadOnly_translate_Callback";
  translate_Callback_2_(mthis, __arg_0, __arg_1) => translate_Callback_2(mthis, __arg_0, __arg_1);

  static translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMMatrixReadOnly_translate_Callback";
  translate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMMatrixReadOnly_translate_Callback";
  translate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static translate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMMatrixReadOnly_translate_Callback";
  translate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => translate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkDOMParser {
  static final instance = new BlinkDOMParser();

  static constructorCallback_0() native "DOMParser_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "DOMParser_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "DOMParser_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static parseFromString_Callback_0(mthis) native "DOMParser_parseFromString_Callback";
  parseFromString_Callback_0_(mthis) => parseFromString_Callback_0(mthis);

  static parseFromString_Callback_1(mthis, __arg_0) native "DOMParser_parseFromString_Callback";
  parseFromString_Callback_1_(mthis, __arg_0) => parseFromString_Callback_1(mthis, __arg_0);

  static parseFromString_Callback_2(mthis, __arg_0, __arg_1) native "DOMParser_parseFromString_Callback";
  parseFromString_Callback_2_(mthis, __arg_0, __arg_1) => parseFromString_Callback_2(mthis, __arg_0, __arg_1);

  static parseFromString_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMParser_parseFromString_Callback";
  parseFromString_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => parseFromString_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static parseFromString_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMParser_parseFromString_Callback";
  parseFromString_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => parseFromString_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkDOMPoint extends BlinkDOMPointReadOnly {
  static final instance = new BlinkDOMPoint();

  static constructorCallback_0() native "DOMPoint_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "DOMPoint_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "DOMPoint_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "DOMPoint_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "DOMPoint_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMPoint_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMPoint_constructorCallback";
  constructorCallback_6_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static w_Getter(mthis) native "DOMPoint_w_Getter";
  w_Getter_(mthis) => w_Getter(mthis);

  static w_Setter(mthis, __arg_0) native "DOMPoint_w_Setter";
  w_Setter_(mthis, __arg_0) => w_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "DOMPoint_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "DOMPoint_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "DOMPoint_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "DOMPoint_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

  static z_Getter(mthis) native "DOMPoint_z_Getter";
  z_Getter_(mthis) => z_Getter(mthis);

  static z_Setter(mthis, __arg_0) native "DOMPoint_z_Setter";
  z_Setter_(mthis, __arg_0) => z_Setter(mthis, __arg_0);

}

class BlinkDOMPointReadOnly {
  static final instance = new BlinkDOMPointReadOnly();

  static constructorCallback_2(__arg_0, __arg_1) native "DOMPointReadOnly_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "DOMPointReadOnly_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "DOMPointReadOnly_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMPointReadOnly_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMPointReadOnly_constructorCallback";
  constructorCallback_6_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static w_Getter(mthis) native "DOMPointReadOnly_w_Getter";
  w_Getter_(mthis) => w_Getter(mthis);

  static x_Getter(mthis) native "DOMPointReadOnly_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "DOMPointReadOnly_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static z_Getter(mthis) native "DOMPointReadOnly_z_Getter";
  z_Getter_(mthis) => z_Getter(mthis);

}

class BlinkDOMRect extends BlinkDOMRectReadOnly {
  static final instance = new BlinkDOMRect();

  static constructorCallback_0() native "DOMRect_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "DOMRect_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "DOMRect_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "DOMRect_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "DOMRect_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMRect_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMRect_constructorCallback";
  constructorCallback_6_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static height_Getter(mthis) native "DOMRect_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "DOMRect_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static width_Getter(mthis) native "DOMRect_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "DOMRect_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "DOMRect_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "DOMRect_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "DOMRect_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "DOMRect_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkDOMRectReadOnly {
  static final instance = new BlinkDOMRectReadOnly();

  static bottom_Getter(mthis) native "DOMRectReadOnly_bottom_Getter";
  bottom_Getter_(mthis) => bottom_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "DOMRectReadOnly_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "DOMRectReadOnly_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "DOMRectReadOnly_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DOMRectReadOnly_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DOMRectReadOnly_constructorCallback";
  constructorCallback_6_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static height_Getter(mthis) native "DOMRectReadOnly_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static left_Getter(mthis) native "DOMRectReadOnly_left_Getter";
  left_Getter_(mthis) => left_Getter(mthis);

  static right_Getter(mthis) native "DOMRectReadOnly_right_Getter";
  right_Getter_(mthis) => right_Getter(mthis);

  static top_Getter(mthis) native "DOMRectReadOnly_top_Getter";
  top_Getter_(mthis) => top_Getter(mthis);

  static width_Getter(mthis) native "DOMRectReadOnly_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "DOMRectReadOnly_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "DOMRectReadOnly_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkDOMSettableTokenList extends BlinkDOMTokenList {
  static final instance = new BlinkDOMSettableTokenList();

  static $__getter___Callback_1(mthis, __arg_0) native "DOMSettableTokenList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static value_Getter(mthis) native "DOMSettableTokenList_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "DOMSettableTokenList_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkDOMStringList {
  static final instance = new BlinkDOMStringList();

  static $__getter___Callback_1(mthis, __arg_0) native "DOMStringList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static contains_Callback_0(mthis) native "DOMStringList_contains_Callback";
  contains_Callback_0_(mthis) => contains_Callback_0(mthis);

  static contains_Callback_1(mthis, __arg_0) native "DOMStringList_contains_Callback";
  contains_Callback_1_(mthis, __arg_0) => contains_Callback_1(mthis, __arg_0);

  static contains_Callback_2(mthis, __arg_0, __arg_1) native "DOMStringList_contains_Callback";
  contains_Callback_2_(mthis, __arg_0, __arg_1) => contains_Callback_2(mthis, __arg_0, __arg_1);

  static contains_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMStringList_contains_Callback";
  contains_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => contains_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static item_Callback_0(mthis) native "DOMStringList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "DOMStringList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "DOMStringList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMStringList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "DOMStringList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkDOMStringMap {
  static final instance = new BlinkDOMStringMap();

  static $__delete___Callback_1(mthis, __arg_0) native "DOMStringMap___delete___Callback";
  $__delete___Callback_1_(mthis, __arg_0) => $__delete___Callback_1(mthis, __arg_0);

  static $__getter___Callback_1(mthis, __arg_0) native "DOMStringMap___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "DOMStringMap___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkDOMTokenList {
  static final instance = new BlinkDOMTokenList();

  static $__getter___Callback_1(mthis, __arg_0) native "DOMTokenList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static add_Callback_0(mthis) native "DOMTokenList_add_Callback";
  add_Callback_0_(mthis) => add_Callback_0(mthis);

  static add_Callback_1(mthis, __arg_0) native "DOMTokenList_add_Callback";
  add_Callback_1_(mthis, __arg_0) => add_Callback_1(mthis, __arg_0);

  static add_Callback_2(mthis, __arg_0, __arg_1) native "DOMTokenList_add_Callback";
  add_Callback_2_(mthis, __arg_0, __arg_1) => add_Callback_2(mthis, __arg_0, __arg_1);

  static add_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMTokenList_add_Callback";
  add_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => add_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static contains_Callback_0(mthis) native "DOMTokenList_contains_Callback";
  contains_Callback_0_(mthis) => contains_Callback_0(mthis);

  static contains_Callback_1(mthis, __arg_0) native "DOMTokenList_contains_Callback";
  contains_Callback_1_(mthis, __arg_0) => contains_Callback_1(mthis, __arg_0);

  static contains_Callback_2(mthis, __arg_0, __arg_1) native "DOMTokenList_contains_Callback";
  contains_Callback_2_(mthis, __arg_0, __arg_1) => contains_Callback_2(mthis, __arg_0, __arg_1);

  static contains_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMTokenList_contains_Callback";
  contains_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => contains_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static item_Callback_0(mthis) native "DOMTokenList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "DOMTokenList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "DOMTokenList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMTokenList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "DOMTokenList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static remove_Callback_0(mthis) native "DOMTokenList_remove_Callback";
  remove_Callback_0_(mthis) => remove_Callback_0(mthis);

  static remove_Callback_1(mthis, __arg_0) native "DOMTokenList_remove_Callback";
  remove_Callback_1_(mthis, __arg_0) => remove_Callback_1(mthis, __arg_0);

  static remove_Callback_2(mthis, __arg_0, __arg_1) native "DOMTokenList_remove_Callback";
  remove_Callback_2_(mthis, __arg_0, __arg_1) => remove_Callback_2(mthis, __arg_0, __arg_1);

  static remove_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMTokenList_remove_Callback";
  remove_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => remove_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static toggle_Callback_0(mthis) native "DOMTokenList_toggle_Callback";
  toggle_Callback_0_(mthis) => toggle_Callback_0(mthis);

  static toggle_Callback_1(mthis, __arg_0) native "DOMTokenList_toggle_Callback";
  toggle_Callback_1_(mthis, __arg_0) => toggle_Callback_1(mthis, __arg_0);

  static toggle_Callback_2(mthis, __arg_0, __arg_1) native "DOMTokenList_toggle_Callback";
  toggle_Callback_2_(mthis, __arg_0, __arg_1) => toggle_Callback_2(mthis, __arg_0, __arg_1);

  static toggle_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DOMTokenList_toggle_Callback";
  toggle_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => toggle_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static toggle_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DOMTokenList_toggle_Callback";
  toggle_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => toggle_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkDataTransfer {
  static final instance = new BlinkDataTransfer();

  static clearData_Callback_0(mthis) native "DataTransfer_clearData_Callback";
  clearData_Callback_0_(mthis) => clearData_Callback_0(mthis);

  static clearData_Callback_1(mthis, __arg_0) native "DataTransfer_clearData_Callback";
  clearData_Callback_1_(mthis, __arg_0) => clearData_Callback_1(mthis, __arg_0);

  static clearData_Callback_2(mthis, __arg_0, __arg_1) native "DataTransfer_clearData_Callback";
  clearData_Callback_2_(mthis, __arg_0, __arg_1) => clearData_Callback_2(mthis, __arg_0, __arg_1);

  static clearData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DataTransfer_clearData_Callback";
  clearData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static dropEffect_Getter(mthis) native "DataTransfer_dropEffect_Getter";
  dropEffect_Getter_(mthis) => dropEffect_Getter(mthis);

  static dropEffect_Setter(mthis, __arg_0) native "DataTransfer_dropEffect_Setter";
  dropEffect_Setter_(mthis, __arg_0) => dropEffect_Setter(mthis, __arg_0);

  static effectAllowed_Getter(mthis) native "DataTransfer_effectAllowed_Getter";
  effectAllowed_Getter_(mthis) => effectAllowed_Getter(mthis);

  static effectAllowed_Setter(mthis, __arg_0) native "DataTransfer_effectAllowed_Setter";
  effectAllowed_Setter_(mthis, __arg_0) => effectAllowed_Setter(mthis, __arg_0);

  static files_Getter(mthis) native "DataTransfer_files_Getter";
  files_Getter_(mthis) => files_Getter(mthis);

  static getData_Callback_0(mthis) native "DataTransfer_getData_Callback";
  getData_Callback_0_(mthis) => getData_Callback_0(mthis);

  static getData_Callback_1(mthis, __arg_0) native "DataTransfer_getData_Callback";
  getData_Callback_1_(mthis, __arg_0) => getData_Callback_1(mthis, __arg_0);

  static getData_Callback_2(mthis, __arg_0, __arg_1) native "DataTransfer_getData_Callback";
  getData_Callback_2_(mthis, __arg_0, __arg_1) => getData_Callback_2(mthis, __arg_0, __arg_1);

  static getData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DataTransfer_getData_Callback";
  getData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static items_Getter(mthis) native "DataTransfer_items_Getter";
  items_Getter_(mthis) => items_Getter(mthis);

  static setData_Callback_0(mthis) native "DataTransfer_setData_Callback";
  setData_Callback_0_(mthis) => setData_Callback_0(mthis);

  static setData_Callback_1(mthis, __arg_0) native "DataTransfer_setData_Callback";
  setData_Callback_1_(mthis, __arg_0) => setData_Callback_1(mthis, __arg_0);

  static setData_Callback_2(mthis, __arg_0, __arg_1) native "DataTransfer_setData_Callback";
  setData_Callback_2_(mthis, __arg_0, __arg_1) => setData_Callback_2(mthis, __arg_0, __arg_1);

  static setData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DataTransfer_setData_Callback";
  setData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DataTransfer_setData_Callback";
  setData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setDragImage_Callback_1(mthis, __arg_0) native "DataTransfer_setDragImage_Callback";
  setDragImage_Callback_1_(mthis, __arg_0) => setDragImage_Callback_1(mthis, __arg_0);

  static setDragImage_Callback_2(mthis, __arg_0, __arg_1) native "DataTransfer_setDragImage_Callback";
  setDragImage_Callback_2_(mthis, __arg_0, __arg_1) => setDragImage_Callback_2(mthis, __arg_0, __arg_1);

  static setDragImage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DataTransfer_setDragImage_Callback";
  setDragImage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setDragImage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setDragImage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DataTransfer_setDragImage_Callback";
  setDragImage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setDragImage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setDragImage_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DataTransfer_setDragImage_Callback";
  setDragImage_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setDragImage_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static types_Getter(mthis) native "DataTransfer_types_Getter";
  types_Getter_(mthis) => types_Getter(mthis);

}

class BlinkDataTransferItem {
  static final instance = new BlinkDataTransferItem();

  static getAsFile_Callback_0(mthis) native "DataTransferItem_getAsFile_Callback";
  getAsFile_Callback_0_(mthis) => getAsFile_Callback_0(mthis);

  static getAsFile_Callback_1(mthis, __arg_0) native "DataTransferItem_getAsFile_Callback";
  getAsFile_Callback_1_(mthis, __arg_0) => getAsFile_Callback_1(mthis, __arg_0);

  static getAsFile_Callback_2(mthis, __arg_0, __arg_1) native "DataTransferItem_getAsFile_Callback";
  getAsFile_Callback_2_(mthis, __arg_0, __arg_1) => getAsFile_Callback_2(mthis, __arg_0, __arg_1);

  static getAsString_Callback_0(mthis) native "DataTransferItem_getAsString_Callback";
  getAsString_Callback_0_(mthis) => getAsString_Callback_0(mthis);

  static getAsString_Callback_1(mthis, __arg_0) native "DataTransferItem_getAsString_Callback";
  getAsString_Callback_1_(mthis, __arg_0) => getAsString_Callback_1(mthis, __arg_0);

  static getAsString_Callback_2(mthis, __arg_0, __arg_1) native "DataTransferItem_getAsString_Callback";
  getAsString_Callback_2_(mthis, __arg_0, __arg_1) => getAsString_Callback_2(mthis, __arg_0, __arg_1);

  static getAsString_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DataTransferItem_getAsString_Callback";
  getAsString_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getAsString_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static kind_Getter(mthis) native "DataTransferItem_kind_Getter";
  kind_Getter_(mthis) => kind_Getter(mthis);

  static type_Getter(mthis) native "DataTransferItem_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static webkitGetAsEntry_Callback_0(mthis) native "DataTransferItem_webkitGetAsEntry_Callback";
  webkitGetAsEntry_Callback_0_(mthis) => webkitGetAsEntry_Callback_0(mthis);

  static webkitGetAsEntry_Callback_1(mthis, __arg_0) native "DataTransferItem_webkitGetAsEntry_Callback";
  webkitGetAsEntry_Callback_1_(mthis, __arg_0) => webkitGetAsEntry_Callback_1(mthis, __arg_0);

  static webkitGetAsEntry_Callback_2(mthis, __arg_0, __arg_1) native "DataTransferItem_webkitGetAsEntry_Callback";
  webkitGetAsEntry_Callback_2_(mthis, __arg_0, __arg_1) => webkitGetAsEntry_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkDataTransferItemList {
  static final instance = new BlinkDataTransferItemList();

  static $__getter___Callback_1(mthis, __arg_0) native "DataTransferItemList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static add_Callback_0(mthis) native "DataTransferItemList_add_Callback";
  add_Callback_0_(mthis) => add_Callback_0(mthis);

  static add_Callback_1(mthis, __arg_0) native "DataTransferItemList_add_Callback";
  add_Callback_1_(mthis, __arg_0) => add_Callback_1(mthis, __arg_0);

  static add_Callback_2(mthis, __arg_0, __arg_1) native "DataTransferItemList_add_Callback";
  add_Callback_2_(mthis, __arg_0, __arg_1) => add_Callback_2(mthis, __arg_0, __arg_1);

  static add_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DataTransferItemList_add_Callback";
  add_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => add_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static add_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DataTransferItemList_add_Callback";
  add_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => add_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static clear_Callback_0(mthis) native "DataTransferItemList_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "DataTransferItemList_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "DataTransferItemList_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static length_Getter(mthis) native "DataTransferItemList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static remove_Callback_0(mthis) native "DataTransferItemList_remove_Callback";
  remove_Callback_0_(mthis) => remove_Callback_0(mthis);

  static remove_Callback_1(mthis, __arg_0) native "DataTransferItemList_remove_Callback";
  remove_Callback_1_(mthis, __arg_0) => remove_Callback_1(mthis, __arg_0);

  static remove_Callback_2(mthis, __arg_0, __arg_1) native "DataTransferItemList_remove_Callback";
  remove_Callback_2_(mthis, __arg_0, __arg_1) => remove_Callback_2(mthis, __arg_0, __arg_1);

  static remove_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DataTransferItemList_remove_Callback";
  remove_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => remove_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkDatabase {
  static final instance = new BlinkDatabase();

  static changeVersion_Callback_0(mthis) native "Database_changeVersion_Callback";
  changeVersion_Callback_0_(mthis) => changeVersion_Callback_0(mthis);

  static changeVersion_Callback_1(mthis, __arg_0) native "Database_changeVersion_Callback";
  changeVersion_Callback_1_(mthis, __arg_0) => changeVersion_Callback_1(mthis, __arg_0);

  static changeVersion_Callback_2(mthis, __arg_0, __arg_1) native "Database_changeVersion_Callback";
  changeVersion_Callback_2_(mthis, __arg_0, __arg_1) => changeVersion_Callback_2(mthis, __arg_0, __arg_1);

  static changeVersion_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Database_changeVersion_Callback";
  changeVersion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => changeVersion_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static changeVersion_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Database_changeVersion_Callback";
  changeVersion_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => changeVersion_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static changeVersion_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Database_changeVersion_Callback";
  changeVersion_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => changeVersion_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static changeVersion_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Database_changeVersion_Callback";
  changeVersion_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => changeVersion_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static changeVersion_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "Database_changeVersion_Callback";
  changeVersion_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => changeVersion_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static readTransaction_Callback_0(mthis) native "Database_readTransaction_Callback";
  readTransaction_Callback_0_(mthis) => readTransaction_Callback_0(mthis);

  static readTransaction_Callback_1(mthis, __arg_0) native "Database_readTransaction_Callback";
  readTransaction_Callback_1_(mthis, __arg_0) => readTransaction_Callback_1(mthis, __arg_0);

  static readTransaction_Callback_2(mthis, __arg_0, __arg_1) native "Database_readTransaction_Callback";
  readTransaction_Callback_2_(mthis, __arg_0, __arg_1) => readTransaction_Callback_2(mthis, __arg_0, __arg_1);

  static readTransaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Database_readTransaction_Callback";
  readTransaction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readTransaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readTransaction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Database_readTransaction_Callback";
  readTransaction_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => readTransaction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static readTransaction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Database_readTransaction_Callback";
  readTransaction_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => readTransaction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static transaction_Callback_0(mthis) native "Database_transaction_Callback";
  transaction_Callback_0_(mthis) => transaction_Callback_0(mthis);

  static transaction_Callback_1(mthis, __arg_0) native "Database_transaction_Callback";
  transaction_Callback_1_(mthis, __arg_0) => transaction_Callback_1(mthis, __arg_0);

  static transaction_Callback_2(mthis, __arg_0, __arg_1) native "Database_transaction_Callback";
  transaction_Callback_2_(mthis, __arg_0, __arg_1) => transaction_Callback_2(mthis, __arg_0, __arg_1);

  static transaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Database_transaction_Callback";
  transaction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => transaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static transaction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Database_transaction_Callback";
  transaction_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => transaction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static transaction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Database_transaction_Callback";
  transaction_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => transaction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static version_Getter(mthis) native "Database_version_Getter";
  version_Getter_(mthis) => version_Getter(mthis);

}

class BlinkDedicatedWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkDedicatedWorkerGlobalScope();

  static onmessage_Getter(mthis) native "DedicatedWorkerGlobalScope_onmessage_Getter";
  onmessage_Getter_(mthis) => onmessage_Getter(mthis);

  static onmessage_Setter(mthis, __arg_0) native "DedicatedWorkerGlobalScope_onmessage_Setter";
  onmessage_Setter_(mthis, __arg_0) => onmessage_Setter(mthis, __arg_0);

  static postMessage_Callback_0(mthis) native "DedicatedWorkerGlobalScope_postMessage_Callback";
  postMessage_Callback_0_(mthis) => postMessage_Callback_0(mthis);

  static postMessage_Callback_1(mthis, __arg_0) native "DedicatedWorkerGlobalScope_postMessage_Callback";
  postMessage_Callback_1_(mthis, __arg_0) => postMessage_Callback_1(mthis, __arg_0);

  static postMessage_Callback_2(mthis, __arg_0, __arg_1) native "DedicatedWorkerGlobalScope_postMessage_Callback";
  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => postMessage_Callback_2(mthis, __arg_0, __arg_1);

  static postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DedicatedWorkerGlobalScope_postMessage_Callback";
  postMessage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DedicatedWorkerGlobalScope_postMessage_Callback";
  postMessage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkDelayNode extends BlinkAudioNode {
  static final instance = new BlinkDelayNode();

  static delayTime_Getter(mthis) native "DelayNode_delayTime_Getter";
  delayTime_Getter_(mthis) => delayTime_Getter(mthis);

}

class BlinkDeprecatedStorageInfo {
  static final instance = new BlinkDeprecatedStorageInfo();

  static queryUsageAndQuota_Callback_0(mthis) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_0_(mthis) => queryUsageAndQuota_Callback_0(mthis);

  static queryUsageAndQuota_Callback_1(mthis, __arg_0) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_1_(mthis, __arg_0) => queryUsageAndQuota_Callback_1(mthis, __arg_0);

  static queryUsageAndQuota_Callback_2(mthis, __arg_0, __arg_1) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_2_(mthis, __arg_0, __arg_1) => queryUsageAndQuota_Callback_2(mthis, __arg_0, __arg_1);

  static queryUsageAndQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => queryUsageAndQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static queryUsageAndQuota_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => queryUsageAndQuota_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static queryUsageAndQuota_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DeprecatedStorageInfo_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => queryUsageAndQuota_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static requestQuota_Callback_0(mthis) native "DeprecatedStorageInfo_requestQuota_Callback";
  requestQuota_Callback_0_(mthis) => requestQuota_Callback_0(mthis);

  static requestQuota_Callback_1(mthis, __arg_0) native "DeprecatedStorageInfo_requestQuota_Callback";
  requestQuota_Callback_1_(mthis, __arg_0) => requestQuota_Callback_1(mthis, __arg_0);

  static requestQuota_Callback_2(mthis, __arg_0, __arg_1) native "DeprecatedStorageInfo_requestQuota_Callback";
  requestQuota_Callback_2_(mthis, __arg_0, __arg_1) => requestQuota_Callback_2(mthis, __arg_0, __arg_1);

  static requestQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DeprecatedStorageInfo_requestQuota_Callback";
  requestQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => requestQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static requestQuota_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DeprecatedStorageInfo_requestQuota_Callback";
  requestQuota_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => requestQuota_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static requestQuota_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DeprecatedStorageInfo_requestQuota_Callback";
  requestQuota_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => requestQuota_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static requestQuota_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DeprecatedStorageInfo_requestQuota_Callback";
  requestQuota_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => requestQuota_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

}

class BlinkDeprecatedStorageQuota {
  static final instance = new BlinkDeprecatedStorageQuota();

  static queryUsageAndQuota_Callback_0(mthis) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_0_(mthis) => queryUsageAndQuota_Callback_0(mthis);

  static queryUsageAndQuota_Callback_1(mthis, __arg_0) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_1_(mthis, __arg_0) => queryUsageAndQuota_Callback_1(mthis, __arg_0);

  static queryUsageAndQuota_Callback_2(mthis, __arg_0, __arg_1) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_2_(mthis, __arg_0, __arg_1) => queryUsageAndQuota_Callback_2(mthis, __arg_0, __arg_1);

  static queryUsageAndQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => queryUsageAndQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static queryUsageAndQuota_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DeprecatedStorageQuota_queryUsageAndQuota_Callback";
  queryUsageAndQuota_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => queryUsageAndQuota_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static requestQuota_Callback_0(mthis) native "DeprecatedStorageQuota_requestQuota_Callback";
  requestQuota_Callback_0_(mthis) => requestQuota_Callback_0(mthis);

  static requestQuota_Callback_1(mthis, __arg_0) native "DeprecatedStorageQuota_requestQuota_Callback";
  requestQuota_Callback_1_(mthis, __arg_0) => requestQuota_Callback_1(mthis, __arg_0);

  static requestQuota_Callback_2(mthis, __arg_0, __arg_1) native "DeprecatedStorageQuota_requestQuota_Callback";
  requestQuota_Callback_2_(mthis, __arg_0, __arg_1) => requestQuota_Callback_2(mthis, __arg_0, __arg_1);

  static requestQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DeprecatedStorageQuota_requestQuota_Callback";
  requestQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => requestQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static requestQuota_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DeprecatedStorageQuota_requestQuota_Callback";
  requestQuota_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => requestQuota_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static requestQuota_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DeprecatedStorageQuota_requestQuota_Callback";
  requestQuota_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => requestQuota_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkDeviceAcceleration {
  static final instance = new BlinkDeviceAcceleration();

  static x_Getter(mthis) native "DeviceAcceleration_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "DeviceAcceleration_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static z_Getter(mthis) native "DeviceAcceleration_z_Getter";
  z_Getter_(mthis) => z_Getter(mthis);

}

class BlinkDeviceLightEvent extends BlinkEvent {
  static final instance = new BlinkDeviceLightEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "DeviceLightEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static value_Getter(mthis) native "DeviceLightEvent_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

}

class BlinkDeviceMotionEvent extends BlinkEvent {
  static final instance = new BlinkDeviceMotionEvent();

  static accelerationIncludingGravity_Getter(mthis) native "DeviceMotionEvent_accelerationIncludingGravity_Getter";
  accelerationIncludingGravity_Getter_(mthis) => accelerationIncludingGravity_Getter(mthis);

  static acceleration_Getter(mthis) native "DeviceMotionEvent_acceleration_Getter";
  acceleration_Getter_(mthis) => acceleration_Getter(mthis);

  static initDeviceMotionEvent_Callback_0(mthis) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_0_(mthis) => initDeviceMotionEvent_Callback_0(mthis);

  static initDeviceMotionEvent_Callback_1(mthis, __arg_0) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_1_(mthis, __arg_0) => initDeviceMotionEvent_Callback_1(mthis, __arg_0);

  static initDeviceMotionEvent_Callback_2(mthis, __arg_0, __arg_1) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_2_(mthis, __arg_0, __arg_1) => initDeviceMotionEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initDeviceMotionEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initDeviceMotionEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initDeviceMotionEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initDeviceMotionEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initDeviceMotionEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initDeviceMotionEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initDeviceMotionEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initDeviceMotionEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initDeviceMotionEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initDeviceMotionEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static initDeviceMotionEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => initDeviceMotionEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static initDeviceMotionEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "DeviceMotionEvent_initDeviceMotionEvent_Callback";
  initDeviceMotionEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => initDeviceMotionEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static interval_Getter(mthis) native "DeviceMotionEvent_interval_Getter";
  interval_Getter_(mthis) => interval_Getter(mthis);

  static rotationRate_Getter(mthis) native "DeviceMotionEvent_rotationRate_Getter";
  rotationRate_Getter_(mthis) => rotationRate_Getter(mthis);

}

class BlinkDeviceOrientationEvent extends BlinkEvent {
  static final instance = new BlinkDeviceOrientationEvent();

  static absolute_Getter(mthis) native "DeviceOrientationEvent_absolute_Getter";
  absolute_Getter_(mthis) => absolute_Getter(mthis);

  static alpha_Getter(mthis) native "DeviceOrientationEvent_alpha_Getter";
  alpha_Getter_(mthis) => alpha_Getter(mthis);

  static beta_Getter(mthis) native "DeviceOrientationEvent_beta_Getter";
  beta_Getter_(mthis) => beta_Getter(mthis);

  static gamma_Getter(mthis) native "DeviceOrientationEvent_gamma_Getter";
  gamma_Getter_(mthis) => gamma_Getter(mthis);

  static initDeviceOrientationEvent_Callback_0(mthis) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_0_(mthis) => initDeviceOrientationEvent_Callback_0(mthis);

  static initDeviceOrientationEvent_Callback_1(mthis, __arg_0) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_1_(mthis, __arg_0) => initDeviceOrientationEvent_Callback_1(mthis, __arg_0);

  static initDeviceOrientationEvent_Callback_2(mthis, __arg_0, __arg_1) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_2_(mthis, __arg_0, __arg_1) => initDeviceOrientationEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initDeviceOrientationEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initDeviceOrientationEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initDeviceOrientationEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initDeviceOrientationEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initDeviceOrientationEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initDeviceOrientationEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initDeviceOrientationEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initDeviceOrientationEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initDeviceOrientationEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initDeviceOrientationEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static initDeviceOrientationEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => initDeviceOrientationEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static initDeviceOrientationEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "DeviceOrientationEvent_initDeviceOrientationEvent_Callback";
  initDeviceOrientationEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => initDeviceOrientationEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

}

class BlinkDeviceRotationRate {
  static final instance = new BlinkDeviceRotationRate();

  static alpha_Getter(mthis) native "DeviceRotationRate_alpha_Getter";
  alpha_Getter_(mthis) => alpha_Getter(mthis);

  static beta_Getter(mthis) native "DeviceRotationRate_beta_Getter";
  beta_Getter_(mthis) => beta_Getter(mthis);

  static gamma_Getter(mthis) native "DeviceRotationRate_gamma_Getter";
  gamma_Getter_(mthis) => gamma_Getter(mthis);

}

class BlinkDirectoryEntry extends BlinkEntry {
  static final instance = new BlinkDirectoryEntry();

  static createReader_Callback_0(mthis) native "DirectoryEntry_createReader_Callback";
  createReader_Callback_0_(mthis) => createReader_Callback_0(mthis);

  static createReader_Callback_1(mthis, __arg_0) native "DirectoryEntry_createReader_Callback";
  createReader_Callback_1_(mthis, __arg_0) => createReader_Callback_1(mthis, __arg_0);

  static createReader_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryEntry_createReader_Callback";
  createReader_Callback_2_(mthis, __arg_0, __arg_1) => createReader_Callback_2(mthis, __arg_0, __arg_1);

  static getDirectory_Callback_0(mthis) native "DirectoryEntry_getDirectory_Callback";
  getDirectory_Callback_0_(mthis) => getDirectory_Callback_0(mthis);

  static getDirectory_Callback_1(mthis, __arg_0) native "DirectoryEntry_getDirectory_Callback";
  getDirectory_Callback_1_(mthis, __arg_0) => getDirectory_Callback_1(mthis, __arg_0);

  static getDirectory_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryEntry_getDirectory_Callback";
  getDirectory_Callback_2_(mthis, __arg_0, __arg_1) => getDirectory_Callback_2(mthis, __arg_0, __arg_1);

  static getDirectory_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DirectoryEntry_getDirectory_Callback";
  getDirectory_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getDirectory_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getDirectory_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DirectoryEntry_getDirectory_Callback";
  getDirectory_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getDirectory_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getDirectory_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DirectoryEntry_getDirectory_Callback";
  getDirectory_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => getDirectory_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static getDirectory_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DirectoryEntry_getDirectory_Callback";
  getDirectory_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => getDirectory_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static getFile_Callback_0(mthis) native "DirectoryEntry_getFile_Callback";
  getFile_Callback_0_(mthis) => getFile_Callback_0(mthis);

  static getFile_Callback_1(mthis, __arg_0) native "DirectoryEntry_getFile_Callback";
  getFile_Callback_1_(mthis, __arg_0) => getFile_Callback_1(mthis, __arg_0);

  static getFile_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryEntry_getFile_Callback";
  getFile_Callback_2_(mthis, __arg_0, __arg_1) => getFile_Callback_2(mthis, __arg_0, __arg_1);

  static getFile_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DirectoryEntry_getFile_Callback";
  getFile_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getFile_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getFile_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DirectoryEntry_getFile_Callback";
  getFile_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getFile_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getFile_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "DirectoryEntry_getFile_Callback";
  getFile_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => getFile_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static getFile_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "DirectoryEntry_getFile_Callback";
  getFile_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => getFile_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static removeRecursively_Callback_0(mthis) native "DirectoryEntry_removeRecursively_Callback";
  removeRecursively_Callback_0_(mthis) => removeRecursively_Callback_0(mthis);

  static removeRecursively_Callback_1(mthis, __arg_0) native "DirectoryEntry_removeRecursively_Callback";
  removeRecursively_Callback_1_(mthis, __arg_0) => removeRecursively_Callback_1(mthis, __arg_0);

  static removeRecursively_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryEntry_removeRecursively_Callback";
  removeRecursively_Callback_2_(mthis, __arg_0, __arg_1) => removeRecursively_Callback_2(mthis, __arg_0, __arg_1);

  static removeRecursively_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DirectoryEntry_removeRecursively_Callback";
  removeRecursively_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeRecursively_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static removeRecursively_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DirectoryEntry_removeRecursively_Callback";
  removeRecursively_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => removeRecursively_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkDirectoryEntrySync extends BlinkEntrySync {
  static final instance = new BlinkDirectoryEntrySync();

  static createReader_Callback_0(mthis) native "DirectoryEntrySync_createReader_Callback";
  createReader_Callback_0_(mthis) => createReader_Callback_0(mthis);

  static createReader_Callback_1(mthis, __arg_0) native "DirectoryEntrySync_createReader_Callback";
  createReader_Callback_1_(mthis, __arg_0) => createReader_Callback_1(mthis, __arg_0);

  static createReader_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryEntrySync_createReader_Callback";
  createReader_Callback_2_(mthis, __arg_0, __arg_1) => createReader_Callback_2(mthis, __arg_0, __arg_1);

  static getDirectory_Callback_0(mthis) native "DirectoryEntrySync_getDirectory_Callback";
  getDirectory_Callback_0_(mthis) => getDirectory_Callback_0(mthis);

  static getDirectory_Callback_1(mthis, __arg_0) native "DirectoryEntrySync_getDirectory_Callback";
  getDirectory_Callback_1_(mthis, __arg_0) => getDirectory_Callback_1(mthis, __arg_0);

  static getDirectory_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryEntrySync_getDirectory_Callback";
  getDirectory_Callback_2_(mthis, __arg_0, __arg_1) => getDirectory_Callback_2(mthis, __arg_0, __arg_1);

  static getDirectory_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DirectoryEntrySync_getDirectory_Callback";
  getDirectory_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getDirectory_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getDirectory_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DirectoryEntrySync_getDirectory_Callback";
  getDirectory_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getDirectory_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getFile_Callback_0(mthis) native "DirectoryEntrySync_getFile_Callback";
  getFile_Callback_0_(mthis) => getFile_Callback_0(mthis);

  static getFile_Callback_1(mthis, __arg_0) native "DirectoryEntrySync_getFile_Callback";
  getFile_Callback_1_(mthis, __arg_0) => getFile_Callback_1(mthis, __arg_0);

  static getFile_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryEntrySync_getFile_Callback";
  getFile_Callback_2_(mthis, __arg_0, __arg_1) => getFile_Callback_2(mthis, __arg_0, __arg_1);

  static getFile_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DirectoryEntrySync_getFile_Callback";
  getFile_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getFile_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getFile_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DirectoryEntrySync_getFile_Callback";
  getFile_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getFile_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static removeRecursively_Callback_0(mthis) native "DirectoryEntrySync_removeRecursively_Callback";
  removeRecursively_Callback_0_(mthis) => removeRecursively_Callback_0(mthis);

  static removeRecursively_Callback_1(mthis, __arg_0) native "DirectoryEntrySync_removeRecursively_Callback";
  removeRecursively_Callback_1_(mthis, __arg_0) => removeRecursively_Callback_1(mthis, __arg_0);

  static removeRecursively_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryEntrySync_removeRecursively_Callback";
  removeRecursively_Callback_2_(mthis, __arg_0, __arg_1) => removeRecursively_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkDirectoryReader {
  static final instance = new BlinkDirectoryReader();

  static readEntries_Callback_0(mthis) native "DirectoryReader_readEntries_Callback";
  readEntries_Callback_0_(mthis) => readEntries_Callback_0(mthis);

  static readEntries_Callback_1(mthis, __arg_0) native "DirectoryReader_readEntries_Callback";
  readEntries_Callback_1_(mthis, __arg_0) => readEntries_Callback_1(mthis, __arg_0);

  static readEntries_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryReader_readEntries_Callback";
  readEntries_Callback_2_(mthis, __arg_0, __arg_1) => readEntries_Callback_2(mthis, __arg_0, __arg_1);

  static readEntries_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DirectoryReader_readEntries_Callback";
  readEntries_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readEntries_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readEntries_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "DirectoryReader_readEntries_Callback";
  readEntries_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => readEntries_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkDirectoryReaderSync {
  static final instance = new BlinkDirectoryReaderSync();

  static readEntries_Callback_0(mthis) native "DirectoryReaderSync_readEntries_Callback";
  readEntries_Callback_0_(mthis) => readEntries_Callback_0(mthis);

  static readEntries_Callback_1(mthis, __arg_0) native "DirectoryReaderSync_readEntries_Callback";
  readEntries_Callback_1_(mthis, __arg_0) => readEntries_Callback_1(mthis, __arg_0);

  static readEntries_Callback_2(mthis, __arg_0, __arg_1) native "DirectoryReaderSync_readEntries_Callback";
  readEntries_Callback_2_(mthis, __arg_0, __arg_1) => readEntries_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkDocument extends BlinkNode {
  static final instance = new BlinkDocument();

  static URL_Getter(mthis) native "Document_URL_Getter";
  URL_Getter_(mthis) => URL_Getter(mthis);

  static activeElement_Getter(mthis) native "Document_activeElement_Getter";
  activeElement_Getter_(mthis) => activeElement_Getter(mthis);

  static adoptNode_Callback_0(mthis) native "Document_adoptNode_Callback";
  adoptNode_Callback_0_(mthis) => adoptNode_Callback_0(mthis);

  static adoptNode_Callback_1(mthis, __arg_0) native "Document_adoptNode_Callback";
  adoptNode_Callback_1_(mthis, __arg_0) => adoptNode_Callback_1(mthis, __arg_0);

  static adoptNode_Callback_2(mthis, __arg_0, __arg_1) native "Document_adoptNode_Callback";
  adoptNode_Callback_2_(mthis, __arg_0, __arg_1) => adoptNode_Callback_2(mthis, __arg_0, __arg_1);

  static adoptNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_adoptNode_Callback";
  adoptNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => adoptNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static anchors_Getter(mthis) native "Document_anchors_Getter";
  anchors_Getter_(mthis) => anchors_Getter(mthis);

  static body_Getter(mthis) native "Document_body_Getter";
  body_Getter_(mthis) => body_Getter(mthis);

  static body_Setter(mthis, __arg_0) native "Document_body_Setter";
  body_Setter_(mthis, __arg_0) => body_Setter(mthis, __arg_0);

  static caretRangeFromPoint_Callback_0(mthis) native "Document_caretRangeFromPoint_Callback";
  caretRangeFromPoint_Callback_0_(mthis) => caretRangeFromPoint_Callback_0(mthis);

  static caretRangeFromPoint_Callback_1(mthis, __arg_0) native "Document_caretRangeFromPoint_Callback";
  caretRangeFromPoint_Callback_1_(mthis, __arg_0) => caretRangeFromPoint_Callback_1(mthis, __arg_0);

  static caretRangeFromPoint_Callback_2(mthis, __arg_0, __arg_1) native "Document_caretRangeFromPoint_Callback";
  caretRangeFromPoint_Callback_2_(mthis, __arg_0, __arg_1) => caretRangeFromPoint_Callback_2(mthis, __arg_0, __arg_1);

  static caretRangeFromPoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_caretRangeFromPoint_Callback";
  caretRangeFromPoint_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => caretRangeFromPoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static caretRangeFromPoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_caretRangeFromPoint_Callback";
  caretRangeFromPoint_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => caretRangeFromPoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static characterSet_Getter(mthis) native "Document_characterSet_Getter";
  characterSet_Getter_(mthis) => characterSet_Getter(mthis);

  static charset_Getter(mthis) native "Document_charset_Getter";
  charset_Getter_(mthis) => charset_Getter(mthis);

  static charset_Setter(mthis, __arg_0) native "Document_charset_Setter";
  charset_Setter_(mthis, __arg_0) => charset_Setter(mthis, __arg_0);

  static childElementCount_Getter(mthis) native "Document_childElementCount_Getter";
  childElementCount_Getter_(mthis) => childElementCount_Getter(mthis);

  static children_Getter(mthis) native "Document_children_Getter";
  children_Getter_(mthis) => children_Getter(mthis);

  static compatMode_Getter(mthis) native "Document_compatMode_Getter";
  compatMode_Getter_(mthis) => compatMode_Getter(mthis);

  static contentType_Getter(mthis) native "Document_contentType_Getter";
  contentType_Getter_(mthis) => contentType_Getter(mthis);

  static cookie_Getter(mthis) native "Document_cookie_Getter";
  cookie_Getter_(mthis) => cookie_Getter(mthis);

  static cookie_Setter(mthis, __arg_0) native "Document_cookie_Setter";
  cookie_Setter_(mthis, __arg_0) => cookie_Setter(mthis, __arg_0);

  static createCDATASection_Callback_0(mthis) native "Document_createCDATASection_Callback";
  createCDATASection_Callback_0_(mthis) => createCDATASection_Callback_0(mthis);

  static createCDATASection_Callback_1(mthis, __arg_0) native "Document_createCDATASection_Callback";
  createCDATASection_Callback_1_(mthis, __arg_0) => createCDATASection_Callback_1(mthis, __arg_0);

  static createCDATASection_Callback_2(mthis, __arg_0, __arg_1) native "Document_createCDATASection_Callback";
  createCDATASection_Callback_2_(mthis, __arg_0, __arg_1) => createCDATASection_Callback_2(mthis, __arg_0, __arg_1);

  static createCDATASection_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_createCDATASection_Callback";
  createCDATASection_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createCDATASection_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createDocumentFragment_Callback_0(mthis) native "Document_createDocumentFragment_Callback";
  createDocumentFragment_Callback_0_(mthis) => createDocumentFragment_Callback_0(mthis);

  static createDocumentFragment_Callback_1(mthis, __arg_0) native "Document_createDocumentFragment_Callback";
  createDocumentFragment_Callback_1_(mthis, __arg_0) => createDocumentFragment_Callback_1(mthis, __arg_0);

  static createDocumentFragment_Callback_2(mthis, __arg_0, __arg_1) native "Document_createDocumentFragment_Callback";
  createDocumentFragment_Callback_2_(mthis, __arg_0, __arg_1) => createDocumentFragment_Callback_2(mthis, __arg_0, __arg_1);

  static createElementNS_Callback_0(mthis) native "Document_createElementNS_Callback";
  createElementNS_Callback_0_(mthis) => createElementNS_Callback_0(mthis);

  static createElementNS_Callback_1(mthis, __arg_0) native "Document_createElementNS_Callback";
  createElementNS_Callback_1_(mthis, __arg_0) => createElementNS_Callback_1(mthis, __arg_0);

  static createElementNS_Callback_2(mthis, __arg_0, __arg_1) native "Document_createElementNS_Callback";
  createElementNS_Callback_2_(mthis, __arg_0, __arg_1) => createElementNS_Callback_2(mthis, __arg_0, __arg_1);

  static createElementNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_createElementNS_Callback";
  createElementNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createElementNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createElementNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_createElementNS_Callback";
  createElementNS_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createElementNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createElementNS_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Document_createElementNS_Callback";
  createElementNS_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createElementNS_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createElement_Callback_0(mthis) native "Document_createElement_Callback";
  createElement_Callback_0_(mthis) => createElement_Callback_0(mthis);

  static createElement_Callback_1(mthis, __arg_0) native "Document_createElement_Callback";
  createElement_Callback_1_(mthis, __arg_0) => createElement_Callback_1(mthis, __arg_0);

  static createElement_Callback_2(mthis, __arg_0, __arg_1) native "Document_createElement_Callback";
  createElement_Callback_2_(mthis, __arg_0, __arg_1) => createElement_Callback_2(mthis, __arg_0, __arg_1);

  static createElement_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_createElement_Callback";
  createElement_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createElement_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createElement_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_createElement_Callback";
  createElement_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createElement_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createEvent_Callback_0(mthis) native "Document_createEvent_Callback";
  createEvent_Callback_0_(mthis) => createEvent_Callback_0(mthis);

  static createEvent_Callback_1(mthis, __arg_0) native "Document_createEvent_Callback";
  createEvent_Callback_1_(mthis, __arg_0) => createEvent_Callback_1(mthis, __arg_0);

  static createEvent_Callback_2(mthis, __arg_0, __arg_1) native "Document_createEvent_Callback";
  createEvent_Callback_2_(mthis, __arg_0, __arg_1) => createEvent_Callback_2(mthis, __arg_0, __arg_1);

  static createEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_createEvent_Callback";
  createEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createNodeIterator_Callback_0(mthis) native "Document_createNodeIterator_Callback";
  createNodeIterator_Callback_0_(mthis) => createNodeIterator_Callback_0(mthis);

  static createNodeIterator_Callback_1(mthis, __arg_0) native "Document_createNodeIterator_Callback";
  createNodeIterator_Callback_1_(mthis, __arg_0) => createNodeIterator_Callback_1(mthis, __arg_0);

  static createNodeIterator_Callback_2(mthis, __arg_0, __arg_1) native "Document_createNodeIterator_Callback";
  createNodeIterator_Callback_2_(mthis, __arg_0, __arg_1) => createNodeIterator_Callback_2(mthis, __arg_0, __arg_1);

  static createNodeIterator_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_createNodeIterator_Callback";
  createNodeIterator_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createNodeIterator_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createNodeIterator_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_createNodeIterator_Callback";
  createNodeIterator_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createNodeIterator_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createNodeIterator_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Document_createNodeIterator_Callback";
  createNodeIterator_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createNodeIterator_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createRange_Callback_0(mthis) native "Document_createRange_Callback";
  createRange_Callback_0_(mthis) => createRange_Callback_0(mthis);

  static createRange_Callback_1(mthis, __arg_0) native "Document_createRange_Callback";
  createRange_Callback_1_(mthis, __arg_0) => createRange_Callback_1(mthis, __arg_0);

  static createRange_Callback_2(mthis, __arg_0, __arg_1) native "Document_createRange_Callback";
  createRange_Callback_2_(mthis, __arg_0, __arg_1) => createRange_Callback_2(mthis, __arg_0, __arg_1);

  static createTextNode_Callback_0(mthis) native "Document_createTextNode_Callback";
  createTextNode_Callback_0_(mthis) => createTextNode_Callback_0(mthis);

  static createTextNode_Callback_1(mthis, __arg_0) native "Document_createTextNode_Callback";
  createTextNode_Callback_1_(mthis, __arg_0) => createTextNode_Callback_1(mthis, __arg_0);

  static createTextNode_Callback_2(mthis, __arg_0, __arg_1) native "Document_createTextNode_Callback";
  createTextNode_Callback_2_(mthis, __arg_0, __arg_1) => createTextNode_Callback_2(mthis, __arg_0, __arg_1);

  static createTextNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_createTextNode_Callback";
  createTextNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createTextNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createTouchList_Callback_0(mthis) native "Document_createTouchList_Callback";
  createTouchList_Callback_0_(mthis) => createTouchList_Callback_0(mthis);

  static createTouchList_Callback_1(mthis, __arg_0) native "Document_createTouchList_Callback";
  createTouchList_Callback_1_(mthis, __arg_0) => createTouchList_Callback_1(mthis, __arg_0);

  static createTouchList_Callback_2(mthis, __arg_0, __arg_1) native "Document_createTouchList_Callback";
  createTouchList_Callback_2_(mthis, __arg_0, __arg_1) => createTouchList_Callback_2(mthis, __arg_0, __arg_1);

  static createTouchList_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_createTouchList_Callback";
  createTouchList_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createTouchList_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createTouch_Callback_0(mthis) native "Document_createTouch_Callback";
  createTouch_Callback_0_(mthis) => createTouch_Callback_0(mthis);

  static createTouch_Callback_1(mthis, __arg_0) native "Document_createTouch_Callback";
  createTouch_Callback_1_(mthis, __arg_0) => createTouch_Callback_1(mthis, __arg_0);

  static createTouch_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "Document_createTouch_Callback";
  createTouch_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => createTouch_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static createTouch_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) native "Document_createTouch_Callback";
  createTouch_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => createTouch_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10);

  static createTouch_Callback_12(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) native "Document_createTouch_Callback";
  createTouch_Callback_12_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) => createTouch_Callback_12(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11);

  static createTouch_Callback_13(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12) native "Document_createTouch_Callback";
  createTouch_Callback_13_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12) => createTouch_Callback_13(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12);

  static createTouch_Callback_2(mthis, __arg_0, __arg_1) native "Document_createTouch_Callback";
  createTouch_Callback_2_(mthis, __arg_0, __arg_1) => createTouch_Callback_2(mthis, __arg_0, __arg_1);

  static createTouch_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_createTouch_Callback";
  createTouch_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createTouch_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createTouch_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_createTouch_Callback";
  createTouch_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createTouch_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createTouch_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Document_createTouch_Callback";
  createTouch_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createTouch_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createTouch_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Document_createTouch_Callback";
  createTouch_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createTouch_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createTouch_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "Document_createTouch_Callback";
  createTouch_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => createTouch_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static createTouch_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "Document_createTouch_Callback";
  createTouch_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => createTouch_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static createTouch_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "Document_createTouch_Callback";
  createTouch_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => createTouch_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static createTreeWalker_Callback_0(mthis) native "Document_createTreeWalker_Callback";
  createTreeWalker_Callback_0_(mthis) => createTreeWalker_Callback_0(mthis);

  static createTreeWalker_Callback_1(mthis, __arg_0) native "Document_createTreeWalker_Callback";
  createTreeWalker_Callback_1_(mthis, __arg_0) => createTreeWalker_Callback_1(mthis, __arg_0);

  static createTreeWalker_Callback_2(mthis, __arg_0, __arg_1) native "Document_createTreeWalker_Callback";
  createTreeWalker_Callback_2_(mthis, __arg_0, __arg_1) => createTreeWalker_Callback_2(mthis, __arg_0, __arg_1);

  static createTreeWalker_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_createTreeWalker_Callback";
  createTreeWalker_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createTreeWalker_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createTreeWalker_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_createTreeWalker_Callback";
  createTreeWalker_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createTreeWalker_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createTreeWalker_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Document_createTreeWalker_Callback";
  createTreeWalker_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createTreeWalker_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static currentScript_Getter(mthis) native "Document_currentScript_Getter";
  currentScript_Getter_(mthis) => currentScript_Getter(mthis);

  static defaultCharset_Getter(mthis) native "Document_defaultCharset_Getter";
  defaultCharset_Getter_(mthis) => defaultCharset_Getter(mthis);

  static defaultView_Getter(mthis) native "Document_defaultView_Getter";
  defaultView_Getter_(mthis) => defaultView_Getter(mthis);

  static doctype_Getter(mthis) native "Document_doctype_Getter";
  doctype_Getter_(mthis) => doctype_Getter(mthis);

  static documentElement_Getter(mthis) native "Document_documentElement_Getter";
  documentElement_Getter_(mthis) => documentElement_Getter(mthis);

  static documentURI_Getter(mthis) native "Document_documentURI_Getter";
  documentURI_Getter_(mthis) => documentURI_Getter(mthis);

  static domain_Getter(mthis) native "Document_domain_Getter";
  domain_Getter_(mthis) => domain_Getter(mthis);

  static domain_Setter(mthis, __arg_0) native "Document_domain_Setter";
  domain_Setter_(mthis, __arg_0) => domain_Setter(mthis, __arg_0);

  static elementFromPoint_Callback_0(mthis) native "Document_elementFromPoint_Callback";
  elementFromPoint_Callback_0_(mthis) => elementFromPoint_Callback_0(mthis);

  static elementFromPoint_Callback_1(mthis, __arg_0) native "Document_elementFromPoint_Callback";
  elementFromPoint_Callback_1_(mthis, __arg_0) => elementFromPoint_Callback_1(mthis, __arg_0);

  static elementFromPoint_Callback_2(mthis, __arg_0, __arg_1) native "Document_elementFromPoint_Callback";
  elementFromPoint_Callback_2_(mthis, __arg_0, __arg_1) => elementFromPoint_Callback_2(mthis, __arg_0, __arg_1);

  static elementFromPoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_elementFromPoint_Callback";
  elementFromPoint_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => elementFromPoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static elementFromPoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_elementFromPoint_Callback";
  elementFromPoint_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => elementFromPoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static embeds_Getter(mthis) native "Document_embeds_Getter";
  embeds_Getter_(mthis) => embeds_Getter(mthis);

  static execCommand_Callback_0(mthis) native "Document_execCommand_Callback";
  execCommand_Callback_0_(mthis) => execCommand_Callback_0(mthis);

  static execCommand_Callback_1(mthis, __arg_0) native "Document_execCommand_Callback";
  execCommand_Callback_1_(mthis, __arg_0) => execCommand_Callback_1(mthis, __arg_0);

  static execCommand_Callback_2(mthis, __arg_0, __arg_1) native "Document_execCommand_Callback";
  execCommand_Callback_2_(mthis, __arg_0, __arg_1) => execCommand_Callback_2(mthis, __arg_0, __arg_1);

  static execCommand_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_execCommand_Callback";
  execCommand_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => execCommand_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static execCommand_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_execCommand_Callback";
  execCommand_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => execCommand_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static execCommand_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Document_execCommand_Callback";
  execCommand_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => execCommand_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static exitFullscreen_Callback_0(mthis) native "Document_exitFullscreen_Callback";
  exitFullscreen_Callback_0_(mthis) => exitFullscreen_Callback_0(mthis);

  static exitFullscreen_Callback_1(mthis, __arg_0) native "Document_exitFullscreen_Callback";
  exitFullscreen_Callback_1_(mthis, __arg_0) => exitFullscreen_Callback_1(mthis, __arg_0);

  static exitFullscreen_Callback_2(mthis, __arg_0, __arg_1) native "Document_exitFullscreen_Callback";
  exitFullscreen_Callback_2_(mthis, __arg_0, __arg_1) => exitFullscreen_Callback_2(mthis, __arg_0, __arg_1);

  static exitPointerLock_Callback_0(mthis) native "Document_exitPointerLock_Callback";
  exitPointerLock_Callback_0_(mthis) => exitPointerLock_Callback_0(mthis);

  static exitPointerLock_Callback_1(mthis, __arg_0) native "Document_exitPointerLock_Callback";
  exitPointerLock_Callback_1_(mthis, __arg_0) => exitPointerLock_Callback_1(mthis, __arg_0);

  static exitPointerLock_Callback_2(mthis, __arg_0, __arg_1) native "Document_exitPointerLock_Callback";
  exitPointerLock_Callback_2_(mthis, __arg_0, __arg_1) => exitPointerLock_Callback_2(mthis, __arg_0, __arg_1);

  static firstElementChild_Getter(mthis) native "Document_firstElementChild_Getter";
  firstElementChild_Getter_(mthis) => firstElementChild_Getter(mthis);

  static fonts_Getter(mthis) native "Document_fonts_Getter";
  fonts_Getter_(mthis) => fonts_Getter(mthis);

  static forms_Getter(mthis) native "Document_forms_Getter";
  forms_Getter_(mthis) => forms_Getter(mthis);

  static fullscreenElement_Getter(mthis) native "Document_fullscreenElement_Getter";
  fullscreenElement_Getter_(mthis) => fullscreenElement_Getter(mthis);

  static fullscreenEnabled_Getter(mthis) native "Document_fullscreenEnabled_Getter";
  fullscreenEnabled_Getter_(mthis) => fullscreenEnabled_Getter(mthis);

  static getCSSCanvasContext_Callback_2(mthis, __arg_0, __arg_1) native "Document_getCSSCanvasContext_Callback";
  getCSSCanvasContext_Callback_2_(mthis, __arg_0, __arg_1) => getCSSCanvasContext_Callback_2(mthis, __arg_0, __arg_1);

  static getCSSCanvasContext_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_getCSSCanvasContext_Callback";
  getCSSCanvasContext_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getCSSCanvasContext_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getCSSCanvasContext_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_getCSSCanvasContext_Callback";
  getCSSCanvasContext_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getCSSCanvasContext_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getCSSCanvasContext_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Document_getCSSCanvasContext_Callback";
  getCSSCanvasContext_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => getCSSCanvasContext_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static getCSSCanvasContext_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Document_getCSSCanvasContext_Callback";
  getCSSCanvasContext_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => getCSSCanvasContext_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static getElementById_Callback_0(mthis) native "Document_getElementById_Callback";
  getElementById_Callback_0_(mthis) => getElementById_Callback_0(mthis);

  static getElementById_Callback_1(mthis, __arg_0) native "Document_getElementById_Callback";
  getElementById_Callback_1_(mthis, __arg_0) => getElementById_Callback_1(mthis, __arg_0);

  static getElementById_Callback_2(mthis, __arg_0, __arg_1) native "Document_getElementById_Callback";
  getElementById_Callback_2_(mthis, __arg_0, __arg_1) => getElementById_Callback_2(mthis, __arg_0, __arg_1);

  static getElementById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_getElementById_Callback";
  getElementById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getElementsByClassName_Callback_0(mthis) native "Document_getElementsByClassName_Callback";
  getElementsByClassName_Callback_0_(mthis) => getElementsByClassName_Callback_0(mthis);

  static getElementsByClassName_Callback_1(mthis, __arg_0) native "Document_getElementsByClassName_Callback";
  getElementsByClassName_Callback_1_(mthis, __arg_0) => getElementsByClassName_Callback_1(mthis, __arg_0);

  static getElementsByClassName_Callback_2(mthis, __arg_0, __arg_1) native "Document_getElementsByClassName_Callback";
  getElementsByClassName_Callback_2_(mthis, __arg_0, __arg_1) => getElementsByClassName_Callback_2(mthis, __arg_0, __arg_1);

  static getElementsByClassName_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_getElementsByClassName_Callback";
  getElementsByClassName_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementsByClassName_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getElementsByName_Callback_0(mthis) native "Document_getElementsByName_Callback";
  getElementsByName_Callback_0_(mthis) => getElementsByName_Callback_0(mthis);

  static getElementsByName_Callback_1(mthis, __arg_0) native "Document_getElementsByName_Callback";
  getElementsByName_Callback_1_(mthis, __arg_0) => getElementsByName_Callback_1(mthis, __arg_0);

  static getElementsByName_Callback_2(mthis, __arg_0, __arg_1) native "Document_getElementsByName_Callback";
  getElementsByName_Callback_2_(mthis, __arg_0, __arg_1) => getElementsByName_Callback_2(mthis, __arg_0, __arg_1);

  static getElementsByName_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_getElementsByName_Callback";
  getElementsByName_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementsByName_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getElementsByTagName_Callback_0(mthis) native "Document_getElementsByTagName_Callback";
  getElementsByTagName_Callback_0_(mthis) => getElementsByTagName_Callback_0(mthis);

  static getElementsByTagName_Callback_1(mthis, __arg_0) native "Document_getElementsByTagName_Callback";
  getElementsByTagName_Callback_1_(mthis, __arg_0) => getElementsByTagName_Callback_1(mthis, __arg_0);

  static getElementsByTagName_Callback_2(mthis, __arg_0, __arg_1) native "Document_getElementsByTagName_Callback";
  getElementsByTagName_Callback_2_(mthis, __arg_0, __arg_1) => getElementsByTagName_Callback_2(mthis, __arg_0, __arg_1);

  static getElementsByTagName_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_getElementsByTagName_Callback";
  getElementsByTagName_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementsByTagName_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static head_Getter(mthis) native "Document_head_Getter";
  head_Getter_(mthis) => head_Getter(mthis);

  static hidden_Getter(mthis) native "Document_hidden_Getter";
  hidden_Getter_(mthis) => hidden_Getter(mthis);

  static implementation_Getter(mthis) native "Document_implementation_Getter";
  implementation_Getter_(mthis) => implementation_Getter(mthis);

  static importNode_Callback_0(mthis) native "Document_importNode_Callback";
  importNode_Callback_0_(mthis) => importNode_Callback_0(mthis);

  static importNode_Callback_1(mthis, __arg_0) native "Document_importNode_Callback";
  importNode_Callback_1_(mthis, __arg_0) => importNode_Callback_1(mthis, __arg_0);

  static importNode_Callback_2(mthis, __arg_0, __arg_1) native "Document_importNode_Callback";
  importNode_Callback_2_(mthis, __arg_0, __arg_1) => importNode_Callback_2(mthis, __arg_0, __arg_1);

  static importNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_importNode_Callback";
  importNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => importNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static importNode_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_importNode_Callback";
  importNode_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => importNode_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static inputEncoding_Getter(mthis) native "Document_inputEncoding_Getter";
  inputEncoding_Getter_(mthis) => inputEncoding_Getter(mthis);

  static lastElementChild_Getter(mthis) native "Document_lastElementChild_Getter";
  lastElementChild_Getter_(mthis) => lastElementChild_Getter(mthis);

  static lastModified_Getter(mthis) native "Document_lastModified_Getter";
  lastModified_Getter_(mthis) => lastModified_Getter(mthis);

  static links_Getter(mthis) native "Document_links_Getter";
  links_Getter_(mthis) => links_Getter(mthis);

  static onabort_Getter(mthis) native "Document_onabort_Getter";
  onabort_Getter_(mthis) => onabort_Getter(mthis);

  static onabort_Setter(mthis, __arg_0) native "Document_onabort_Setter";
  onabort_Setter_(mthis, __arg_0) => onabort_Setter(mthis, __arg_0);

  static onautocomplete_Getter(mthis) native "Document_onautocomplete_Getter";
  onautocomplete_Getter_(mthis) => onautocomplete_Getter(mthis);

  static onautocomplete_Setter(mthis, __arg_0) native "Document_onautocomplete_Setter";
  onautocomplete_Setter_(mthis, __arg_0) => onautocomplete_Setter(mthis, __arg_0);

  static onautocompleteerror_Getter(mthis) native "Document_onautocompleteerror_Getter";
  onautocompleteerror_Getter_(mthis) => onautocompleteerror_Getter(mthis);

  static onautocompleteerror_Setter(mthis, __arg_0) native "Document_onautocompleteerror_Setter";
  onautocompleteerror_Setter_(mthis, __arg_0) => onautocompleteerror_Setter(mthis, __arg_0);

  static onbeforecopy_Getter(mthis) native "Document_onbeforecopy_Getter";
  onbeforecopy_Getter_(mthis) => onbeforecopy_Getter(mthis);

  static onbeforecopy_Setter(mthis, __arg_0) native "Document_onbeforecopy_Setter";
  onbeforecopy_Setter_(mthis, __arg_0) => onbeforecopy_Setter(mthis, __arg_0);

  static onbeforecut_Getter(mthis) native "Document_onbeforecut_Getter";
  onbeforecut_Getter_(mthis) => onbeforecut_Getter(mthis);

  static onbeforecut_Setter(mthis, __arg_0) native "Document_onbeforecut_Setter";
  onbeforecut_Setter_(mthis, __arg_0) => onbeforecut_Setter(mthis, __arg_0);

  static onbeforepaste_Getter(mthis) native "Document_onbeforepaste_Getter";
  onbeforepaste_Getter_(mthis) => onbeforepaste_Getter(mthis);

  static onbeforepaste_Setter(mthis, __arg_0) native "Document_onbeforepaste_Setter";
  onbeforepaste_Setter_(mthis, __arg_0) => onbeforepaste_Setter(mthis, __arg_0);

  static onblur_Getter(mthis) native "Document_onblur_Getter";
  onblur_Getter_(mthis) => onblur_Getter(mthis);

  static onblur_Setter(mthis, __arg_0) native "Document_onblur_Setter";
  onblur_Setter_(mthis, __arg_0) => onblur_Setter(mthis, __arg_0);

  static oncancel_Getter(mthis) native "Document_oncancel_Getter";
  oncancel_Getter_(mthis) => oncancel_Getter(mthis);

  static oncancel_Setter(mthis, __arg_0) native "Document_oncancel_Setter";
  oncancel_Setter_(mthis, __arg_0) => oncancel_Setter(mthis, __arg_0);

  static oncanplay_Getter(mthis) native "Document_oncanplay_Getter";
  oncanplay_Getter_(mthis) => oncanplay_Getter(mthis);

  static oncanplay_Setter(mthis, __arg_0) native "Document_oncanplay_Setter";
  oncanplay_Setter_(mthis, __arg_0) => oncanplay_Setter(mthis, __arg_0);

  static oncanplaythrough_Getter(mthis) native "Document_oncanplaythrough_Getter";
  oncanplaythrough_Getter_(mthis) => oncanplaythrough_Getter(mthis);

  static oncanplaythrough_Setter(mthis, __arg_0) native "Document_oncanplaythrough_Setter";
  oncanplaythrough_Setter_(mthis, __arg_0) => oncanplaythrough_Setter(mthis, __arg_0);

  static onchange_Getter(mthis) native "Document_onchange_Getter";
  onchange_Getter_(mthis) => onchange_Getter(mthis);

  static onchange_Setter(mthis, __arg_0) native "Document_onchange_Setter";
  onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);

  static onclick_Getter(mthis) native "Document_onclick_Getter";
  onclick_Getter_(mthis) => onclick_Getter(mthis);

  static onclick_Setter(mthis, __arg_0) native "Document_onclick_Setter";
  onclick_Setter_(mthis, __arg_0) => onclick_Setter(mthis, __arg_0);

  static onclose_Getter(mthis) native "Document_onclose_Getter";
  onclose_Getter_(mthis) => onclose_Getter(mthis);

  static onclose_Setter(mthis, __arg_0) native "Document_onclose_Setter";
  onclose_Setter_(mthis, __arg_0) => onclose_Setter(mthis, __arg_0);

  static oncontextmenu_Getter(mthis) native "Document_oncontextmenu_Getter";
  oncontextmenu_Getter_(mthis) => oncontextmenu_Getter(mthis);

  static oncontextmenu_Setter(mthis, __arg_0) native "Document_oncontextmenu_Setter";
  oncontextmenu_Setter_(mthis, __arg_0) => oncontextmenu_Setter(mthis, __arg_0);

  static oncopy_Getter(mthis) native "Document_oncopy_Getter";
  oncopy_Getter_(mthis) => oncopy_Getter(mthis);

  static oncopy_Setter(mthis, __arg_0) native "Document_oncopy_Setter";
  oncopy_Setter_(mthis, __arg_0) => oncopy_Setter(mthis, __arg_0);

  static oncuechange_Getter(mthis) native "Document_oncuechange_Getter";
  oncuechange_Getter_(mthis) => oncuechange_Getter(mthis);

  static oncuechange_Setter(mthis, __arg_0) native "Document_oncuechange_Setter";
  oncuechange_Setter_(mthis, __arg_0) => oncuechange_Setter(mthis, __arg_0);

  static oncut_Getter(mthis) native "Document_oncut_Getter";
  oncut_Getter_(mthis) => oncut_Getter(mthis);

  static oncut_Setter(mthis, __arg_0) native "Document_oncut_Setter";
  oncut_Setter_(mthis, __arg_0) => oncut_Setter(mthis, __arg_0);

  static ondblclick_Getter(mthis) native "Document_ondblclick_Getter";
  ondblclick_Getter_(mthis) => ondblclick_Getter(mthis);

  static ondblclick_Setter(mthis, __arg_0) native "Document_ondblclick_Setter";
  ondblclick_Setter_(mthis, __arg_0) => ondblclick_Setter(mthis, __arg_0);

  static ondrag_Getter(mthis) native "Document_ondrag_Getter";
  ondrag_Getter_(mthis) => ondrag_Getter(mthis);

  static ondrag_Setter(mthis, __arg_0) native "Document_ondrag_Setter";
  ondrag_Setter_(mthis, __arg_0) => ondrag_Setter(mthis, __arg_0);

  static ondragend_Getter(mthis) native "Document_ondragend_Getter";
  ondragend_Getter_(mthis) => ondragend_Getter(mthis);

  static ondragend_Setter(mthis, __arg_0) native "Document_ondragend_Setter";
  ondragend_Setter_(mthis, __arg_0) => ondragend_Setter(mthis, __arg_0);

  static ondragenter_Getter(mthis) native "Document_ondragenter_Getter";
  ondragenter_Getter_(mthis) => ondragenter_Getter(mthis);

  static ondragenter_Setter(mthis, __arg_0) native "Document_ondragenter_Setter";
  ondragenter_Setter_(mthis, __arg_0) => ondragenter_Setter(mthis, __arg_0);

  static ondragleave_Getter(mthis) native "Document_ondragleave_Getter";
  ondragleave_Getter_(mthis) => ondragleave_Getter(mthis);

  static ondragleave_Setter(mthis, __arg_0) native "Document_ondragleave_Setter";
  ondragleave_Setter_(mthis, __arg_0) => ondragleave_Setter(mthis, __arg_0);

  static ondragover_Getter(mthis) native "Document_ondragover_Getter";
  ondragover_Getter_(mthis) => ondragover_Getter(mthis);

  static ondragover_Setter(mthis, __arg_0) native "Document_ondragover_Setter";
  ondragover_Setter_(mthis, __arg_0) => ondragover_Setter(mthis, __arg_0);

  static ondragstart_Getter(mthis) native "Document_ondragstart_Getter";
  ondragstart_Getter_(mthis) => ondragstart_Getter(mthis);

  static ondragstart_Setter(mthis, __arg_0) native "Document_ondragstart_Setter";
  ondragstart_Setter_(mthis, __arg_0) => ondragstart_Setter(mthis, __arg_0);

  static ondrop_Getter(mthis) native "Document_ondrop_Getter";
  ondrop_Getter_(mthis) => ondrop_Getter(mthis);

  static ondrop_Setter(mthis, __arg_0) native "Document_ondrop_Setter";
  ondrop_Setter_(mthis, __arg_0) => ondrop_Setter(mthis, __arg_0);

  static ondurationchange_Getter(mthis) native "Document_ondurationchange_Getter";
  ondurationchange_Getter_(mthis) => ondurationchange_Getter(mthis);

  static ondurationchange_Setter(mthis, __arg_0) native "Document_ondurationchange_Setter";
  ondurationchange_Setter_(mthis, __arg_0) => ondurationchange_Setter(mthis, __arg_0);

  static onemptied_Getter(mthis) native "Document_onemptied_Getter";
  onemptied_Getter_(mthis) => onemptied_Getter(mthis);

  static onemptied_Setter(mthis, __arg_0) native "Document_onemptied_Setter";
  onemptied_Setter_(mthis, __arg_0) => onemptied_Setter(mthis, __arg_0);

  static onended_Getter(mthis) native "Document_onended_Getter";
  onended_Getter_(mthis) => onended_Getter(mthis);

  static onended_Setter(mthis, __arg_0) native "Document_onended_Setter";
  onended_Setter_(mthis, __arg_0) => onended_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "Document_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "Document_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onfocus_Getter(mthis) native "Document_onfocus_Getter";
  onfocus_Getter_(mthis) => onfocus_Getter(mthis);

  static onfocus_Setter(mthis, __arg_0) native "Document_onfocus_Setter";
  onfocus_Setter_(mthis, __arg_0) => onfocus_Setter(mthis, __arg_0);

  static onfullscreenchange_Getter(mthis) native "Document_onfullscreenchange_Getter";
  onfullscreenchange_Getter_(mthis) => onfullscreenchange_Getter(mthis);

  static onfullscreenchange_Setter(mthis, __arg_0) native "Document_onfullscreenchange_Setter";
  onfullscreenchange_Setter_(mthis, __arg_0) => onfullscreenchange_Setter(mthis, __arg_0);

  static onfullscreenerror_Getter(mthis) native "Document_onfullscreenerror_Getter";
  onfullscreenerror_Getter_(mthis) => onfullscreenerror_Getter(mthis);

  static onfullscreenerror_Setter(mthis, __arg_0) native "Document_onfullscreenerror_Setter";
  onfullscreenerror_Setter_(mthis, __arg_0) => onfullscreenerror_Setter(mthis, __arg_0);

  static oninput_Getter(mthis) native "Document_oninput_Getter";
  oninput_Getter_(mthis) => oninput_Getter(mthis);

  static oninput_Setter(mthis, __arg_0) native "Document_oninput_Setter";
  oninput_Setter_(mthis, __arg_0) => oninput_Setter(mthis, __arg_0);

  static oninvalid_Getter(mthis) native "Document_oninvalid_Getter";
  oninvalid_Getter_(mthis) => oninvalid_Getter(mthis);

  static oninvalid_Setter(mthis, __arg_0) native "Document_oninvalid_Setter";
  oninvalid_Setter_(mthis, __arg_0) => oninvalid_Setter(mthis, __arg_0);

  static onkeydown_Getter(mthis) native "Document_onkeydown_Getter";
  onkeydown_Getter_(mthis) => onkeydown_Getter(mthis);

  static onkeydown_Setter(mthis, __arg_0) native "Document_onkeydown_Setter";
  onkeydown_Setter_(mthis, __arg_0) => onkeydown_Setter(mthis, __arg_0);

  static onkeypress_Getter(mthis) native "Document_onkeypress_Getter";
  onkeypress_Getter_(mthis) => onkeypress_Getter(mthis);

  static onkeypress_Setter(mthis, __arg_0) native "Document_onkeypress_Setter";
  onkeypress_Setter_(mthis, __arg_0) => onkeypress_Setter(mthis, __arg_0);

  static onkeyup_Getter(mthis) native "Document_onkeyup_Getter";
  onkeyup_Getter_(mthis) => onkeyup_Getter(mthis);

  static onkeyup_Setter(mthis, __arg_0) native "Document_onkeyup_Setter";
  onkeyup_Setter_(mthis, __arg_0) => onkeyup_Setter(mthis, __arg_0);

  static onload_Getter(mthis) native "Document_onload_Getter";
  onload_Getter_(mthis) => onload_Getter(mthis);

  static onload_Setter(mthis, __arg_0) native "Document_onload_Setter";
  onload_Setter_(mthis, __arg_0) => onload_Setter(mthis, __arg_0);

  static onloadeddata_Getter(mthis) native "Document_onloadeddata_Getter";
  onloadeddata_Getter_(mthis) => onloadeddata_Getter(mthis);

  static onloadeddata_Setter(mthis, __arg_0) native "Document_onloadeddata_Setter";
  onloadeddata_Setter_(mthis, __arg_0) => onloadeddata_Setter(mthis, __arg_0);

  static onloadedmetadata_Getter(mthis) native "Document_onloadedmetadata_Getter";
  onloadedmetadata_Getter_(mthis) => onloadedmetadata_Getter(mthis);

  static onloadedmetadata_Setter(mthis, __arg_0) native "Document_onloadedmetadata_Setter";
  onloadedmetadata_Setter_(mthis, __arg_0) => onloadedmetadata_Setter(mthis, __arg_0);

  static onloadstart_Getter(mthis) native "Document_onloadstart_Getter";
  onloadstart_Getter_(mthis) => onloadstart_Getter(mthis);

  static onloadstart_Setter(mthis, __arg_0) native "Document_onloadstart_Setter";
  onloadstart_Setter_(mthis, __arg_0) => onloadstart_Setter(mthis, __arg_0);

  static onmousedown_Getter(mthis) native "Document_onmousedown_Getter";
  onmousedown_Getter_(mthis) => onmousedown_Getter(mthis);

  static onmousedown_Setter(mthis, __arg_0) native "Document_onmousedown_Setter";
  onmousedown_Setter_(mthis, __arg_0) => onmousedown_Setter(mthis, __arg_0);

  static onmouseenter_Getter(mthis) native "Document_onmouseenter_Getter";
  onmouseenter_Getter_(mthis) => onmouseenter_Getter(mthis);

  static onmouseenter_Setter(mthis, __arg_0) native "Document_onmouseenter_Setter";
  onmouseenter_Setter_(mthis, __arg_0) => onmouseenter_Setter(mthis, __arg_0);

  static onmouseleave_Getter(mthis) native "Document_onmouseleave_Getter";
  onmouseleave_Getter_(mthis) => onmouseleave_Getter(mthis);

  static onmouseleave_Setter(mthis, __arg_0) native "Document_onmouseleave_Setter";
  onmouseleave_Setter_(mthis, __arg_0) => onmouseleave_Setter(mthis, __arg_0);

  static onmousemove_Getter(mthis) native "Document_onmousemove_Getter";
  onmousemove_Getter_(mthis) => onmousemove_Getter(mthis);

  static onmousemove_Setter(mthis, __arg_0) native "Document_onmousemove_Setter";
  onmousemove_Setter_(mthis, __arg_0) => onmousemove_Setter(mthis, __arg_0);

  static onmouseout_Getter(mthis) native "Document_onmouseout_Getter";
  onmouseout_Getter_(mthis) => onmouseout_Getter(mthis);

  static onmouseout_Setter(mthis, __arg_0) native "Document_onmouseout_Setter";
  onmouseout_Setter_(mthis, __arg_0) => onmouseout_Setter(mthis, __arg_0);

  static onmouseover_Getter(mthis) native "Document_onmouseover_Getter";
  onmouseover_Getter_(mthis) => onmouseover_Getter(mthis);

  static onmouseover_Setter(mthis, __arg_0) native "Document_onmouseover_Setter";
  onmouseover_Setter_(mthis, __arg_0) => onmouseover_Setter(mthis, __arg_0);

  static onmouseup_Getter(mthis) native "Document_onmouseup_Getter";
  onmouseup_Getter_(mthis) => onmouseup_Getter(mthis);

  static onmouseup_Setter(mthis, __arg_0) native "Document_onmouseup_Setter";
  onmouseup_Setter_(mthis, __arg_0) => onmouseup_Setter(mthis, __arg_0);

  static onmousewheel_Getter(mthis) native "Document_onmousewheel_Getter";
  onmousewheel_Getter_(mthis) => onmousewheel_Getter(mthis);

  static onmousewheel_Setter(mthis, __arg_0) native "Document_onmousewheel_Setter";
  onmousewheel_Setter_(mthis, __arg_0) => onmousewheel_Setter(mthis, __arg_0);

  static onpaste_Getter(mthis) native "Document_onpaste_Getter";
  onpaste_Getter_(mthis) => onpaste_Getter(mthis);

  static onpaste_Setter(mthis, __arg_0) native "Document_onpaste_Setter";
  onpaste_Setter_(mthis, __arg_0) => onpaste_Setter(mthis, __arg_0);

  static onpause_Getter(mthis) native "Document_onpause_Getter";
  onpause_Getter_(mthis) => onpause_Getter(mthis);

  static onpause_Setter(mthis, __arg_0) native "Document_onpause_Setter";
  onpause_Setter_(mthis, __arg_0) => onpause_Setter(mthis, __arg_0);

  static onplay_Getter(mthis) native "Document_onplay_Getter";
  onplay_Getter_(mthis) => onplay_Getter(mthis);

  static onplay_Setter(mthis, __arg_0) native "Document_onplay_Setter";
  onplay_Setter_(mthis, __arg_0) => onplay_Setter(mthis, __arg_0);

  static onplaying_Getter(mthis) native "Document_onplaying_Getter";
  onplaying_Getter_(mthis) => onplaying_Getter(mthis);

  static onplaying_Setter(mthis, __arg_0) native "Document_onplaying_Setter";
  onplaying_Setter_(mthis, __arg_0) => onplaying_Setter(mthis, __arg_0);

  static onpointerlockchange_Getter(mthis) native "Document_onpointerlockchange_Getter";
  onpointerlockchange_Getter_(mthis) => onpointerlockchange_Getter(mthis);

  static onpointerlockchange_Setter(mthis, __arg_0) native "Document_onpointerlockchange_Setter";
  onpointerlockchange_Setter_(mthis, __arg_0) => onpointerlockchange_Setter(mthis, __arg_0);

  static onpointerlockerror_Getter(mthis) native "Document_onpointerlockerror_Getter";
  onpointerlockerror_Getter_(mthis) => onpointerlockerror_Getter(mthis);

  static onpointerlockerror_Setter(mthis, __arg_0) native "Document_onpointerlockerror_Setter";
  onpointerlockerror_Setter_(mthis, __arg_0) => onpointerlockerror_Setter(mthis, __arg_0);

  static onprogress_Getter(mthis) native "Document_onprogress_Getter";
  onprogress_Getter_(mthis) => onprogress_Getter(mthis);

  static onprogress_Setter(mthis, __arg_0) native "Document_onprogress_Setter";
  onprogress_Setter_(mthis, __arg_0) => onprogress_Setter(mthis, __arg_0);

  static onratechange_Getter(mthis) native "Document_onratechange_Getter";
  onratechange_Getter_(mthis) => onratechange_Getter(mthis);

  static onratechange_Setter(mthis, __arg_0) native "Document_onratechange_Setter";
  onratechange_Setter_(mthis, __arg_0) => onratechange_Setter(mthis, __arg_0);

  static onreadystatechange_Getter(mthis) native "Document_onreadystatechange_Getter";
  onreadystatechange_Getter_(mthis) => onreadystatechange_Getter(mthis);

  static onreadystatechange_Setter(mthis, __arg_0) native "Document_onreadystatechange_Setter";
  onreadystatechange_Setter_(mthis, __arg_0) => onreadystatechange_Setter(mthis, __arg_0);

  static onreset_Getter(mthis) native "Document_onreset_Getter";
  onreset_Getter_(mthis) => onreset_Getter(mthis);

  static onreset_Setter(mthis, __arg_0) native "Document_onreset_Setter";
  onreset_Setter_(mthis, __arg_0) => onreset_Setter(mthis, __arg_0);

  static onresize_Getter(mthis) native "Document_onresize_Getter";
  onresize_Getter_(mthis) => onresize_Getter(mthis);

  static onresize_Setter(mthis, __arg_0) native "Document_onresize_Setter";
  onresize_Setter_(mthis, __arg_0) => onresize_Setter(mthis, __arg_0);

  static onscroll_Getter(mthis) native "Document_onscroll_Getter";
  onscroll_Getter_(mthis) => onscroll_Getter(mthis);

  static onscroll_Setter(mthis, __arg_0) native "Document_onscroll_Setter";
  onscroll_Setter_(mthis, __arg_0) => onscroll_Setter(mthis, __arg_0);

  static onsearch_Getter(mthis) native "Document_onsearch_Getter";
  onsearch_Getter_(mthis) => onsearch_Getter(mthis);

  static onsearch_Setter(mthis, __arg_0) native "Document_onsearch_Setter";
  onsearch_Setter_(mthis, __arg_0) => onsearch_Setter(mthis, __arg_0);

  static onsecuritypolicyviolation_Getter(mthis) native "Document_onsecuritypolicyviolation_Getter";
  onsecuritypolicyviolation_Getter_(mthis) => onsecuritypolicyviolation_Getter(mthis);

  static onsecuritypolicyviolation_Setter(mthis, __arg_0) native "Document_onsecuritypolicyviolation_Setter";
  onsecuritypolicyviolation_Setter_(mthis, __arg_0) => onsecuritypolicyviolation_Setter(mthis, __arg_0);

  static onseeked_Getter(mthis) native "Document_onseeked_Getter";
  onseeked_Getter_(mthis) => onseeked_Getter(mthis);

  static onseeked_Setter(mthis, __arg_0) native "Document_onseeked_Setter";
  onseeked_Setter_(mthis, __arg_0) => onseeked_Setter(mthis, __arg_0);

  static onseeking_Getter(mthis) native "Document_onseeking_Getter";
  onseeking_Getter_(mthis) => onseeking_Getter(mthis);

  static onseeking_Setter(mthis, __arg_0) native "Document_onseeking_Setter";
  onseeking_Setter_(mthis, __arg_0) => onseeking_Setter(mthis, __arg_0);

  static onselect_Getter(mthis) native "Document_onselect_Getter";
  onselect_Getter_(mthis) => onselect_Getter(mthis);

  static onselect_Setter(mthis, __arg_0) native "Document_onselect_Setter";
  onselect_Setter_(mthis, __arg_0) => onselect_Setter(mthis, __arg_0);

  static onselectionchange_Getter(mthis) native "Document_onselectionchange_Getter";
  onselectionchange_Getter_(mthis) => onselectionchange_Getter(mthis);

  static onselectionchange_Setter(mthis, __arg_0) native "Document_onselectionchange_Setter";
  onselectionchange_Setter_(mthis, __arg_0) => onselectionchange_Setter(mthis, __arg_0);

  static onselectstart_Getter(mthis) native "Document_onselectstart_Getter";
  onselectstart_Getter_(mthis) => onselectstart_Getter(mthis);

  static onselectstart_Setter(mthis, __arg_0) native "Document_onselectstart_Setter";
  onselectstart_Setter_(mthis, __arg_0) => onselectstart_Setter(mthis, __arg_0);

  static onshow_Getter(mthis) native "Document_onshow_Getter";
  onshow_Getter_(mthis) => onshow_Getter(mthis);

  static onshow_Setter(mthis, __arg_0) native "Document_onshow_Setter";
  onshow_Setter_(mthis, __arg_0) => onshow_Setter(mthis, __arg_0);

  static onstalled_Getter(mthis) native "Document_onstalled_Getter";
  onstalled_Getter_(mthis) => onstalled_Getter(mthis);

  static onstalled_Setter(mthis, __arg_0) native "Document_onstalled_Setter";
  onstalled_Setter_(mthis, __arg_0) => onstalled_Setter(mthis, __arg_0);

  static onsubmit_Getter(mthis) native "Document_onsubmit_Getter";
  onsubmit_Getter_(mthis) => onsubmit_Getter(mthis);

  static onsubmit_Setter(mthis, __arg_0) native "Document_onsubmit_Setter";
  onsubmit_Setter_(mthis, __arg_0) => onsubmit_Setter(mthis, __arg_0);

  static onsuspend_Getter(mthis) native "Document_onsuspend_Getter";
  onsuspend_Getter_(mthis) => onsuspend_Getter(mthis);

  static onsuspend_Setter(mthis, __arg_0) native "Document_onsuspend_Setter";
  onsuspend_Setter_(mthis, __arg_0) => onsuspend_Setter(mthis, __arg_0);

  static ontimeupdate_Getter(mthis) native "Document_ontimeupdate_Getter";
  ontimeupdate_Getter_(mthis) => ontimeupdate_Getter(mthis);

  static ontimeupdate_Setter(mthis, __arg_0) native "Document_ontimeupdate_Setter";
  ontimeupdate_Setter_(mthis, __arg_0) => ontimeupdate_Setter(mthis, __arg_0);

  static ontoggle_Getter(mthis) native "Document_ontoggle_Getter";
  ontoggle_Getter_(mthis) => ontoggle_Getter(mthis);

  static ontoggle_Setter(mthis, __arg_0) native "Document_ontoggle_Setter";
  ontoggle_Setter_(mthis, __arg_0) => ontoggle_Setter(mthis, __arg_0);

  static ontouchcancel_Getter(mthis) native "Document_ontouchcancel_Getter";
  ontouchcancel_Getter_(mthis) => ontouchcancel_Getter(mthis);

  static ontouchcancel_Setter(mthis, __arg_0) native "Document_ontouchcancel_Setter";
  ontouchcancel_Setter_(mthis, __arg_0) => ontouchcancel_Setter(mthis, __arg_0);

  static ontouchend_Getter(mthis) native "Document_ontouchend_Getter";
  ontouchend_Getter_(mthis) => ontouchend_Getter(mthis);

  static ontouchend_Setter(mthis, __arg_0) native "Document_ontouchend_Setter";
  ontouchend_Setter_(mthis, __arg_0) => ontouchend_Setter(mthis, __arg_0);

  static ontouchmove_Getter(mthis) native "Document_ontouchmove_Getter";
  ontouchmove_Getter_(mthis) => ontouchmove_Getter(mthis);

  static ontouchmove_Setter(mthis, __arg_0) native "Document_ontouchmove_Setter";
  ontouchmove_Setter_(mthis, __arg_0) => ontouchmove_Setter(mthis, __arg_0);

  static ontouchstart_Getter(mthis) native "Document_ontouchstart_Getter";
  ontouchstart_Getter_(mthis) => ontouchstart_Getter(mthis);

  static ontouchstart_Setter(mthis, __arg_0) native "Document_ontouchstart_Setter";
  ontouchstart_Setter_(mthis, __arg_0) => ontouchstart_Setter(mthis, __arg_0);

  static onvolumechange_Getter(mthis) native "Document_onvolumechange_Getter";
  onvolumechange_Getter_(mthis) => onvolumechange_Getter(mthis);

  static onvolumechange_Setter(mthis, __arg_0) native "Document_onvolumechange_Setter";
  onvolumechange_Setter_(mthis, __arg_0) => onvolumechange_Setter(mthis, __arg_0);

  static onwaiting_Getter(mthis) native "Document_onwaiting_Getter";
  onwaiting_Getter_(mthis) => onwaiting_Getter(mthis);

  static onwaiting_Setter(mthis, __arg_0) native "Document_onwaiting_Setter";
  onwaiting_Setter_(mthis, __arg_0) => onwaiting_Setter(mthis, __arg_0);

  static onwebkitfullscreenchange_Getter(mthis) native "Document_onwebkitfullscreenchange_Getter";
  onwebkitfullscreenchange_Getter_(mthis) => onwebkitfullscreenchange_Getter(mthis);

  static onwebkitfullscreenchange_Setter(mthis, __arg_0) native "Document_onwebkitfullscreenchange_Setter";
  onwebkitfullscreenchange_Setter_(mthis, __arg_0) => onwebkitfullscreenchange_Setter(mthis, __arg_0);

  static onwebkitfullscreenerror_Getter(mthis) native "Document_onwebkitfullscreenerror_Getter";
  onwebkitfullscreenerror_Getter_(mthis) => onwebkitfullscreenerror_Getter(mthis);

  static onwebkitfullscreenerror_Setter(mthis, __arg_0) native "Document_onwebkitfullscreenerror_Setter";
  onwebkitfullscreenerror_Setter_(mthis, __arg_0) => onwebkitfullscreenerror_Setter(mthis, __arg_0);

  static onwheel_Getter(mthis) native "Document_onwheel_Getter";
  onwheel_Getter_(mthis) => onwheel_Getter(mthis);

  static onwheel_Setter(mthis, __arg_0) native "Document_onwheel_Setter";
  onwheel_Setter_(mthis, __arg_0) => onwheel_Setter(mthis, __arg_0);

  static plugins_Getter(mthis) native "Document_plugins_Getter";
  plugins_Getter_(mthis) => plugins_Getter(mthis);

  static pointerLockElement_Getter(mthis) native "Document_pointerLockElement_Getter";
  pointerLockElement_Getter_(mthis) => pointerLockElement_Getter(mthis);

  static preferredStylesheetSet_Getter(mthis) native "Document_preferredStylesheetSet_Getter";
  preferredStylesheetSet_Getter_(mthis) => preferredStylesheetSet_Getter(mthis);

  static queryCommandEnabled_Callback_0(mthis) native "Document_queryCommandEnabled_Callback";
  queryCommandEnabled_Callback_0_(mthis) => queryCommandEnabled_Callback_0(mthis);

  static queryCommandEnabled_Callback_1(mthis, __arg_0) native "Document_queryCommandEnabled_Callback";
  queryCommandEnabled_Callback_1_(mthis, __arg_0) => queryCommandEnabled_Callback_1(mthis, __arg_0);

  static queryCommandEnabled_Callback_2(mthis, __arg_0, __arg_1) native "Document_queryCommandEnabled_Callback";
  queryCommandEnabled_Callback_2_(mthis, __arg_0, __arg_1) => queryCommandEnabled_Callback_2(mthis, __arg_0, __arg_1);

  static queryCommandEnabled_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_queryCommandEnabled_Callback";
  queryCommandEnabled_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => queryCommandEnabled_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static queryCommandIndeterm_Callback_0(mthis) native "Document_queryCommandIndeterm_Callback";
  queryCommandIndeterm_Callback_0_(mthis) => queryCommandIndeterm_Callback_0(mthis);

  static queryCommandIndeterm_Callback_1(mthis, __arg_0) native "Document_queryCommandIndeterm_Callback";
  queryCommandIndeterm_Callback_1_(mthis, __arg_0) => queryCommandIndeterm_Callback_1(mthis, __arg_0);

  static queryCommandIndeterm_Callback_2(mthis, __arg_0, __arg_1) native "Document_queryCommandIndeterm_Callback";
  queryCommandIndeterm_Callback_2_(mthis, __arg_0, __arg_1) => queryCommandIndeterm_Callback_2(mthis, __arg_0, __arg_1);

  static queryCommandIndeterm_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_queryCommandIndeterm_Callback";
  queryCommandIndeterm_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => queryCommandIndeterm_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static queryCommandState_Callback_0(mthis) native "Document_queryCommandState_Callback";
  queryCommandState_Callback_0_(mthis) => queryCommandState_Callback_0(mthis);

  static queryCommandState_Callback_1(mthis, __arg_0) native "Document_queryCommandState_Callback";
  queryCommandState_Callback_1_(mthis, __arg_0) => queryCommandState_Callback_1(mthis, __arg_0);

  static queryCommandState_Callback_2(mthis, __arg_0, __arg_1) native "Document_queryCommandState_Callback";
  queryCommandState_Callback_2_(mthis, __arg_0, __arg_1) => queryCommandState_Callback_2(mthis, __arg_0, __arg_1);

  static queryCommandState_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_queryCommandState_Callback";
  queryCommandState_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => queryCommandState_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static queryCommandSupported_Callback_0(mthis) native "Document_queryCommandSupported_Callback";
  queryCommandSupported_Callback_0_(mthis) => queryCommandSupported_Callback_0(mthis);

  static queryCommandSupported_Callback_1(mthis, __arg_0) native "Document_queryCommandSupported_Callback";
  queryCommandSupported_Callback_1_(mthis, __arg_0) => queryCommandSupported_Callback_1(mthis, __arg_0);

  static queryCommandSupported_Callback_2(mthis, __arg_0, __arg_1) native "Document_queryCommandSupported_Callback";
  queryCommandSupported_Callback_2_(mthis, __arg_0, __arg_1) => queryCommandSupported_Callback_2(mthis, __arg_0, __arg_1);

  static queryCommandSupported_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_queryCommandSupported_Callback";
  queryCommandSupported_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => queryCommandSupported_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static queryCommandValue_Callback_0(mthis) native "Document_queryCommandValue_Callback";
  queryCommandValue_Callback_0_(mthis) => queryCommandValue_Callback_0(mthis);

  static queryCommandValue_Callback_1(mthis, __arg_0) native "Document_queryCommandValue_Callback";
  queryCommandValue_Callback_1_(mthis, __arg_0) => queryCommandValue_Callback_1(mthis, __arg_0);

  static queryCommandValue_Callback_2(mthis, __arg_0, __arg_1) native "Document_queryCommandValue_Callback";
  queryCommandValue_Callback_2_(mthis, __arg_0, __arg_1) => queryCommandValue_Callback_2(mthis, __arg_0, __arg_1);

  static queryCommandValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_queryCommandValue_Callback";
  queryCommandValue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => queryCommandValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static querySelectorAll_Callback_0(mthis) native "Document_querySelectorAll_Callback";
  querySelectorAll_Callback_0_(mthis) => querySelectorAll_Callback_0(mthis);

  static querySelectorAll_Callback_1(mthis, __arg_0) native "Document_querySelectorAll_Callback";
  querySelectorAll_Callback_1_(mthis, __arg_0) => querySelectorAll_Callback_1(mthis, __arg_0);

  static querySelectorAll_Callback_2(mthis, __arg_0, __arg_1) native "Document_querySelectorAll_Callback";
  querySelectorAll_Callback_2_(mthis, __arg_0, __arg_1) => querySelectorAll_Callback_2(mthis, __arg_0, __arg_1);

  static querySelectorAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_querySelectorAll_Callback";
  querySelectorAll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => querySelectorAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static querySelector_Callback_0(mthis) native "Document_querySelector_Callback";
  querySelector_Callback_0_(mthis) => querySelector_Callback_0(mthis);

  static querySelector_Callback_1(mthis, __arg_0) native "Document_querySelector_Callback";
  querySelector_Callback_1_(mthis, __arg_0) => querySelector_Callback_1(mthis, __arg_0);

  static querySelector_Callback_2(mthis, __arg_0, __arg_1) native "Document_querySelector_Callback";
  querySelector_Callback_2_(mthis, __arg_0, __arg_1) => querySelector_Callback_2(mthis, __arg_0, __arg_1);

  static querySelector_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_querySelector_Callback";
  querySelector_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => querySelector_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readyState_Getter(mthis) native "Document_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static referrer_Getter(mthis) native "Document_referrer_Getter";
  referrer_Getter_(mthis) => referrer_Getter(mthis);

  static registerElement_Callback_0(mthis) native "Document_registerElement_Callback";
  registerElement_Callback_0_(mthis) => registerElement_Callback_0(mthis);

  static registerElement_Callback_1(mthis, __arg_0) native "Document_registerElement_Callback";
  registerElement_Callback_1_(mthis, __arg_0) => registerElement_Callback_1(mthis, __arg_0);

  static registerElement_Callback_2(mthis, __arg_0, __arg_1) native "Document_registerElement_Callback";
  registerElement_Callback_2_(mthis, __arg_0, __arg_1) => registerElement_Callback_2(mthis, __arg_0, __arg_1);

  static registerElement_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_registerElement_Callback";
  registerElement_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => registerElement_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static registerElement_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Document_registerElement_Callback";
  registerElement_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => registerElement_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static rootElement_Getter(mthis) native "Document_rootElement_Getter";
  rootElement_Getter_(mthis) => rootElement_Getter(mthis);

  static scripts_Getter(mthis) native "Document_scripts_Getter";
  scripts_Getter_(mthis) => scripts_Getter(mthis);

  static selectedStylesheetSet_Getter(mthis) native "Document_selectedStylesheetSet_Getter";
  selectedStylesheetSet_Getter_(mthis) => selectedStylesheetSet_Getter(mthis);

  static selectedStylesheetSet_Setter(mthis, __arg_0) native "Document_selectedStylesheetSet_Setter";
  selectedStylesheetSet_Setter_(mthis, __arg_0) => selectedStylesheetSet_Setter(mthis, __arg_0);

  static styleSheets_Getter(mthis) native "Document_styleSheets_Getter";
  styleSheets_Getter_(mthis) => styleSheets_Getter(mthis);

  static timeline_Getter(mthis) native "Document_timeline_Getter";
  timeline_Getter_(mthis) => timeline_Getter(mthis);

  static title_Getter(mthis) native "Document_title_Getter";
  title_Getter_(mthis) => title_Getter(mthis);

  static title_Setter(mthis, __arg_0) native "Document_title_Setter";
  title_Setter_(mthis, __arg_0) => title_Setter(mthis, __arg_0);

  static transformDocumentToTreeView_Callback_0(mthis) native "Document_transformDocumentToTreeView_Callback";
  transformDocumentToTreeView_Callback_0_(mthis) => transformDocumentToTreeView_Callback_0(mthis);

  static transformDocumentToTreeView_Callback_1(mthis, __arg_0) native "Document_transformDocumentToTreeView_Callback";
  transformDocumentToTreeView_Callback_1_(mthis, __arg_0) => transformDocumentToTreeView_Callback_1(mthis, __arg_0);

  static transformDocumentToTreeView_Callback_2(mthis, __arg_0, __arg_1) native "Document_transformDocumentToTreeView_Callback";
  transformDocumentToTreeView_Callback_2_(mthis, __arg_0, __arg_1) => transformDocumentToTreeView_Callback_2(mthis, __arg_0, __arg_1);

  static transformDocumentToTreeView_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Document_transformDocumentToTreeView_Callback";
  transformDocumentToTreeView_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => transformDocumentToTreeView_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static visibilityState_Getter(mthis) native "Document_visibilityState_Getter";
  visibilityState_Getter_(mthis) => visibilityState_Getter(mthis);

  static webkitCancelFullScreen_Callback_0(mthis) native "Document_webkitCancelFullScreen_Callback";
  webkitCancelFullScreen_Callback_0_(mthis) => webkitCancelFullScreen_Callback_0(mthis);

  static webkitCancelFullScreen_Callback_1(mthis, __arg_0) native "Document_webkitCancelFullScreen_Callback";
  webkitCancelFullScreen_Callback_1_(mthis, __arg_0) => webkitCancelFullScreen_Callback_1(mthis, __arg_0);

  static webkitCancelFullScreen_Callback_2(mthis, __arg_0, __arg_1) native "Document_webkitCancelFullScreen_Callback";
  webkitCancelFullScreen_Callback_2_(mthis, __arg_0, __arg_1) => webkitCancelFullScreen_Callback_2(mthis, __arg_0, __arg_1);

  static webkitExitFullscreen_Callback_0(mthis) native "Document_webkitExitFullscreen_Callback";
  webkitExitFullscreen_Callback_0_(mthis) => webkitExitFullscreen_Callback_0(mthis);

  static webkitExitFullscreen_Callback_1(mthis, __arg_0) native "Document_webkitExitFullscreen_Callback";
  webkitExitFullscreen_Callback_1_(mthis, __arg_0) => webkitExitFullscreen_Callback_1(mthis, __arg_0);

  static webkitExitFullscreen_Callback_2(mthis, __arg_0, __arg_1) native "Document_webkitExitFullscreen_Callback";
  webkitExitFullscreen_Callback_2_(mthis, __arg_0, __arg_1) => webkitExitFullscreen_Callback_2(mthis, __arg_0, __arg_1);

  static webkitFullscreenElement_Getter(mthis) native "Document_webkitFullscreenElement_Getter";
  webkitFullscreenElement_Getter_(mthis) => webkitFullscreenElement_Getter(mthis);

  static webkitFullscreenEnabled_Getter(mthis) native "Document_webkitFullscreenEnabled_Getter";
  webkitFullscreenEnabled_Getter_(mthis) => webkitFullscreenEnabled_Getter(mthis);

  static webkitHidden_Getter(mthis) native "Document_webkitHidden_Getter";
  webkitHidden_Getter_(mthis) => webkitHidden_Getter(mthis);

  static webkitIsFullScreen_Getter(mthis) native "Document_webkitIsFullScreen_Getter";
  webkitIsFullScreen_Getter_(mthis) => webkitIsFullScreen_Getter(mthis);

  static webkitVisibilityState_Getter(mthis) native "Document_webkitVisibilityState_Getter";
  webkitVisibilityState_Getter_(mthis) => webkitVisibilityState_Getter(mthis);

  static xmlEncoding_Getter(mthis) native "Document_xmlEncoding_Getter";
  xmlEncoding_Getter_(mthis) => xmlEncoding_Getter(mthis);

}

class BlinkDocumentFragment extends BlinkNode {
  static final instance = new BlinkDocumentFragment();

  static childElementCount_Getter(mthis) native "DocumentFragment_childElementCount_Getter";
  childElementCount_Getter_(mthis) => childElementCount_Getter(mthis);

  static constructorCallback_0() native "DocumentFragment_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "DocumentFragment_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "DocumentFragment_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static firstElementChild_Getter(mthis) native "DocumentFragment_firstElementChild_Getter";
  firstElementChild_Getter_(mthis) => firstElementChild_Getter(mthis);

  static getElementById_Callback_0(mthis) native "DocumentFragment_getElementById_Callback";
  getElementById_Callback_0_(mthis) => getElementById_Callback_0(mthis);

  static getElementById_Callback_1(mthis, __arg_0) native "DocumentFragment_getElementById_Callback";
  getElementById_Callback_1_(mthis, __arg_0) => getElementById_Callback_1(mthis, __arg_0);

  static getElementById_Callback_2(mthis, __arg_0, __arg_1) native "DocumentFragment_getElementById_Callback";
  getElementById_Callback_2_(mthis, __arg_0, __arg_1) => getElementById_Callback_2(mthis, __arg_0, __arg_1);

  static getElementById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DocumentFragment_getElementById_Callback";
  getElementById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static lastElementChild_Getter(mthis) native "DocumentFragment_lastElementChild_Getter";
  lastElementChild_Getter_(mthis) => lastElementChild_Getter(mthis);

  static querySelectorAll_Callback_0(mthis) native "DocumentFragment_querySelectorAll_Callback";
  querySelectorAll_Callback_0_(mthis) => querySelectorAll_Callback_0(mthis);

  static querySelectorAll_Callback_1(mthis, __arg_0) native "DocumentFragment_querySelectorAll_Callback";
  querySelectorAll_Callback_1_(mthis, __arg_0) => querySelectorAll_Callback_1(mthis, __arg_0);

  static querySelectorAll_Callback_2(mthis, __arg_0, __arg_1) native "DocumentFragment_querySelectorAll_Callback";
  querySelectorAll_Callback_2_(mthis, __arg_0, __arg_1) => querySelectorAll_Callback_2(mthis, __arg_0, __arg_1);

  static querySelectorAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DocumentFragment_querySelectorAll_Callback";
  querySelectorAll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => querySelectorAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static querySelector_Callback_0(mthis) native "DocumentFragment_querySelector_Callback";
  querySelector_Callback_0_(mthis) => querySelector_Callback_0(mthis);

  static querySelector_Callback_1(mthis, __arg_0) native "DocumentFragment_querySelector_Callback";
  querySelector_Callback_1_(mthis, __arg_0) => querySelector_Callback_1(mthis, __arg_0);

  static querySelector_Callback_2(mthis, __arg_0, __arg_1) native "DocumentFragment_querySelector_Callback";
  querySelector_Callback_2_(mthis, __arg_0, __arg_1) => querySelector_Callback_2(mthis, __arg_0, __arg_1);

  static querySelector_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "DocumentFragment_querySelector_Callback";
  querySelector_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => querySelector_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkDocumentType extends BlinkNode {
  static final instance = new BlinkDocumentType();

}

class BlinkDynamicsCompressorNode extends BlinkAudioNode {
  static final instance = new BlinkDynamicsCompressorNode();

  static attack_Getter(mthis) native "DynamicsCompressorNode_attack_Getter";
  attack_Getter_(mthis) => attack_Getter(mthis);

  static knee_Getter(mthis) native "DynamicsCompressorNode_knee_Getter";
  knee_Getter_(mthis) => knee_Getter(mthis);

  static ratio_Getter(mthis) native "DynamicsCompressorNode_ratio_Getter";
  ratio_Getter_(mthis) => ratio_Getter(mthis);

  static reduction_Getter(mthis) native "DynamicsCompressorNode_reduction_Getter";
  reduction_Getter_(mthis) => reduction_Getter(mthis);

  static release_Getter(mthis) native "DynamicsCompressorNode_release_Getter";
  release_Getter_(mthis) => release_Getter(mthis);

  static threshold_Getter(mthis) native "DynamicsCompressorNode_threshold_Getter";
  threshold_Getter_(mthis) => threshold_Getter(mthis);

}

class BlinkEXTBlendMinMax {
  static final instance = new BlinkEXTBlendMinMax();

}

class BlinkEXTFragDepth {
  static final instance = new BlinkEXTFragDepth();

}

class BlinkEXTShaderTextureLOD {
  static final instance = new BlinkEXTShaderTextureLOD();

}

class BlinkEXTTextureFilterAnisotropic {
  static final instance = new BlinkEXTTextureFilterAnisotropic();

}

class BlinkElement extends BlinkNode {
  static final instance = new BlinkElement();

  static animate_Callback_0(mthis) native "Element_animate_Callback";
  animate_Callback_0_(mthis) => animate_Callback_0(mthis);

  static animate_Callback_1(mthis, __arg_0) native "Element_animate_Callback";
  animate_Callback_1_(mthis, __arg_0) => animate_Callback_1(mthis, __arg_0);

  static animate_Callback_2(mthis, __arg_0, __arg_1) native "Element_animate_Callback";
  animate_Callback_2_(mthis, __arg_0, __arg_1) => animate_Callback_2(mthis, __arg_0, __arg_1);

  static animate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_animate_Callback";
  animate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => animate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static animate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Element_animate_Callback";
  animate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => animate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static attributes_Getter(mthis) native "Element_attributes_Getter";
  attributes_Getter_(mthis) => attributes_Getter(mthis);

  static blur_Callback_0(mthis) native "Element_blur_Callback";
  blur_Callback_0_(mthis) => blur_Callback_0(mthis);

  static blur_Callback_1(mthis, __arg_0) native "Element_blur_Callback";
  blur_Callback_1_(mthis, __arg_0) => blur_Callback_1(mthis, __arg_0);

  static blur_Callback_2(mthis, __arg_0, __arg_1) native "Element_blur_Callback";
  blur_Callback_2_(mthis, __arg_0, __arg_1) => blur_Callback_2(mthis, __arg_0, __arg_1);

  static childElementCount_Getter(mthis) native "Element_childElementCount_Getter";
  childElementCount_Getter_(mthis) => childElementCount_Getter(mthis);

  static children_Getter(mthis) native "Element_children_Getter";
  children_Getter_(mthis) => children_Getter(mthis);

  static classList_Getter(mthis) native "Element_classList_Getter";
  classList_Getter_(mthis) => classList_Getter(mthis);

  static className_Getter(mthis) native "Element_className_Getter";
  className_Getter_(mthis) => className_Getter(mthis);

  static className_Setter(mthis, __arg_0) native "Element_className_Setter";
  className_Setter_(mthis, __arg_0) => className_Setter(mthis, __arg_0);

  static clientHeight_Getter(mthis) native "Element_clientHeight_Getter";
  clientHeight_Getter_(mthis) => clientHeight_Getter(mthis);

  static clientLeft_Getter(mthis) native "Element_clientLeft_Getter";
  clientLeft_Getter_(mthis) => clientLeft_Getter(mthis);

  static clientTop_Getter(mthis) native "Element_clientTop_Getter";
  clientTop_Getter_(mthis) => clientTop_Getter(mthis);

  static clientWidth_Getter(mthis) native "Element_clientWidth_Getter";
  clientWidth_Getter_(mthis) => clientWidth_Getter(mthis);

  static createShadowRoot_Callback_0(mthis) native "Element_createShadowRoot_Callback";
  createShadowRoot_Callback_0_(mthis) => createShadowRoot_Callback_0(mthis);

  static createShadowRoot_Callback_1(mthis, __arg_0) native "Element_createShadowRoot_Callback";
  createShadowRoot_Callback_1_(mthis, __arg_0) => createShadowRoot_Callback_1(mthis, __arg_0);

  static createShadowRoot_Callback_2(mthis, __arg_0, __arg_1) native "Element_createShadowRoot_Callback";
  createShadowRoot_Callback_2_(mthis, __arg_0, __arg_1) => createShadowRoot_Callback_2(mthis, __arg_0, __arg_1);

  static firstElementChild_Getter(mthis) native "Element_firstElementChild_Getter";
  firstElementChild_Getter_(mthis) => firstElementChild_Getter(mthis);

  static focus_Callback_0(mthis) native "Element_focus_Callback";
  focus_Callback_0_(mthis) => focus_Callback_0(mthis);

  static focus_Callback_1(mthis, __arg_0) native "Element_focus_Callback";
  focus_Callback_1_(mthis, __arg_0) => focus_Callback_1(mthis, __arg_0);

  static focus_Callback_2(mthis, __arg_0, __arg_1) native "Element_focus_Callback";
  focus_Callback_2_(mthis, __arg_0, __arg_1) => focus_Callback_2(mthis, __arg_0, __arg_1);

  static getAnimationPlayers_Callback_0(mthis) native "Element_getAnimationPlayers_Callback";
  getAnimationPlayers_Callback_0_(mthis) => getAnimationPlayers_Callback_0(mthis);

  static getAnimationPlayers_Callback_1(mthis, __arg_0) native "Element_getAnimationPlayers_Callback";
  getAnimationPlayers_Callback_1_(mthis, __arg_0) => getAnimationPlayers_Callback_1(mthis, __arg_0);

  static getAnimationPlayers_Callback_2(mthis, __arg_0, __arg_1) native "Element_getAnimationPlayers_Callback";
  getAnimationPlayers_Callback_2_(mthis, __arg_0, __arg_1) => getAnimationPlayers_Callback_2(mthis, __arg_0, __arg_1);

  static getAttributeNS_Callback_0(mthis) native "Element_getAttributeNS_Callback";
  getAttributeNS_Callback_0_(mthis) => getAttributeNS_Callback_0(mthis);

  static getAttributeNS_Callback_1(mthis, __arg_0) native "Element_getAttributeNS_Callback";
  getAttributeNS_Callback_1_(mthis, __arg_0) => getAttributeNS_Callback_1(mthis, __arg_0);

  static getAttributeNS_Callback_2(mthis, __arg_0, __arg_1) native "Element_getAttributeNS_Callback";
  getAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) => getAttributeNS_Callback_2(mthis, __arg_0, __arg_1);

  static getAttributeNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_getAttributeNS_Callback";
  getAttributeNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getAttributeNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getAttributeNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Element_getAttributeNS_Callback";
  getAttributeNS_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getAttributeNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getAttribute_Callback_0(mthis) native "Element_getAttribute_Callback";
  getAttribute_Callback_0_(mthis) => getAttribute_Callback_0(mthis);

  static getAttribute_Callback_1(mthis, __arg_0) native "Element_getAttribute_Callback";
  getAttribute_Callback_1_(mthis, __arg_0) => getAttribute_Callback_1(mthis, __arg_0);

  static getAttribute_Callback_2(mthis, __arg_0, __arg_1) native "Element_getAttribute_Callback";
  getAttribute_Callback_2_(mthis, __arg_0, __arg_1) => getAttribute_Callback_2(mthis, __arg_0, __arg_1);

  static getAttribute_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_getAttribute_Callback";
  getAttribute_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getAttribute_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getBoundingClientRect_Callback_0(mthis) native "Element_getBoundingClientRect_Callback";
  getBoundingClientRect_Callback_0_(mthis) => getBoundingClientRect_Callback_0(mthis);

  static getBoundingClientRect_Callback_1(mthis, __arg_0) native "Element_getBoundingClientRect_Callback";
  getBoundingClientRect_Callback_1_(mthis, __arg_0) => getBoundingClientRect_Callback_1(mthis, __arg_0);

  static getBoundingClientRect_Callback_2(mthis, __arg_0, __arg_1) native "Element_getBoundingClientRect_Callback";
  getBoundingClientRect_Callback_2_(mthis, __arg_0, __arg_1) => getBoundingClientRect_Callback_2(mthis, __arg_0, __arg_1);

  static getClientRects_Callback_0(mthis) native "Element_getClientRects_Callback";
  getClientRects_Callback_0_(mthis) => getClientRects_Callback_0(mthis);

  static getClientRects_Callback_1(mthis, __arg_0) native "Element_getClientRects_Callback";
  getClientRects_Callback_1_(mthis, __arg_0) => getClientRects_Callback_1(mthis, __arg_0);

  static getClientRects_Callback_2(mthis, __arg_0, __arg_1) native "Element_getClientRects_Callback";
  getClientRects_Callback_2_(mthis, __arg_0, __arg_1) => getClientRects_Callback_2(mthis, __arg_0, __arg_1);

  static getDestinationInsertionPoints_Callback_0(mthis) native "Element_getDestinationInsertionPoints_Callback";
  getDestinationInsertionPoints_Callback_0_(mthis) => getDestinationInsertionPoints_Callback_0(mthis);

  static getDestinationInsertionPoints_Callback_1(mthis, __arg_0) native "Element_getDestinationInsertionPoints_Callback";
  getDestinationInsertionPoints_Callback_1_(mthis, __arg_0) => getDestinationInsertionPoints_Callback_1(mthis, __arg_0);

  static getDestinationInsertionPoints_Callback_2(mthis, __arg_0, __arg_1) native "Element_getDestinationInsertionPoints_Callback";
  getDestinationInsertionPoints_Callback_2_(mthis, __arg_0, __arg_1) => getDestinationInsertionPoints_Callback_2(mthis, __arg_0, __arg_1);

  static getElementsByClassName_Callback_0(mthis) native "Element_getElementsByClassName_Callback";
  getElementsByClassName_Callback_0_(mthis) => getElementsByClassName_Callback_0(mthis);

  static getElementsByClassName_Callback_1(mthis, __arg_0) native "Element_getElementsByClassName_Callback";
  getElementsByClassName_Callback_1_(mthis, __arg_0) => getElementsByClassName_Callback_1(mthis, __arg_0);

  static getElementsByClassName_Callback_2(mthis, __arg_0, __arg_1) native "Element_getElementsByClassName_Callback";
  getElementsByClassName_Callback_2_(mthis, __arg_0, __arg_1) => getElementsByClassName_Callback_2(mthis, __arg_0, __arg_1);

  static getElementsByClassName_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_getElementsByClassName_Callback";
  getElementsByClassName_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementsByClassName_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getElementsByTagName_Callback_0(mthis) native "Element_getElementsByTagName_Callback";
  getElementsByTagName_Callback_0_(mthis) => getElementsByTagName_Callback_0(mthis);

  static getElementsByTagName_Callback_1(mthis, __arg_0) native "Element_getElementsByTagName_Callback";
  getElementsByTagName_Callback_1_(mthis, __arg_0) => getElementsByTagName_Callback_1(mthis, __arg_0);

  static getElementsByTagName_Callback_2(mthis, __arg_0, __arg_1) native "Element_getElementsByTagName_Callback";
  getElementsByTagName_Callback_2_(mthis, __arg_0, __arg_1) => getElementsByTagName_Callback_2(mthis, __arg_0, __arg_1);

  static getElementsByTagName_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_getElementsByTagName_Callback";
  getElementsByTagName_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementsByTagName_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static hasAttributeNS_Callback_0(mthis) native "Element_hasAttributeNS_Callback";
  hasAttributeNS_Callback_0_(mthis) => hasAttributeNS_Callback_0(mthis);

  static hasAttributeNS_Callback_1(mthis, __arg_0) native "Element_hasAttributeNS_Callback";
  hasAttributeNS_Callback_1_(mthis, __arg_0) => hasAttributeNS_Callback_1(mthis, __arg_0);

  static hasAttributeNS_Callback_2(mthis, __arg_0, __arg_1) native "Element_hasAttributeNS_Callback";
  hasAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) => hasAttributeNS_Callback_2(mthis, __arg_0, __arg_1);

  static hasAttributeNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_hasAttributeNS_Callback";
  hasAttributeNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => hasAttributeNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static hasAttributeNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Element_hasAttributeNS_Callback";
  hasAttributeNS_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => hasAttributeNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static hasAttribute_Callback_0(mthis) native "Element_hasAttribute_Callback";
  hasAttribute_Callback_0_(mthis) => hasAttribute_Callback_0(mthis);

  static hasAttribute_Callback_1(mthis, __arg_0) native "Element_hasAttribute_Callback";
  hasAttribute_Callback_1_(mthis, __arg_0) => hasAttribute_Callback_1(mthis, __arg_0);

  static hasAttribute_Callback_2(mthis, __arg_0, __arg_1) native "Element_hasAttribute_Callback";
  hasAttribute_Callback_2_(mthis, __arg_0, __arg_1) => hasAttribute_Callback_2(mthis, __arg_0, __arg_1);

  static hasAttribute_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_hasAttribute_Callback";
  hasAttribute_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => hasAttribute_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static hasAttributes_Callback_0(mthis) native "Element_hasAttributes_Callback";
  hasAttributes_Callback_0_(mthis) => hasAttributes_Callback_0(mthis);

  static hasAttributes_Callback_1(mthis, __arg_0) native "Element_hasAttributes_Callback";
  hasAttributes_Callback_1_(mthis, __arg_0) => hasAttributes_Callback_1(mthis, __arg_0);

  static hasAttributes_Callback_2(mthis, __arg_0, __arg_1) native "Element_hasAttributes_Callback";
  hasAttributes_Callback_2_(mthis, __arg_0, __arg_1) => hasAttributes_Callback_2(mthis, __arg_0, __arg_1);

  static id_Getter(mthis) native "Element_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static id_Setter(mthis, __arg_0) native "Element_id_Setter";
  id_Setter_(mthis, __arg_0) => id_Setter(mthis, __arg_0);

  static innerHTML_Getter(mthis) native "Element_innerHTML_Getter";
  innerHTML_Getter_(mthis) => innerHTML_Getter(mthis);

  static innerHTML_Setter(mthis, __arg_0) native "Element_innerHTML_Setter";
  innerHTML_Setter_(mthis, __arg_0) => innerHTML_Setter(mthis, __arg_0);

  static insertAdjacentElement_Callback_0(mthis) native "Element_insertAdjacentElement_Callback";
  insertAdjacentElement_Callback_0_(mthis) => insertAdjacentElement_Callback_0(mthis);

  static insertAdjacentElement_Callback_1(mthis, __arg_0) native "Element_insertAdjacentElement_Callback";
  insertAdjacentElement_Callback_1_(mthis, __arg_0) => insertAdjacentElement_Callback_1(mthis, __arg_0);

  static insertAdjacentElement_Callback_2(mthis, __arg_0, __arg_1) native "Element_insertAdjacentElement_Callback";
  insertAdjacentElement_Callback_2_(mthis, __arg_0, __arg_1) => insertAdjacentElement_Callback_2(mthis, __arg_0, __arg_1);

  static insertAdjacentElement_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_insertAdjacentElement_Callback";
  insertAdjacentElement_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertAdjacentElement_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertAdjacentElement_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Element_insertAdjacentElement_Callback";
  insertAdjacentElement_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertAdjacentElement_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static insertAdjacentHTML_Callback_0(mthis) native "Element_insertAdjacentHTML_Callback";
  insertAdjacentHTML_Callback_0_(mthis) => insertAdjacentHTML_Callback_0(mthis);

  static insertAdjacentHTML_Callback_1(mthis, __arg_0) native "Element_insertAdjacentHTML_Callback";
  insertAdjacentHTML_Callback_1_(mthis, __arg_0) => insertAdjacentHTML_Callback_1(mthis, __arg_0);

  static insertAdjacentHTML_Callback_2(mthis, __arg_0, __arg_1) native "Element_insertAdjacentHTML_Callback";
  insertAdjacentHTML_Callback_2_(mthis, __arg_0, __arg_1) => insertAdjacentHTML_Callback_2(mthis, __arg_0, __arg_1);

  static insertAdjacentHTML_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_insertAdjacentHTML_Callback";
  insertAdjacentHTML_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertAdjacentHTML_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertAdjacentHTML_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Element_insertAdjacentHTML_Callback";
  insertAdjacentHTML_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertAdjacentHTML_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static insertAdjacentText_Callback_0(mthis) native "Element_insertAdjacentText_Callback";
  insertAdjacentText_Callback_0_(mthis) => insertAdjacentText_Callback_0(mthis);

  static insertAdjacentText_Callback_1(mthis, __arg_0) native "Element_insertAdjacentText_Callback";
  insertAdjacentText_Callback_1_(mthis, __arg_0) => insertAdjacentText_Callback_1(mthis, __arg_0);

  static insertAdjacentText_Callback_2(mthis, __arg_0, __arg_1) native "Element_insertAdjacentText_Callback";
  insertAdjacentText_Callback_2_(mthis, __arg_0, __arg_1) => insertAdjacentText_Callback_2(mthis, __arg_0, __arg_1);

  static insertAdjacentText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_insertAdjacentText_Callback";
  insertAdjacentText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertAdjacentText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertAdjacentText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Element_insertAdjacentText_Callback";
  insertAdjacentText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertAdjacentText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static lastElementChild_Getter(mthis) native "Element_lastElementChild_Getter";
  lastElementChild_Getter_(mthis) => lastElementChild_Getter(mthis);

  static localName_Getter(mthis) native "Element_localName_Getter";
  localName_Getter_(mthis) => localName_Getter(mthis);

  static matches_Callback_0(mthis) native "Element_matches_Callback";
  matches_Callback_0_(mthis) => matches_Callback_0(mthis);

  static matches_Callback_1(mthis, __arg_0) native "Element_matches_Callback";
  matches_Callback_1_(mthis, __arg_0) => matches_Callback_1(mthis, __arg_0);

  static matches_Callback_2(mthis, __arg_0, __arg_1) native "Element_matches_Callback";
  matches_Callback_2_(mthis, __arg_0, __arg_1) => matches_Callback_2(mthis, __arg_0, __arg_1);

  static matches_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_matches_Callback";
  matches_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => matches_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static namespaceURI_Getter(mthis) native "Element_namespaceURI_Getter";
  namespaceURI_Getter_(mthis) => namespaceURI_Getter(mthis);

  static nextElementSibling_Getter(mthis) native "Element_nextElementSibling_Getter";
  nextElementSibling_Getter_(mthis) => nextElementSibling_Getter(mthis);

  static offsetHeight_Getter(mthis) native "Element_offsetHeight_Getter";
  offsetHeight_Getter_(mthis) => offsetHeight_Getter(mthis);

  static offsetLeft_Getter(mthis) native "Element_offsetLeft_Getter";
  offsetLeft_Getter_(mthis) => offsetLeft_Getter(mthis);

  static offsetParent_Getter(mthis) native "Element_offsetParent_Getter";
  offsetParent_Getter_(mthis) => offsetParent_Getter(mthis);

  static offsetTop_Getter(mthis) native "Element_offsetTop_Getter";
  offsetTop_Getter_(mthis) => offsetTop_Getter(mthis);

  static offsetWidth_Getter(mthis) native "Element_offsetWidth_Getter";
  offsetWidth_Getter_(mthis) => offsetWidth_Getter(mthis);

  static onbeforecopy_Getter(mthis) native "Element_onbeforecopy_Getter";
  onbeforecopy_Getter_(mthis) => onbeforecopy_Getter(mthis);

  static onbeforecopy_Setter(mthis, __arg_0) native "Element_onbeforecopy_Setter";
  onbeforecopy_Setter_(mthis, __arg_0) => onbeforecopy_Setter(mthis, __arg_0);

  static onbeforecut_Getter(mthis) native "Element_onbeforecut_Getter";
  onbeforecut_Getter_(mthis) => onbeforecut_Getter(mthis);

  static onbeforecut_Setter(mthis, __arg_0) native "Element_onbeforecut_Setter";
  onbeforecut_Setter_(mthis, __arg_0) => onbeforecut_Setter(mthis, __arg_0);

  static onbeforepaste_Getter(mthis) native "Element_onbeforepaste_Getter";
  onbeforepaste_Getter_(mthis) => onbeforepaste_Getter(mthis);

  static onbeforepaste_Setter(mthis, __arg_0) native "Element_onbeforepaste_Setter";
  onbeforepaste_Setter_(mthis, __arg_0) => onbeforepaste_Setter(mthis, __arg_0);

  static oncopy_Getter(mthis) native "Element_oncopy_Getter";
  oncopy_Getter_(mthis) => oncopy_Getter(mthis);

  static oncopy_Setter(mthis, __arg_0) native "Element_oncopy_Setter";
  oncopy_Setter_(mthis, __arg_0) => oncopy_Setter(mthis, __arg_0);

  static oncut_Getter(mthis) native "Element_oncut_Getter";
  oncut_Getter_(mthis) => oncut_Getter(mthis);

  static oncut_Setter(mthis, __arg_0) native "Element_oncut_Setter";
  oncut_Setter_(mthis, __arg_0) => oncut_Setter(mthis, __arg_0);

  static onpaste_Getter(mthis) native "Element_onpaste_Getter";
  onpaste_Getter_(mthis) => onpaste_Getter(mthis);

  static onpaste_Setter(mthis, __arg_0) native "Element_onpaste_Setter";
  onpaste_Setter_(mthis, __arg_0) => onpaste_Setter(mthis, __arg_0);

  static onsearch_Getter(mthis) native "Element_onsearch_Getter";
  onsearch_Getter_(mthis) => onsearch_Getter(mthis);

  static onsearch_Setter(mthis, __arg_0) native "Element_onsearch_Setter";
  onsearch_Setter_(mthis, __arg_0) => onsearch_Setter(mthis, __arg_0);

  static onselectstart_Getter(mthis) native "Element_onselectstart_Getter";
  onselectstart_Getter_(mthis) => onselectstart_Getter(mthis);

  static onselectstart_Setter(mthis, __arg_0) native "Element_onselectstart_Setter";
  onselectstart_Setter_(mthis, __arg_0) => onselectstart_Setter(mthis, __arg_0);

  static ontouchcancel_Getter(mthis) native "Element_ontouchcancel_Getter";
  ontouchcancel_Getter_(mthis) => ontouchcancel_Getter(mthis);

  static ontouchcancel_Setter(mthis, __arg_0) native "Element_ontouchcancel_Setter";
  ontouchcancel_Setter_(mthis, __arg_0) => ontouchcancel_Setter(mthis, __arg_0);

  static ontouchend_Getter(mthis) native "Element_ontouchend_Getter";
  ontouchend_Getter_(mthis) => ontouchend_Getter(mthis);

  static ontouchend_Setter(mthis, __arg_0) native "Element_ontouchend_Setter";
  ontouchend_Setter_(mthis, __arg_0) => ontouchend_Setter(mthis, __arg_0);

  static ontouchmove_Getter(mthis) native "Element_ontouchmove_Getter";
  ontouchmove_Getter_(mthis) => ontouchmove_Getter(mthis);

  static ontouchmove_Setter(mthis, __arg_0) native "Element_ontouchmove_Setter";
  ontouchmove_Setter_(mthis, __arg_0) => ontouchmove_Setter(mthis, __arg_0);

  static ontouchstart_Getter(mthis) native "Element_ontouchstart_Getter";
  ontouchstart_Getter_(mthis) => ontouchstart_Getter(mthis);

  static ontouchstart_Setter(mthis, __arg_0) native "Element_ontouchstart_Setter";
  ontouchstart_Setter_(mthis, __arg_0) => ontouchstart_Setter(mthis, __arg_0);

  static onwebkitfullscreenchange_Getter(mthis) native "Element_onwebkitfullscreenchange_Getter";
  onwebkitfullscreenchange_Getter_(mthis) => onwebkitfullscreenchange_Getter(mthis);

  static onwebkitfullscreenchange_Setter(mthis, __arg_0) native "Element_onwebkitfullscreenchange_Setter";
  onwebkitfullscreenchange_Setter_(mthis, __arg_0) => onwebkitfullscreenchange_Setter(mthis, __arg_0);

  static onwebkitfullscreenerror_Getter(mthis) native "Element_onwebkitfullscreenerror_Getter";
  onwebkitfullscreenerror_Getter_(mthis) => onwebkitfullscreenerror_Getter(mthis);

  static onwebkitfullscreenerror_Setter(mthis, __arg_0) native "Element_onwebkitfullscreenerror_Setter";
  onwebkitfullscreenerror_Setter_(mthis, __arg_0) => onwebkitfullscreenerror_Setter(mthis, __arg_0);

  static onwheel_Getter(mthis) native "Element_onwheel_Getter";
  onwheel_Getter_(mthis) => onwheel_Getter(mthis);

  static onwheel_Setter(mthis, __arg_0) native "Element_onwheel_Setter";
  onwheel_Setter_(mthis, __arg_0) => onwheel_Setter(mthis, __arg_0);

  static outerHTML_Getter(mthis) native "Element_outerHTML_Getter";
  outerHTML_Getter_(mthis) => outerHTML_Getter(mthis);

  static outerHTML_Setter(mthis, __arg_0) native "Element_outerHTML_Setter";
  outerHTML_Setter_(mthis, __arg_0) => outerHTML_Setter(mthis, __arg_0);

  static prefix_Getter(mthis) native "Element_prefix_Getter";
  prefix_Getter_(mthis) => prefix_Getter(mthis);

  static prefix_Setter(mthis, __arg_0) native "Element_prefix_Setter";
  prefix_Setter_(mthis, __arg_0) => prefix_Setter(mthis, __arg_0);

  static previousElementSibling_Getter(mthis) native "Element_previousElementSibling_Getter";
  previousElementSibling_Getter_(mthis) => previousElementSibling_Getter(mthis);

  static querySelectorAll_Callback_0(mthis) native "Element_querySelectorAll_Callback";
  querySelectorAll_Callback_0_(mthis) => querySelectorAll_Callback_0(mthis);

  static querySelectorAll_Callback_1(mthis, __arg_0) native "Element_querySelectorAll_Callback";
  querySelectorAll_Callback_1_(mthis, __arg_0) => querySelectorAll_Callback_1(mthis, __arg_0);

  static querySelectorAll_Callback_2(mthis, __arg_0, __arg_1) native "Element_querySelectorAll_Callback";
  querySelectorAll_Callback_2_(mthis, __arg_0, __arg_1) => querySelectorAll_Callback_2(mthis, __arg_0, __arg_1);

  static querySelectorAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_querySelectorAll_Callback";
  querySelectorAll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => querySelectorAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static querySelector_Callback_0(mthis) native "Element_querySelector_Callback";
  querySelector_Callback_0_(mthis) => querySelector_Callback_0(mthis);

  static querySelector_Callback_1(mthis, __arg_0) native "Element_querySelector_Callback";
  querySelector_Callback_1_(mthis, __arg_0) => querySelector_Callback_1(mthis, __arg_0);

  static querySelector_Callback_2(mthis, __arg_0, __arg_1) native "Element_querySelector_Callback";
  querySelector_Callback_2_(mthis, __arg_0, __arg_1) => querySelector_Callback_2(mthis, __arg_0, __arg_1);

  static querySelector_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_querySelector_Callback";
  querySelector_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => querySelector_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static removeAttributeNS_Callback_0(mthis) native "Element_removeAttributeNS_Callback";
  removeAttributeNS_Callback_0_(mthis) => removeAttributeNS_Callback_0(mthis);

  static removeAttributeNS_Callback_1(mthis, __arg_0) native "Element_removeAttributeNS_Callback";
  removeAttributeNS_Callback_1_(mthis, __arg_0) => removeAttributeNS_Callback_1(mthis, __arg_0);

  static removeAttributeNS_Callback_2(mthis, __arg_0, __arg_1) native "Element_removeAttributeNS_Callback";
  removeAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) => removeAttributeNS_Callback_2(mthis, __arg_0, __arg_1);

  static removeAttributeNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_removeAttributeNS_Callback";
  removeAttributeNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeAttributeNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static removeAttributeNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Element_removeAttributeNS_Callback";
  removeAttributeNS_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => removeAttributeNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static removeAttribute_Callback_0(mthis) native "Element_removeAttribute_Callback";
  removeAttribute_Callback_0_(mthis) => removeAttribute_Callback_0(mthis);

  static removeAttribute_Callback_1(mthis, __arg_0) native "Element_removeAttribute_Callback";
  removeAttribute_Callback_1_(mthis, __arg_0) => removeAttribute_Callback_1(mthis, __arg_0);

  static removeAttribute_Callback_2(mthis, __arg_0, __arg_1) native "Element_removeAttribute_Callback";
  removeAttribute_Callback_2_(mthis, __arg_0, __arg_1) => removeAttribute_Callback_2(mthis, __arg_0, __arg_1);

  static removeAttribute_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_removeAttribute_Callback";
  removeAttribute_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeAttribute_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static remove_Callback_0(mthis) native "Element_remove_Callback";
  remove_Callback_0_(mthis) => remove_Callback_0(mthis);

  static remove_Callback_1(mthis, __arg_0) native "Element_remove_Callback";
  remove_Callback_1_(mthis, __arg_0) => remove_Callback_1(mthis, __arg_0);

  static remove_Callback_2(mthis, __arg_0, __arg_1) native "Element_remove_Callback";
  remove_Callback_2_(mthis, __arg_0, __arg_1) => remove_Callback_2(mthis, __arg_0, __arg_1);

  static requestFullscreen_Callback_0(mthis) native "Element_requestFullscreen_Callback";
  requestFullscreen_Callback_0_(mthis) => requestFullscreen_Callback_0(mthis);

  static requestFullscreen_Callback_1(mthis, __arg_0) native "Element_requestFullscreen_Callback";
  requestFullscreen_Callback_1_(mthis, __arg_0) => requestFullscreen_Callback_1(mthis, __arg_0);

  static requestFullscreen_Callback_2(mthis, __arg_0, __arg_1) native "Element_requestFullscreen_Callback";
  requestFullscreen_Callback_2_(mthis, __arg_0, __arg_1) => requestFullscreen_Callback_2(mthis, __arg_0, __arg_1);

  static requestPointerLock_Callback_0(mthis) native "Element_requestPointerLock_Callback";
  requestPointerLock_Callback_0_(mthis) => requestPointerLock_Callback_0(mthis);

  static requestPointerLock_Callback_1(mthis, __arg_0) native "Element_requestPointerLock_Callback";
  requestPointerLock_Callback_1_(mthis, __arg_0) => requestPointerLock_Callback_1(mthis, __arg_0);

  static requestPointerLock_Callback_2(mthis, __arg_0, __arg_1) native "Element_requestPointerLock_Callback";
  requestPointerLock_Callback_2_(mthis, __arg_0, __arg_1) => requestPointerLock_Callback_2(mthis, __arg_0, __arg_1);

  static scrollHeight_Getter(mthis) native "Element_scrollHeight_Getter";
  scrollHeight_Getter_(mthis) => scrollHeight_Getter(mthis);

  static scrollIntoViewIfNeeded_Callback_0(mthis) native "Element_scrollIntoViewIfNeeded_Callback";
  scrollIntoViewIfNeeded_Callback_0_(mthis) => scrollIntoViewIfNeeded_Callback_0(mthis);

  static scrollIntoViewIfNeeded_Callback_1(mthis, __arg_0) native "Element_scrollIntoViewIfNeeded_Callback";
  scrollIntoViewIfNeeded_Callback_1_(mthis, __arg_0) => scrollIntoViewIfNeeded_Callback_1(mthis, __arg_0);

  static scrollIntoViewIfNeeded_Callback_2(mthis, __arg_0, __arg_1) native "Element_scrollIntoViewIfNeeded_Callback";
  scrollIntoViewIfNeeded_Callback_2_(mthis, __arg_0, __arg_1) => scrollIntoViewIfNeeded_Callback_2(mthis, __arg_0, __arg_1);

  static scrollIntoViewIfNeeded_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_scrollIntoViewIfNeeded_Callback";
  scrollIntoViewIfNeeded_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scrollIntoViewIfNeeded_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scrollIntoView_Callback_0(mthis) native "Element_scrollIntoView_Callback";
  scrollIntoView_Callback_0_(mthis) => scrollIntoView_Callback_0(mthis);

  static scrollIntoView_Callback_1(mthis, __arg_0) native "Element_scrollIntoView_Callback";
  scrollIntoView_Callback_1_(mthis, __arg_0) => scrollIntoView_Callback_1(mthis, __arg_0);

  static scrollIntoView_Callback_2(mthis, __arg_0, __arg_1) native "Element_scrollIntoView_Callback";
  scrollIntoView_Callback_2_(mthis, __arg_0, __arg_1) => scrollIntoView_Callback_2(mthis, __arg_0, __arg_1);

  static scrollIntoView_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_scrollIntoView_Callback";
  scrollIntoView_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scrollIntoView_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scrollLeft_Getter(mthis) native "Element_scrollLeft_Getter";
  scrollLeft_Getter_(mthis) => scrollLeft_Getter(mthis);

  static scrollLeft_Setter(mthis, __arg_0) native "Element_scrollLeft_Setter";
  scrollLeft_Setter_(mthis, __arg_0) => scrollLeft_Setter(mthis, __arg_0);

  static scrollTop_Getter(mthis) native "Element_scrollTop_Getter";
  scrollTop_Getter_(mthis) => scrollTop_Getter(mthis);

  static scrollTop_Setter(mthis, __arg_0) native "Element_scrollTop_Setter";
  scrollTop_Setter_(mthis, __arg_0) => scrollTop_Setter(mthis, __arg_0);

  static scrollWidth_Getter(mthis) native "Element_scrollWidth_Getter";
  scrollWidth_Getter_(mthis) => scrollWidth_Getter(mthis);

  static setAttributeNS_Callback_1(mthis, __arg_0) native "Element_setAttributeNS_Callback";
  setAttributeNS_Callback_1_(mthis, __arg_0) => setAttributeNS_Callback_1(mthis, __arg_0);

  static setAttributeNS_Callback_2(mthis, __arg_0, __arg_1) native "Element_setAttributeNS_Callback";
  setAttributeNS_Callback_2_(mthis, __arg_0, __arg_1) => setAttributeNS_Callback_2(mthis, __arg_0, __arg_1);

  static setAttributeNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_setAttributeNS_Callback";
  setAttributeNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setAttributeNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setAttributeNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Element_setAttributeNS_Callback";
  setAttributeNS_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setAttributeNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setAttributeNS_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Element_setAttributeNS_Callback";
  setAttributeNS_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setAttributeNS_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setAttribute_Callback_0(mthis) native "Element_setAttribute_Callback";
  setAttribute_Callback_0_(mthis) => setAttribute_Callback_0(mthis);

  static setAttribute_Callback_1(mthis, __arg_0) native "Element_setAttribute_Callback";
  setAttribute_Callback_1_(mthis, __arg_0) => setAttribute_Callback_1(mthis, __arg_0);

  static setAttribute_Callback_2(mthis, __arg_0, __arg_1) native "Element_setAttribute_Callback";
  setAttribute_Callback_2_(mthis, __arg_0, __arg_1) => setAttribute_Callback_2(mthis, __arg_0, __arg_1);

  static setAttribute_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_setAttribute_Callback";
  setAttribute_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setAttribute_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setAttribute_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Element_setAttribute_Callback";
  setAttribute_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setAttribute_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static shadowRoot_Getter(mthis) native "Element_shadowRoot_Getter";
  shadowRoot_Getter_(mthis) => shadowRoot_Getter(mthis);

  static style_Getter(mthis) native "Element_style_Getter";
  style_Getter_(mthis) => style_Getter(mthis);

  static tagName_Getter(mthis) native "Element_tagName_Getter";
  tagName_Getter_(mthis) => tagName_Getter(mthis);

  static webkitRequestFullScreen_Callback_0(mthis) native "Element_webkitRequestFullScreen_Callback";
  webkitRequestFullScreen_Callback_0_(mthis) => webkitRequestFullScreen_Callback_0(mthis);

  static webkitRequestFullScreen_Callback_1(mthis, __arg_0) native "Element_webkitRequestFullScreen_Callback";
  webkitRequestFullScreen_Callback_1_(mthis, __arg_0) => webkitRequestFullScreen_Callback_1(mthis, __arg_0);

  static webkitRequestFullScreen_Callback_2(mthis, __arg_0, __arg_1) native "Element_webkitRequestFullScreen_Callback";
  webkitRequestFullScreen_Callback_2_(mthis, __arg_0, __arg_1) => webkitRequestFullScreen_Callback_2(mthis, __arg_0, __arg_1);

  static webkitRequestFullScreen_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Element_webkitRequestFullScreen_Callback";
  webkitRequestFullScreen_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitRequestFullScreen_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitRequestFullscreen_Callback_0(mthis) native "Element_webkitRequestFullscreen_Callback";
  webkitRequestFullscreen_Callback_0_(mthis) => webkitRequestFullscreen_Callback_0(mthis);

  static webkitRequestFullscreen_Callback_1(mthis, __arg_0) native "Element_webkitRequestFullscreen_Callback";
  webkitRequestFullscreen_Callback_1_(mthis, __arg_0) => webkitRequestFullscreen_Callback_1(mthis, __arg_0);

  static webkitRequestFullscreen_Callback_2(mthis, __arg_0, __arg_1) native "Element_webkitRequestFullscreen_Callback";
  webkitRequestFullscreen_Callback_2_(mthis, __arg_0, __arg_1) => webkitRequestFullscreen_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkEntry {
  static final instance = new BlinkEntry();

  static copyTo_Callback_0(mthis) native "Entry_copyTo_Callback";
  copyTo_Callback_0_(mthis) => copyTo_Callback_0(mthis);

  static copyTo_Callback_1(mthis, __arg_0) native "Entry_copyTo_Callback";
  copyTo_Callback_1_(mthis, __arg_0) => copyTo_Callback_1(mthis, __arg_0);

  static copyTo_Callback_2(mthis, __arg_0, __arg_1) native "Entry_copyTo_Callback";
  copyTo_Callback_2_(mthis, __arg_0, __arg_1) => copyTo_Callback_2(mthis, __arg_0, __arg_1);

  static copyTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Entry_copyTo_Callback";
  copyTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => copyTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static copyTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Entry_copyTo_Callback";
  copyTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => copyTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static copyTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Entry_copyTo_Callback";
  copyTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => copyTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static copyTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Entry_copyTo_Callback";
  copyTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => copyTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static filesystem_Getter(mthis) native "Entry_filesystem_Getter";
  filesystem_Getter_(mthis) => filesystem_Getter(mthis);

  static fullPath_Getter(mthis) native "Entry_fullPath_Getter";
  fullPath_Getter_(mthis) => fullPath_Getter(mthis);

  static getMetadata_Callback_0(mthis) native "Entry_getMetadata_Callback";
  getMetadata_Callback_0_(mthis) => getMetadata_Callback_0(mthis);

  static getMetadata_Callback_1(mthis, __arg_0) native "Entry_getMetadata_Callback";
  getMetadata_Callback_1_(mthis, __arg_0) => getMetadata_Callback_1(mthis, __arg_0);

  static getMetadata_Callback_2(mthis, __arg_0, __arg_1) native "Entry_getMetadata_Callback";
  getMetadata_Callback_2_(mthis, __arg_0, __arg_1) => getMetadata_Callback_2(mthis, __arg_0, __arg_1);

  static getMetadata_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Entry_getMetadata_Callback";
  getMetadata_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getMetadata_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getMetadata_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Entry_getMetadata_Callback";
  getMetadata_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getMetadata_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getParent_Callback_0(mthis) native "Entry_getParent_Callback";
  getParent_Callback_0_(mthis) => getParent_Callback_0(mthis);

  static getParent_Callback_1(mthis, __arg_0) native "Entry_getParent_Callback";
  getParent_Callback_1_(mthis, __arg_0) => getParent_Callback_1(mthis, __arg_0);

  static getParent_Callback_2(mthis, __arg_0, __arg_1) native "Entry_getParent_Callback";
  getParent_Callback_2_(mthis, __arg_0, __arg_1) => getParent_Callback_2(mthis, __arg_0, __arg_1);

  static getParent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Entry_getParent_Callback";
  getParent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getParent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getParent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Entry_getParent_Callback";
  getParent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getParent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static isDirectory_Getter(mthis) native "Entry_isDirectory_Getter";
  isDirectory_Getter_(mthis) => isDirectory_Getter(mthis);

  static isFile_Getter(mthis) native "Entry_isFile_Getter";
  isFile_Getter_(mthis) => isFile_Getter(mthis);

  static moveTo_Callback_0(mthis) native "Entry_moveTo_Callback";
  moveTo_Callback_0_(mthis) => moveTo_Callback_0(mthis);

  static moveTo_Callback_1(mthis, __arg_0) native "Entry_moveTo_Callback";
  moveTo_Callback_1_(mthis, __arg_0) => moveTo_Callback_1(mthis, __arg_0);

  static moveTo_Callback_2(mthis, __arg_0, __arg_1) native "Entry_moveTo_Callback";
  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => moveTo_Callback_2(mthis, __arg_0, __arg_1);

  static moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Entry_moveTo_Callback";
  moveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Entry_moveTo_Callback";
  moveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static moveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Entry_moveTo_Callback";
  moveTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => moveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static moveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Entry_moveTo_Callback";
  moveTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => moveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static name_Getter(mthis) native "Entry_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static remove_Callback_0(mthis) native "Entry_remove_Callback";
  remove_Callback_0_(mthis) => remove_Callback_0(mthis);

  static remove_Callback_1(mthis, __arg_0) native "Entry_remove_Callback";
  remove_Callback_1_(mthis, __arg_0) => remove_Callback_1(mthis, __arg_0);

  static remove_Callback_2(mthis, __arg_0, __arg_1) native "Entry_remove_Callback";
  remove_Callback_2_(mthis, __arg_0, __arg_1) => remove_Callback_2(mthis, __arg_0, __arg_1);

  static remove_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Entry_remove_Callback";
  remove_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => remove_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static remove_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Entry_remove_Callback";
  remove_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => remove_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static toURL_Callback_0(mthis) native "Entry_toURL_Callback";
  toURL_Callback_0_(mthis) => toURL_Callback_0(mthis);

  static toURL_Callback_1(mthis, __arg_0) native "Entry_toURL_Callback";
  toURL_Callback_1_(mthis, __arg_0) => toURL_Callback_1(mthis, __arg_0);

  static toURL_Callback_2(mthis, __arg_0, __arg_1) native "Entry_toURL_Callback";
  toURL_Callback_2_(mthis, __arg_0, __arg_1) => toURL_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkEntrySync {
  static final instance = new BlinkEntrySync();

  static copyTo_Callback_0(mthis) native "EntrySync_copyTo_Callback";
  copyTo_Callback_0_(mthis) => copyTo_Callback_0(mthis);

  static copyTo_Callback_1(mthis, __arg_0) native "EntrySync_copyTo_Callback";
  copyTo_Callback_1_(mthis, __arg_0) => copyTo_Callback_1(mthis, __arg_0);

  static copyTo_Callback_2(mthis, __arg_0, __arg_1) native "EntrySync_copyTo_Callback";
  copyTo_Callback_2_(mthis, __arg_0, __arg_1) => copyTo_Callback_2(mthis, __arg_0, __arg_1);

  static copyTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "EntrySync_copyTo_Callback";
  copyTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => copyTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static copyTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "EntrySync_copyTo_Callback";
  copyTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => copyTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static filesystem_Getter(mthis) native "EntrySync_filesystem_Getter";
  filesystem_Getter_(mthis) => filesystem_Getter(mthis);

  static fullPath_Getter(mthis) native "EntrySync_fullPath_Getter";
  fullPath_Getter_(mthis) => fullPath_Getter(mthis);

  static getMetadata_Callback_0(mthis) native "EntrySync_getMetadata_Callback";
  getMetadata_Callback_0_(mthis) => getMetadata_Callback_0(mthis);

  static getMetadata_Callback_1(mthis, __arg_0) native "EntrySync_getMetadata_Callback";
  getMetadata_Callback_1_(mthis, __arg_0) => getMetadata_Callback_1(mthis, __arg_0);

  static getMetadata_Callback_2(mthis, __arg_0, __arg_1) native "EntrySync_getMetadata_Callback";
  getMetadata_Callback_2_(mthis, __arg_0, __arg_1) => getMetadata_Callback_2(mthis, __arg_0, __arg_1);

  static getParent_Callback_0(mthis) native "EntrySync_getParent_Callback";
  getParent_Callback_0_(mthis) => getParent_Callback_0(mthis);

  static getParent_Callback_1(mthis, __arg_0) native "EntrySync_getParent_Callback";
  getParent_Callback_1_(mthis, __arg_0) => getParent_Callback_1(mthis, __arg_0);

  static getParent_Callback_2(mthis, __arg_0, __arg_1) native "EntrySync_getParent_Callback";
  getParent_Callback_2_(mthis, __arg_0, __arg_1) => getParent_Callback_2(mthis, __arg_0, __arg_1);

  static isDirectory_Getter(mthis) native "EntrySync_isDirectory_Getter";
  isDirectory_Getter_(mthis) => isDirectory_Getter(mthis);

  static isFile_Getter(mthis) native "EntrySync_isFile_Getter";
  isFile_Getter_(mthis) => isFile_Getter(mthis);

  static moveTo_Callback_0(mthis) native "EntrySync_moveTo_Callback";
  moveTo_Callback_0_(mthis) => moveTo_Callback_0(mthis);

  static moveTo_Callback_1(mthis, __arg_0) native "EntrySync_moveTo_Callback";
  moveTo_Callback_1_(mthis, __arg_0) => moveTo_Callback_1(mthis, __arg_0);

  static moveTo_Callback_2(mthis, __arg_0, __arg_1) native "EntrySync_moveTo_Callback";
  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => moveTo_Callback_2(mthis, __arg_0, __arg_1);

  static moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "EntrySync_moveTo_Callback";
  moveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "EntrySync_moveTo_Callback";
  moveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static name_Getter(mthis) native "EntrySync_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static remove_Callback_0(mthis) native "EntrySync_remove_Callback";
  remove_Callback_0_(mthis) => remove_Callback_0(mthis);

  static remove_Callback_1(mthis, __arg_0) native "EntrySync_remove_Callback";
  remove_Callback_1_(mthis, __arg_0) => remove_Callback_1(mthis, __arg_0);

  static remove_Callback_2(mthis, __arg_0, __arg_1) native "EntrySync_remove_Callback";
  remove_Callback_2_(mthis, __arg_0, __arg_1) => remove_Callback_2(mthis, __arg_0, __arg_1);

  static toURL_Callback_0(mthis) native "EntrySync_toURL_Callback";
  toURL_Callback_0_(mthis) => toURL_Callback_0(mthis);

  static toURL_Callback_1(mthis, __arg_0) native "EntrySync_toURL_Callback";
  toURL_Callback_1_(mthis, __arg_0) => toURL_Callback_1(mthis, __arg_0);

  static toURL_Callback_2(mthis, __arg_0, __arg_1) native "EntrySync_toURL_Callback";
  toURL_Callback_2_(mthis, __arg_0, __arg_1) => toURL_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkErrorEvent extends BlinkEvent {
  static final instance = new BlinkErrorEvent();

  static colno_Getter(mthis) native "ErrorEvent_colno_Getter";
  colno_Getter_(mthis) => colno_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "ErrorEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static error_Getter(mthis) native "ErrorEvent_error_Getter";
  error_Getter_(mthis) => error_Getter(mthis);

  static filename_Getter(mthis) native "ErrorEvent_filename_Getter";
  filename_Getter_(mthis) => filename_Getter(mthis);

  static lineno_Getter(mthis) native "ErrorEvent_lineno_Getter";
  lineno_Getter_(mthis) => lineno_Getter(mthis);

  static message_Getter(mthis) native "ErrorEvent_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

}

class BlinkEvent {
  static final instance = new BlinkEvent();

  static bubbles_Getter(mthis) native "Event_bubbles_Getter";
  bubbles_Getter_(mthis) => bubbles_Getter(mthis);

  static cancelBubble_Getter(mthis) native "Event_cancelBubble_Getter";
  cancelBubble_Getter_(mthis) => cancelBubble_Getter(mthis);

  static cancelBubble_Setter(mthis, __arg_0) native "Event_cancelBubble_Setter";
  cancelBubble_Setter_(mthis, __arg_0) => cancelBubble_Setter(mthis, __arg_0);

  static cancelable_Getter(mthis) native "Event_cancelable_Getter";
  cancelable_Getter_(mthis) => cancelable_Getter(mthis);

  static clipboardData_Getter(mthis) native "Event_clipboardData_Getter";
  clipboardData_Getter_(mthis) => clipboardData_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "Event_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static currentTarget_Getter(mthis) native "Event_currentTarget_Getter";
  currentTarget_Getter_(mthis) => currentTarget_Getter(mthis);

  static defaultPrevented_Getter(mthis) native "Event_defaultPrevented_Getter";
  defaultPrevented_Getter_(mthis) => defaultPrevented_Getter(mthis);

  static eventPhase_Getter(mthis) native "Event_eventPhase_Getter";
  eventPhase_Getter_(mthis) => eventPhase_Getter(mthis);

  static initEvent_Callback_0(mthis) native "Event_initEvent_Callback";
  initEvent_Callback_0_(mthis) => initEvent_Callback_0(mthis);

  static initEvent_Callback_1(mthis, __arg_0) native "Event_initEvent_Callback";
  initEvent_Callback_1_(mthis, __arg_0) => initEvent_Callback_1(mthis, __arg_0);

  static initEvent_Callback_2(mthis, __arg_0, __arg_1) native "Event_initEvent_Callback";
  initEvent_Callback_2_(mthis, __arg_0, __arg_1) => initEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Event_initEvent_Callback";
  initEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Event_initEvent_Callback";
  initEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Event_initEvent_Callback";
  initEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static path_Getter(mthis) native "Event_path_Getter";
  path_Getter_(mthis) => path_Getter(mthis);

  static preventDefault_Callback_0(mthis) native "Event_preventDefault_Callback";
  preventDefault_Callback_0_(mthis) => preventDefault_Callback_0(mthis);

  static preventDefault_Callback_1(mthis, __arg_0) native "Event_preventDefault_Callback";
  preventDefault_Callback_1_(mthis, __arg_0) => preventDefault_Callback_1(mthis, __arg_0);

  static preventDefault_Callback_2(mthis, __arg_0, __arg_1) native "Event_preventDefault_Callback";
  preventDefault_Callback_2_(mthis, __arg_0, __arg_1) => preventDefault_Callback_2(mthis, __arg_0, __arg_1);

  static returnValue_Getter(mthis) native "Event_returnValue_Getter";
  returnValue_Getter_(mthis) => returnValue_Getter(mthis);

  static returnValue_Setter(mthis, __arg_0) native "Event_returnValue_Setter";
  returnValue_Setter_(mthis, __arg_0) => returnValue_Setter(mthis, __arg_0);

  static stopImmediatePropagation_Callback_0(mthis) native "Event_stopImmediatePropagation_Callback";
  stopImmediatePropagation_Callback_0_(mthis) => stopImmediatePropagation_Callback_0(mthis);

  static stopImmediatePropagation_Callback_1(mthis, __arg_0) native "Event_stopImmediatePropagation_Callback";
  stopImmediatePropagation_Callback_1_(mthis, __arg_0) => stopImmediatePropagation_Callback_1(mthis, __arg_0);

  static stopImmediatePropagation_Callback_2(mthis, __arg_0, __arg_1) native "Event_stopImmediatePropagation_Callback";
  stopImmediatePropagation_Callback_2_(mthis, __arg_0, __arg_1) => stopImmediatePropagation_Callback_2(mthis, __arg_0, __arg_1);

  static stopPropagation_Callback_0(mthis) native "Event_stopPropagation_Callback";
  stopPropagation_Callback_0_(mthis) => stopPropagation_Callback_0(mthis);

  static stopPropagation_Callback_1(mthis, __arg_0) native "Event_stopPropagation_Callback";
  stopPropagation_Callback_1_(mthis, __arg_0) => stopPropagation_Callback_1(mthis, __arg_0);

  static stopPropagation_Callback_2(mthis, __arg_0, __arg_1) native "Event_stopPropagation_Callback";
  stopPropagation_Callback_2_(mthis, __arg_0, __arg_1) => stopPropagation_Callback_2(mthis, __arg_0, __arg_1);

  static target_Getter(mthis) native "Event_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

  static timeStamp_Getter(mthis) native "Event_timeStamp_Getter";
  timeStamp_Getter_(mthis) => timeStamp_Getter(mthis);

  static type_Getter(mthis) native "Event_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkEventSource extends BlinkEventTarget {
  static final instance = new BlinkEventSource();

  static close_Callback_0(mthis) native "EventSource_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "EventSource_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "EventSource_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "EventSource_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "EventSource_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "EventSource_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "EventSource_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "EventSource_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static onerror_Getter(mthis) native "EventSource_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "EventSource_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onmessage_Getter(mthis) native "EventSource_onmessage_Getter";
  onmessage_Getter_(mthis) => onmessage_Getter(mthis);

  static onmessage_Setter(mthis, __arg_0) native "EventSource_onmessage_Setter";
  onmessage_Setter_(mthis, __arg_0) => onmessage_Setter(mthis, __arg_0);

  static onopen_Getter(mthis) native "EventSource_onopen_Getter";
  onopen_Getter_(mthis) => onopen_Getter(mthis);

  static onopen_Setter(mthis, __arg_0) native "EventSource_onopen_Setter";
  onopen_Setter_(mthis, __arg_0) => onopen_Setter(mthis, __arg_0);

  static readyState_Getter(mthis) native "EventSource_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static url_Getter(mthis) native "EventSource_url_Getter";
  url_Getter_(mthis) => url_Getter(mthis);

  static withCredentials_Getter(mthis) native "EventSource_withCredentials_Getter";
  withCredentials_Getter_(mthis) => withCredentials_Getter(mthis);

}

class BlinkEventTarget {
  static final instance = new BlinkEventTarget();

  static addEventListener_Callback_0(mthis) native "EventTarget_addEventListener_Callback";
  addEventListener_Callback_0_(mthis) => addEventListener_Callback_0(mthis);

  static addEventListener_Callback_1(mthis, __arg_0) native "EventTarget_addEventListener_Callback";
  addEventListener_Callback_1_(mthis, __arg_0) => addEventListener_Callback_1(mthis, __arg_0);

  static addEventListener_Callback_2(mthis, __arg_0, __arg_1) native "EventTarget_addEventListener_Callback";
  addEventListener_Callback_2_(mthis, __arg_0, __arg_1) => addEventListener_Callback_2(mthis, __arg_0, __arg_1);

  static addEventListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "EventTarget_addEventListener_Callback";
  addEventListener_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addEventListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addEventListener_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "EventTarget_addEventListener_Callback";
  addEventListener_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => addEventListener_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static addEventListener_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "EventTarget_addEventListener_Callback";
  addEventListener_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => addEventListener_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static dispatchEvent_Callback_0(mthis) native "EventTarget_dispatchEvent_Callback";
  dispatchEvent_Callback_0_(mthis) => dispatchEvent_Callback_0(mthis);

  static dispatchEvent_Callback_1(mthis, __arg_0) native "EventTarget_dispatchEvent_Callback";
  dispatchEvent_Callback_1_(mthis, __arg_0) => dispatchEvent_Callback_1(mthis, __arg_0);

  static dispatchEvent_Callback_2(mthis, __arg_0, __arg_1) native "EventTarget_dispatchEvent_Callback";
  dispatchEvent_Callback_2_(mthis, __arg_0, __arg_1) => dispatchEvent_Callback_2(mthis, __arg_0, __arg_1);

  static dispatchEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "EventTarget_dispatchEvent_Callback";
  dispatchEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => dispatchEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static removeEventListener_Callback_0(mthis) native "EventTarget_removeEventListener_Callback";
  removeEventListener_Callback_0_(mthis) => removeEventListener_Callback_0(mthis);

  static removeEventListener_Callback_1(mthis, __arg_0) native "EventTarget_removeEventListener_Callback";
  removeEventListener_Callback_1_(mthis, __arg_0) => removeEventListener_Callback_1(mthis, __arg_0);

  static removeEventListener_Callback_2(mthis, __arg_0, __arg_1) native "EventTarget_removeEventListener_Callback";
  removeEventListener_Callback_2_(mthis, __arg_0, __arg_1) => removeEventListener_Callback_2(mthis, __arg_0, __arg_1);

  static removeEventListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "EventTarget_removeEventListener_Callback";
  removeEventListener_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeEventListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static removeEventListener_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "EventTarget_removeEventListener_Callback";
  removeEventListener_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => removeEventListener_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static removeEventListener_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "EventTarget_removeEventListener_Callback";
  removeEventListener_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => removeEventListener_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkExtendableEvent extends BlinkEvent {
  static final instance = new BlinkExtendableEvent();

  static waitUntil_Callback_0(mthis) native "ExtendableEvent_waitUntil_Callback";
  waitUntil_Callback_0_(mthis) => waitUntil_Callback_0(mthis);

  static waitUntil_Callback_1(mthis, __arg_0) native "ExtendableEvent_waitUntil_Callback";
  waitUntil_Callback_1_(mthis, __arg_0) => waitUntil_Callback_1(mthis, __arg_0);

  static waitUntil_Callback_2(mthis, __arg_0, __arg_1) native "ExtendableEvent_waitUntil_Callback";
  waitUntil_Callback_2_(mthis, __arg_0, __arg_1) => waitUntil_Callback_2(mthis, __arg_0, __arg_1);

  static waitUntil_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ExtendableEvent_waitUntil_Callback";
  waitUntil_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => waitUntil_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkFederatedCredential extends BlinkCredential {
  static final instance = new BlinkFederatedCredential();

  static constructorCallback_2(__arg_0, __arg_1) native "FederatedCredential_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "FederatedCredential_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "FederatedCredential_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "FederatedCredential_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "FederatedCredential_constructorCallback";
  constructorCallback_6_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static federation_Getter(mthis) native "FederatedCredential_federation_Getter";
  federation_Getter_(mthis) => federation_Getter(mthis);

}

class BlinkFetchEvent extends BlinkEvent {
  static final instance = new BlinkFetchEvent();

  static isReload_Getter(mthis) native "FetchEvent_isReload_Getter";
  isReload_Getter_(mthis) => isReload_Getter(mthis);

  static request_Getter(mthis) native "FetchEvent_request_Getter";
  request_Getter_(mthis) => request_Getter(mthis);

  static respondWith_Callback_0(mthis) native "FetchEvent_respondWith_Callback";
  respondWith_Callback_0_(mthis) => respondWith_Callback_0(mthis);

  static respondWith_Callback_1(mthis, __arg_0) native "FetchEvent_respondWith_Callback";
  respondWith_Callback_1_(mthis, __arg_0) => respondWith_Callback_1(mthis, __arg_0);

  static respondWith_Callback_2(mthis, __arg_0, __arg_1) native "FetchEvent_respondWith_Callback";
  respondWith_Callback_2_(mthis, __arg_0, __arg_1) => respondWith_Callback_2(mthis, __arg_0, __arg_1);

  static respondWith_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FetchEvent_respondWith_Callback";
  respondWith_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => respondWith_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkFile extends BlinkBlob {
  static final instance = new BlinkFile();

  static constructorCallback_0() native "File_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "File_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "File_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "File_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "File_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "File_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static lastModifiedDate_Getter(mthis) native "File_lastModifiedDate_Getter";
  lastModifiedDate_Getter_(mthis) => lastModifiedDate_Getter(mthis);

  static lastModified_Getter(mthis) native "File_lastModified_Getter";
  lastModified_Getter_(mthis) => lastModified_Getter(mthis);

  static name_Getter(mthis) native "File_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static webkitRelativePath_Getter(mthis) native "File_webkitRelativePath_Getter";
  webkitRelativePath_Getter_(mthis) => webkitRelativePath_Getter(mthis);

}

class BlinkFileEntry extends BlinkEntry {
  static final instance = new BlinkFileEntry();

  static createWriter_Callback_0(mthis) native "FileEntry_createWriter_Callback";
  createWriter_Callback_0_(mthis) => createWriter_Callback_0(mthis);

  static createWriter_Callback_1(mthis, __arg_0) native "FileEntry_createWriter_Callback";
  createWriter_Callback_1_(mthis, __arg_0) => createWriter_Callback_1(mthis, __arg_0);

  static createWriter_Callback_2(mthis, __arg_0, __arg_1) native "FileEntry_createWriter_Callback";
  createWriter_Callback_2_(mthis, __arg_0, __arg_1) => createWriter_Callback_2(mthis, __arg_0, __arg_1);

  static createWriter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileEntry_createWriter_Callback";
  createWriter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createWriter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createWriter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "FileEntry_createWriter_Callback";
  createWriter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createWriter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static file_Callback_0(mthis) native "FileEntry_file_Callback";
  file_Callback_0_(mthis) => file_Callback_0(mthis);

  static file_Callback_1(mthis, __arg_0) native "FileEntry_file_Callback";
  file_Callback_1_(mthis, __arg_0) => file_Callback_1(mthis, __arg_0);

  static file_Callback_2(mthis, __arg_0, __arg_1) native "FileEntry_file_Callback";
  file_Callback_2_(mthis, __arg_0, __arg_1) => file_Callback_2(mthis, __arg_0, __arg_1);

  static file_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileEntry_file_Callback";
  file_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => file_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static file_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "FileEntry_file_Callback";
  file_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => file_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkFileEntrySync extends BlinkEntrySync {
  static final instance = new BlinkFileEntrySync();

  static createWriter_Callback_0(mthis) native "FileEntrySync_createWriter_Callback";
  createWriter_Callback_0_(mthis) => createWriter_Callback_0(mthis);

  static createWriter_Callback_1(mthis, __arg_0) native "FileEntrySync_createWriter_Callback";
  createWriter_Callback_1_(mthis, __arg_0) => createWriter_Callback_1(mthis, __arg_0);

  static createWriter_Callback_2(mthis, __arg_0, __arg_1) native "FileEntrySync_createWriter_Callback";
  createWriter_Callback_2_(mthis, __arg_0, __arg_1) => createWriter_Callback_2(mthis, __arg_0, __arg_1);

  static file_Callback_0(mthis) native "FileEntrySync_file_Callback";
  file_Callback_0_(mthis) => file_Callback_0(mthis);

  static file_Callback_1(mthis, __arg_0) native "FileEntrySync_file_Callback";
  file_Callback_1_(mthis, __arg_0) => file_Callback_1(mthis, __arg_0);

  static file_Callback_2(mthis, __arg_0, __arg_1) native "FileEntrySync_file_Callback";
  file_Callback_2_(mthis, __arg_0, __arg_1) => file_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkFileError extends BlinkDOMError {
  static final instance = new BlinkFileError();

  static code_Getter(mthis) native "FileError_code_Getter";
  code_Getter_(mthis) => code_Getter(mthis);

}

class BlinkFileList {
  static final instance = new BlinkFileList();

  static $__getter___Callback_1(mthis, __arg_0) native "FileList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "FileList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "FileList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "FileList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "FileList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkFileReader extends BlinkEventTarget {
  static final instance = new BlinkFileReader();

  static abort_Callback_0(mthis) native "FileReader_abort_Callback";
  abort_Callback_0_(mthis) => abort_Callback_0(mthis);

  static abort_Callback_1(mthis, __arg_0) native "FileReader_abort_Callback";
  abort_Callback_1_(mthis, __arg_0) => abort_Callback_1(mthis, __arg_0);

  static abort_Callback_2(mthis, __arg_0, __arg_1) native "FileReader_abort_Callback";
  abort_Callback_2_(mthis, __arg_0, __arg_1) => abort_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "FileReader_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "FileReader_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "FileReader_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static error_Getter(mthis) native "FileReader_error_Getter";
  error_Getter_(mthis) => error_Getter(mthis);

  static onabort_Getter(mthis) native "FileReader_onabort_Getter";
  onabort_Getter_(mthis) => onabort_Getter(mthis);

  static onabort_Setter(mthis, __arg_0) native "FileReader_onabort_Setter";
  onabort_Setter_(mthis, __arg_0) => onabort_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "FileReader_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "FileReader_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onload_Getter(mthis) native "FileReader_onload_Getter";
  onload_Getter_(mthis) => onload_Getter(mthis);

  static onload_Setter(mthis, __arg_0) native "FileReader_onload_Setter";
  onload_Setter_(mthis, __arg_0) => onload_Setter(mthis, __arg_0);

  static onloadend_Getter(mthis) native "FileReader_onloadend_Getter";
  onloadend_Getter_(mthis) => onloadend_Getter(mthis);

  static onloadend_Setter(mthis, __arg_0) native "FileReader_onloadend_Setter";
  onloadend_Setter_(mthis, __arg_0) => onloadend_Setter(mthis, __arg_0);

  static onloadstart_Getter(mthis) native "FileReader_onloadstart_Getter";
  onloadstart_Getter_(mthis) => onloadstart_Getter(mthis);

  static onloadstart_Setter(mthis, __arg_0) native "FileReader_onloadstart_Setter";
  onloadstart_Setter_(mthis, __arg_0) => onloadstart_Setter(mthis, __arg_0);

  static onprogress_Getter(mthis) native "FileReader_onprogress_Getter";
  onprogress_Getter_(mthis) => onprogress_Getter(mthis);

  static onprogress_Setter(mthis, __arg_0) native "FileReader_onprogress_Setter";
  onprogress_Setter_(mthis, __arg_0) => onprogress_Setter(mthis, __arg_0);

  static readAsArrayBuffer_Callback_0(mthis) native "FileReader_readAsArrayBuffer_Callback";
  readAsArrayBuffer_Callback_0_(mthis) => readAsArrayBuffer_Callback_0(mthis);

  static readAsArrayBuffer_Callback_1(mthis, __arg_0) native "FileReader_readAsArrayBuffer_Callback";
  readAsArrayBuffer_Callback_1_(mthis, __arg_0) => readAsArrayBuffer_Callback_1(mthis, __arg_0);

  static readAsArrayBuffer_Callback_2(mthis, __arg_0, __arg_1) native "FileReader_readAsArrayBuffer_Callback";
  readAsArrayBuffer_Callback_2_(mthis, __arg_0, __arg_1) => readAsArrayBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static readAsArrayBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileReader_readAsArrayBuffer_Callback";
  readAsArrayBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readAsArrayBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readAsBinaryString_Callback_0(mthis) native "FileReader_readAsBinaryString_Callback";
  readAsBinaryString_Callback_0_(mthis) => readAsBinaryString_Callback_0(mthis);

  static readAsBinaryString_Callback_1(mthis, __arg_0) native "FileReader_readAsBinaryString_Callback";
  readAsBinaryString_Callback_1_(mthis, __arg_0) => readAsBinaryString_Callback_1(mthis, __arg_0);

  static readAsBinaryString_Callback_2(mthis, __arg_0, __arg_1) native "FileReader_readAsBinaryString_Callback";
  readAsBinaryString_Callback_2_(mthis, __arg_0, __arg_1) => readAsBinaryString_Callback_2(mthis, __arg_0, __arg_1);

  static readAsBinaryString_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileReader_readAsBinaryString_Callback";
  readAsBinaryString_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readAsBinaryString_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readAsDataURL_Callback_0(mthis) native "FileReader_readAsDataURL_Callback";
  readAsDataURL_Callback_0_(mthis) => readAsDataURL_Callback_0(mthis);

  static readAsDataURL_Callback_1(mthis, __arg_0) native "FileReader_readAsDataURL_Callback";
  readAsDataURL_Callback_1_(mthis, __arg_0) => readAsDataURL_Callback_1(mthis, __arg_0);

  static readAsDataURL_Callback_2(mthis, __arg_0, __arg_1) native "FileReader_readAsDataURL_Callback";
  readAsDataURL_Callback_2_(mthis, __arg_0, __arg_1) => readAsDataURL_Callback_2(mthis, __arg_0, __arg_1);

  static readAsDataURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileReader_readAsDataURL_Callback";
  readAsDataURL_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readAsDataURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readAsText_Callback_0(mthis) native "FileReader_readAsText_Callback";
  readAsText_Callback_0_(mthis) => readAsText_Callback_0(mthis);

  static readAsText_Callback_1(mthis, __arg_0) native "FileReader_readAsText_Callback";
  readAsText_Callback_1_(mthis, __arg_0) => readAsText_Callback_1(mthis, __arg_0);

  static readAsText_Callback_2(mthis, __arg_0, __arg_1) native "FileReader_readAsText_Callback";
  readAsText_Callback_2_(mthis, __arg_0, __arg_1) => readAsText_Callback_2(mthis, __arg_0, __arg_1);

  static readAsText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileReader_readAsText_Callback";
  readAsText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readAsText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readAsText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "FileReader_readAsText_Callback";
  readAsText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => readAsText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static readyState_Getter(mthis) native "FileReader_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static result_Getter(mthis) native "FileReader_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

}

class BlinkFileReaderSync {
  static final instance = new BlinkFileReaderSync();

  static constructorCallback_0() native "FileReaderSync_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "FileReaderSync_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "FileReaderSync_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static readAsArrayBuffer_Callback_0(mthis) native "FileReaderSync_readAsArrayBuffer_Callback";
  readAsArrayBuffer_Callback_0_(mthis) => readAsArrayBuffer_Callback_0(mthis);

  static readAsArrayBuffer_Callback_1(mthis, __arg_0) native "FileReaderSync_readAsArrayBuffer_Callback";
  readAsArrayBuffer_Callback_1_(mthis, __arg_0) => readAsArrayBuffer_Callback_1(mthis, __arg_0);

  static readAsArrayBuffer_Callback_2(mthis, __arg_0, __arg_1) native "FileReaderSync_readAsArrayBuffer_Callback";
  readAsArrayBuffer_Callback_2_(mthis, __arg_0, __arg_1) => readAsArrayBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static readAsArrayBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileReaderSync_readAsArrayBuffer_Callback";
  readAsArrayBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readAsArrayBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readAsBinaryString_Callback_0(mthis) native "FileReaderSync_readAsBinaryString_Callback";
  readAsBinaryString_Callback_0_(mthis) => readAsBinaryString_Callback_0(mthis);

  static readAsBinaryString_Callback_1(mthis, __arg_0) native "FileReaderSync_readAsBinaryString_Callback";
  readAsBinaryString_Callback_1_(mthis, __arg_0) => readAsBinaryString_Callback_1(mthis, __arg_0);

  static readAsBinaryString_Callback_2(mthis, __arg_0, __arg_1) native "FileReaderSync_readAsBinaryString_Callback";
  readAsBinaryString_Callback_2_(mthis, __arg_0, __arg_1) => readAsBinaryString_Callback_2(mthis, __arg_0, __arg_1);

  static readAsBinaryString_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileReaderSync_readAsBinaryString_Callback";
  readAsBinaryString_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readAsBinaryString_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readAsDataURL_Callback_0(mthis) native "FileReaderSync_readAsDataURL_Callback";
  readAsDataURL_Callback_0_(mthis) => readAsDataURL_Callback_0(mthis);

  static readAsDataURL_Callback_1(mthis, __arg_0) native "FileReaderSync_readAsDataURL_Callback";
  readAsDataURL_Callback_1_(mthis, __arg_0) => readAsDataURL_Callback_1(mthis, __arg_0);

  static readAsDataURL_Callback_2(mthis, __arg_0, __arg_1) native "FileReaderSync_readAsDataURL_Callback";
  readAsDataURL_Callback_2_(mthis, __arg_0, __arg_1) => readAsDataURL_Callback_2(mthis, __arg_0, __arg_1);

  static readAsDataURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileReaderSync_readAsDataURL_Callback";
  readAsDataURL_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readAsDataURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readAsText_Callback_0(mthis) native "FileReaderSync_readAsText_Callback";
  readAsText_Callback_0_(mthis) => readAsText_Callback_0(mthis);

  static readAsText_Callback_1(mthis, __arg_0) native "FileReaderSync_readAsText_Callback";
  readAsText_Callback_1_(mthis, __arg_0) => readAsText_Callback_1(mthis, __arg_0);

  static readAsText_Callback_2(mthis, __arg_0, __arg_1) native "FileReaderSync_readAsText_Callback";
  readAsText_Callback_2_(mthis, __arg_0, __arg_1) => readAsText_Callback_2(mthis, __arg_0, __arg_1);

  static readAsText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileReaderSync_readAsText_Callback";
  readAsText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => readAsText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readAsText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "FileReaderSync_readAsText_Callback";
  readAsText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => readAsText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkFileWriter extends BlinkEventTarget {
  static final instance = new BlinkFileWriter();

  static abort_Callback_0(mthis) native "FileWriter_abort_Callback";
  abort_Callback_0_(mthis) => abort_Callback_0(mthis);

  static abort_Callback_1(mthis, __arg_0) native "FileWriter_abort_Callback";
  abort_Callback_1_(mthis, __arg_0) => abort_Callback_1(mthis, __arg_0);

  static abort_Callback_2(mthis, __arg_0, __arg_1) native "FileWriter_abort_Callback";
  abort_Callback_2_(mthis, __arg_0, __arg_1) => abort_Callback_2(mthis, __arg_0, __arg_1);

  static error_Getter(mthis) native "FileWriter_error_Getter";
  error_Getter_(mthis) => error_Getter(mthis);

  static length_Getter(mthis) native "FileWriter_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static onabort_Getter(mthis) native "FileWriter_onabort_Getter";
  onabort_Getter_(mthis) => onabort_Getter(mthis);

  static onabort_Setter(mthis, __arg_0) native "FileWriter_onabort_Setter";
  onabort_Setter_(mthis, __arg_0) => onabort_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "FileWriter_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "FileWriter_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onprogress_Getter(mthis) native "FileWriter_onprogress_Getter";
  onprogress_Getter_(mthis) => onprogress_Getter(mthis);

  static onprogress_Setter(mthis, __arg_0) native "FileWriter_onprogress_Setter";
  onprogress_Setter_(mthis, __arg_0) => onprogress_Setter(mthis, __arg_0);

  static onwrite_Getter(mthis) native "FileWriter_onwrite_Getter";
  onwrite_Getter_(mthis) => onwrite_Getter(mthis);

  static onwrite_Setter(mthis, __arg_0) native "FileWriter_onwrite_Setter";
  onwrite_Setter_(mthis, __arg_0) => onwrite_Setter(mthis, __arg_0);

  static onwriteend_Getter(mthis) native "FileWriter_onwriteend_Getter";
  onwriteend_Getter_(mthis) => onwriteend_Getter(mthis);

  static onwriteend_Setter(mthis, __arg_0) native "FileWriter_onwriteend_Setter";
  onwriteend_Setter_(mthis, __arg_0) => onwriteend_Setter(mthis, __arg_0);

  static onwritestart_Getter(mthis) native "FileWriter_onwritestart_Getter";
  onwritestart_Getter_(mthis) => onwritestart_Getter(mthis);

  static onwritestart_Setter(mthis, __arg_0) native "FileWriter_onwritestart_Setter";
  onwritestart_Setter_(mthis, __arg_0) => onwritestart_Setter(mthis, __arg_0);

  static position_Getter(mthis) native "FileWriter_position_Getter";
  position_Getter_(mthis) => position_Getter(mthis);

  static readyState_Getter(mthis) native "FileWriter_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static seek_Callback_0(mthis) native "FileWriter_seek_Callback";
  seek_Callback_0_(mthis) => seek_Callback_0(mthis);

  static seek_Callback_1(mthis, __arg_0) native "FileWriter_seek_Callback";
  seek_Callback_1_(mthis, __arg_0) => seek_Callback_1(mthis, __arg_0);

  static seek_Callback_2(mthis, __arg_0, __arg_1) native "FileWriter_seek_Callback";
  seek_Callback_2_(mthis, __arg_0, __arg_1) => seek_Callback_2(mthis, __arg_0, __arg_1);

  static seek_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileWriter_seek_Callback";
  seek_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => seek_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static truncate_Callback_0(mthis) native "FileWriter_truncate_Callback";
  truncate_Callback_0_(mthis) => truncate_Callback_0(mthis);

  static truncate_Callback_1(mthis, __arg_0) native "FileWriter_truncate_Callback";
  truncate_Callback_1_(mthis, __arg_0) => truncate_Callback_1(mthis, __arg_0);

  static truncate_Callback_2(mthis, __arg_0, __arg_1) native "FileWriter_truncate_Callback";
  truncate_Callback_2_(mthis, __arg_0, __arg_1) => truncate_Callback_2(mthis, __arg_0, __arg_1);

  static truncate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileWriter_truncate_Callback";
  truncate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => truncate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static write_Callback_0(mthis) native "FileWriter_write_Callback";
  write_Callback_0_(mthis) => write_Callback_0(mthis);

  static write_Callback_1(mthis, __arg_0) native "FileWriter_write_Callback";
  write_Callback_1_(mthis, __arg_0) => write_Callback_1(mthis, __arg_0);

  static write_Callback_2(mthis, __arg_0, __arg_1) native "FileWriter_write_Callback";
  write_Callback_2_(mthis, __arg_0, __arg_1) => write_Callback_2(mthis, __arg_0, __arg_1);

  static write_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileWriter_write_Callback";
  write_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => write_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkFileWriterSync {
  static final instance = new BlinkFileWriterSync();

  static length_Getter(mthis) native "FileWriterSync_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static position_Getter(mthis) native "FileWriterSync_position_Getter";
  position_Getter_(mthis) => position_Getter(mthis);

  static seek_Callback_0(mthis) native "FileWriterSync_seek_Callback";
  seek_Callback_0_(mthis) => seek_Callback_0(mthis);

  static seek_Callback_1(mthis, __arg_0) native "FileWriterSync_seek_Callback";
  seek_Callback_1_(mthis, __arg_0) => seek_Callback_1(mthis, __arg_0);

  static seek_Callback_2(mthis, __arg_0, __arg_1) native "FileWriterSync_seek_Callback";
  seek_Callback_2_(mthis, __arg_0, __arg_1) => seek_Callback_2(mthis, __arg_0, __arg_1);

  static seek_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileWriterSync_seek_Callback";
  seek_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => seek_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static truncate_Callback_0(mthis) native "FileWriterSync_truncate_Callback";
  truncate_Callback_0_(mthis) => truncate_Callback_0(mthis);

  static truncate_Callback_1(mthis, __arg_0) native "FileWriterSync_truncate_Callback";
  truncate_Callback_1_(mthis, __arg_0) => truncate_Callback_1(mthis, __arg_0);

  static truncate_Callback_2(mthis, __arg_0, __arg_1) native "FileWriterSync_truncate_Callback";
  truncate_Callback_2_(mthis, __arg_0, __arg_1) => truncate_Callback_2(mthis, __arg_0, __arg_1);

  static truncate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileWriterSync_truncate_Callback";
  truncate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => truncate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static write_Callback_0(mthis) native "FileWriterSync_write_Callback";
  write_Callback_0_(mthis) => write_Callback_0(mthis);

  static write_Callback_1(mthis, __arg_0) native "FileWriterSync_write_Callback";
  write_Callback_1_(mthis, __arg_0) => write_Callback_1(mthis, __arg_0);

  static write_Callback_2(mthis, __arg_0, __arg_1) native "FileWriterSync_write_Callback";
  write_Callback_2_(mthis, __arg_0, __arg_1) => write_Callback_2(mthis, __arg_0, __arg_1);

  static write_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FileWriterSync_write_Callback";
  write_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => write_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkFocusEvent extends BlinkUIEvent {
  static final instance = new BlinkFocusEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "FocusEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static relatedTarget_Getter(mthis) native "FocusEvent_relatedTarget_Getter";
  relatedTarget_Getter_(mthis) => relatedTarget_Getter(mthis);

}

class BlinkFontFace {
  static final instance = new BlinkFontFace();

  static constructorCallback_0() native "FontFace_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "FontFace_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "FontFace_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "FontFace_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "FontFace_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "FontFace_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static family_Getter(mthis) native "FontFace_family_Getter";
  family_Getter_(mthis) => family_Getter(mthis);

  static family_Setter(mthis, __arg_0) native "FontFace_family_Setter";
  family_Setter_(mthis, __arg_0) => family_Setter(mthis, __arg_0);

  static featureSettings_Getter(mthis) native "FontFace_featureSettings_Getter";
  featureSettings_Getter_(mthis) => featureSettings_Getter(mthis);

  static featureSettings_Setter(mthis, __arg_0) native "FontFace_featureSettings_Setter";
  featureSettings_Setter_(mthis, __arg_0) => featureSettings_Setter(mthis, __arg_0);

  static load_Callback_0(mthis) native "FontFace_load_Callback";
  load_Callback_0_(mthis) => load_Callback_0(mthis);

  static load_Callback_1(mthis, __arg_0) native "FontFace_load_Callback";
  load_Callback_1_(mthis, __arg_0) => load_Callback_1(mthis, __arg_0);

  static load_Callback_2(mthis, __arg_0, __arg_1) native "FontFace_load_Callback";
  load_Callback_2_(mthis, __arg_0, __arg_1) => load_Callback_2(mthis, __arg_0, __arg_1);

  static loaded_Getter(mthis) native "FontFace_loaded_Getter";
  loaded_Getter_(mthis) => loaded_Getter(mthis);

  static status_Getter(mthis) native "FontFace_status_Getter";
  status_Getter_(mthis) => status_Getter(mthis);

  static stretch_Getter(mthis) native "FontFace_stretch_Getter";
  stretch_Getter_(mthis) => stretch_Getter(mthis);

  static stretch_Setter(mthis, __arg_0) native "FontFace_stretch_Setter";
  stretch_Setter_(mthis, __arg_0) => stretch_Setter(mthis, __arg_0);

  static style_Getter(mthis) native "FontFace_style_Getter";
  style_Getter_(mthis) => style_Getter(mthis);

  static style_Setter(mthis, __arg_0) native "FontFace_style_Setter";
  style_Setter_(mthis, __arg_0) => style_Setter(mthis, __arg_0);

  static unicodeRange_Getter(mthis) native "FontFace_unicodeRange_Getter";
  unicodeRange_Getter_(mthis) => unicodeRange_Getter(mthis);

  static unicodeRange_Setter(mthis, __arg_0) native "FontFace_unicodeRange_Setter";
  unicodeRange_Setter_(mthis, __arg_0) => unicodeRange_Setter(mthis, __arg_0);

  static variant_Getter(mthis) native "FontFace_variant_Getter";
  variant_Getter_(mthis) => variant_Getter(mthis);

  static variant_Setter(mthis, __arg_0) native "FontFace_variant_Setter";
  variant_Setter_(mthis, __arg_0) => variant_Setter(mthis, __arg_0);

  static weight_Getter(mthis) native "FontFace_weight_Getter";
  weight_Getter_(mthis) => weight_Getter(mthis);

  static weight_Setter(mthis, __arg_0) native "FontFace_weight_Setter";
  weight_Setter_(mthis, __arg_0) => weight_Setter(mthis, __arg_0);

}

class BlinkFontFaceSet extends BlinkEventTarget {
  static final instance = new BlinkFontFaceSet();

  static add_Callback_0(mthis) native "FontFaceSet_add_Callback";
  add_Callback_0_(mthis) => add_Callback_0(mthis);

  static add_Callback_1(mthis, __arg_0) native "FontFaceSet_add_Callback";
  add_Callback_1_(mthis, __arg_0) => add_Callback_1(mthis, __arg_0);

  static add_Callback_2(mthis, __arg_0, __arg_1) native "FontFaceSet_add_Callback";
  add_Callback_2_(mthis, __arg_0, __arg_1) => add_Callback_2(mthis, __arg_0, __arg_1);

  static add_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FontFaceSet_add_Callback";
  add_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => add_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static check_Callback_0(mthis) native "FontFaceSet_check_Callback";
  check_Callback_0_(mthis) => check_Callback_0(mthis);

  static check_Callback_1(mthis, __arg_0) native "FontFaceSet_check_Callback";
  check_Callback_1_(mthis, __arg_0) => check_Callback_1(mthis, __arg_0);

  static check_Callback_2(mthis, __arg_0, __arg_1) native "FontFaceSet_check_Callback";
  check_Callback_2_(mthis, __arg_0, __arg_1) => check_Callback_2(mthis, __arg_0, __arg_1);

  static check_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FontFaceSet_check_Callback";
  check_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => check_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static check_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "FontFaceSet_check_Callback";
  check_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => check_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static clear_Callback_0(mthis) native "FontFaceSet_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "FontFaceSet_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "FontFaceSet_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static delete_Callback_0(mthis) native "FontFaceSet_delete_Callback";
  delete_Callback_0_(mthis) => delete_Callback_0(mthis);

  static delete_Callback_1(mthis, __arg_0) native "FontFaceSet_delete_Callback";
  delete_Callback_1_(mthis, __arg_0) => delete_Callback_1(mthis, __arg_0);

  static delete_Callback_2(mthis, __arg_0, __arg_1) native "FontFaceSet_delete_Callback";
  delete_Callback_2_(mthis, __arg_0, __arg_1) => delete_Callback_2(mthis, __arg_0, __arg_1);

  static delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FontFaceSet_delete_Callback";
  delete_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static forEach_Callback_0(mthis) native "FontFaceSet_forEach_Callback";
  forEach_Callback_0_(mthis) => forEach_Callback_0(mthis);

  static forEach_Callback_1(mthis, __arg_0) native "FontFaceSet_forEach_Callback";
  forEach_Callback_1_(mthis, __arg_0) => forEach_Callback_1(mthis, __arg_0);

  static forEach_Callback_2(mthis, __arg_0, __arg_1) native "FontFaceSet_forEach_Callback";
  forEach_Callback_2_(mthis, __arg_0, __arg_1) => forEach_Callback_2(mthis, __arg_0, __arg_1);

  static forEach_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FontFaceSet_forEach_Callback";
  forEach_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => forEach_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static forEach_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "FontFaceSet_forEach_Callback";
  forEach_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => forEach_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static has_Callback_0(mthis) native "FontFaceSet_has_Callback";
  has_Callback_0_(mthis) => has_Callback_0(mthis);

  static has_Callback_1(mthis, __arg_0) native "FontFaceSet_has_Callback";
  has_Callback_1_(mthis, __arg_0) => has_Callback_1(mthis, __arg_0);

  static has_Callback_2(mthis, __arg_0, __arg_1) native "FontFaceSet_has_Callback";
  has_Callback_2_(mthis, __arg_0, __arg_1) => has_Callback_2(mthis, __arg_0, __arg_1);

  static has_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FontFaceSet_has_Callback";
  has_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => has_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static onloading_Getter(mthis) native "FontFaceSet_onloading_Getter";
  onloading_Getter_(mthis) => onloading_Getter(mthis);

  static onloading_Setter(mthis, __arg_0) native "FontFaceSet_onloading_Setter";
  onloading_Setter_(mthis, __arg_0) => onloading_Setter(mthis, __arg_0);

  static onloadingdone_Getter(mthis) native "FontFaceSet_onloadingdone_Getter";
  onloadingdone_Getter_(mthis) => onloadingdone_Getter(mthis);

  static onloadingdone_Setter(mthis, __arg_0) native "FontFaceSet_onloadingdone_Setter";
  onloadingdone_Setter_(mthis, __arg_0) => onloadingdone_Setter(mthis, __arg_0);

  static onloadingerror_Getter(mthis) native "FontFaceSet_onloadingerror_Getter";
  onloadingerror_Getter_(mthis) => onloadingerror_Getter(mthis);

  static onloadingerror_Setter(mthis, __arg_0) native "FontFaceSet_onloadingerror_Setter";
  onloadingerror_Setter_(mthis, __arg_0) => onloadingerror_Setter(mthis, __arg_0);

  static size_Getter(mthis) native "FontFaceSet_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

  static status_Getter(mthis) native "FontFaceSet_status_Getter";
  status_Getter_(mthis) => status_Getter(mthis);

}

class BlinkFontFaceSetLoadEvent extends BlinkEvent {
  static final instance = new BlinkFontFaceSetLoadEvent();

  static fontfaces_Getter(mthis) native "FontFaceSetLoadEvent_fontfaces_Getter";
  fontfaces_Getter_(mthis) => fontfaces_Getter(mthis);

}

class BlinkFormData {
  static final instance = new BlinkFormData();

  static append_Callback_0(mthis) native "FormData_append_Callback";
  append_Callback_0_(mthis) => append_Callback_0(mthis);

  static append_Callback_1(mthis, __arg_0) native "FormData_append_Callback";
  append_Callback_1_(mthis, __arg_0) => append_Callback_1(mthis, __arg_0);

  static append_Callback_2(mthis, __arg_0, __arg_1) native "FormData_append_Callback";
  append_Callback_2_(mthis, __arg_0, __arg_1) => append_Callback_2(mthis, __arg_0, __arg_1);

  static append_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "FormData_append_Callback";
  append_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => append_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static append_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "FormData_append_Callback";
  append_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => append_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static append_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "FormData_append_Callback";
  append_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => append_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static constructorCallback_0() native "FormData_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "FormData_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "FormData_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "FormData_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

}

class BlinkGainNode extends BlinkAudioNode {
  static final instance = new BlinkGainNode();

  static gain_Getter(mthis) native "GainNode_gain_Getter";
  gain_Getter_(mthis) => gain_Getter(mthis);

}

class BlinkGamepad {
  static final instance = new BlinkGamepad();

  static axes_Getter(mthis) native "Gamepad_axes_Getter";
  axes_Getter_(mthis) => axes_Getter(mthis);

  static connected_Getter(mthis) native "Gamepad_connected_Getter";
  connected_Getter_(mthis) => connected_Getter(mthis);

  static id_Getter(mthis) native "Gamepad_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static index_Getter(mthis) native "Gamepad_index_Getter";
  index_Getter_(mthis) => index_Getter(mthis);

  static mapping_Getter(mthis) native "Gamepad_mapping_Getter";
  mapping_Getter_(mthis) => mapping_Getter(mthis);

  static timestamp_Getter(mthis) native "Gamepad_timestamp_Getter";
  timestamp_Getter_(mthis) => timestamp_Getter(mthis);

}

class BlinkGamepadButton {
  static final instance = new BlinkGamepadButton();

  static pressed_Getter(mthis) native "GamepadButton_pressed_Getter";
  pressed_Getter_(mthis) => pressed_Getter(mthis);

  static value_Getter(mthis) native "GamepadButton_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

}

class BlinkGamepadEvent extends BlinkEvent {
  static final instance = new BlinkGamepadEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "GamepadEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static gamepad_Getter(mthis) native "GamepadEvent_gamepad_Getter";
  gamepad_Getter_(mthis) => gamepad_Getter(mthis);

}

class BlinkGamepadList {
  static final instance = new BlinkGamepadList();

  static $__getter___Callback_1(mthis, __arg_0) native "GamepadList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "GamepadList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "GamepadList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "GamepadList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "GamepadList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "GamepadList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkGeofencing {
  static final instance = new BlinkGeofencing();

  static getRegisteredRegions_Callback_0(mthis) native "Geofencing_getRegisteredRegions_Callback";
  getRegisteredRegions_Callback_0_(mthis) => getRegisteredRegions_Callback_0(mthis);

  static getRegisteredRegions_Callback_1(mthis, __arg_0) native "Geofencing_getRegisteredRegions_Callback";
  getRegisteredRegions_Callback_1_(mthis, __arg_0) => getRegisteredRegions_Callback_1(mthis, __arg_0);

  static getRegisteredRegions_Callback_2(mthis, __arg_0, __arg_1) native "Geofencing_getRegisteredRegions_Callback";
  getRegisteredRegions_Callback_2_(mthis, __arg_0, __arg_1) => getRegisteredRegions_Callback_2(mthis, __arg_0, __arg_1);

  static registerRegion_Callback_0(mthis) native "Geofencing_registerRegion_Callback";
  registerRegion_Callback_0_(mthis) => registerRegion_Callback_0(mthis);

  static registerRegion_Callback_1(mthis, __arg_0) native "Geofencing_registerRegion_Callback";
  registerRegion_Callback_1_(mthis, __arg_0) => registerRegion_Callback_1(mthis, __arg_0);

  static registerRegion_Callback_2(mthis, __arg_0, __arg_1) native "Geofencing_registerRegion_Callback";
  registerRegion_Callback_2_(mthis, __arg_0, __arg_1) => registerRegion_Callback_2(mthis, __arg_0, __arg_1);

  static registerRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Geofencing_registerRegion_Callback";
  registerRegion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => registerRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static unregisterRegion_Callback_0(mthis) native "Geofencing_unregisterRegion_Callback";
  unregisterRegion_Callback_0_(mthis) => unregisterRegion_Callback_0(mthis);

  static unregisterRegion_Callback_1(mthis, __arg_0) native "Geofencing_unregisterRegion_Callback";
  unregisterRegion_Callback_1_(mthis, __arg_0) => unregisterRegion_Callback_1(mthis, __arg_0);

  static unregisterRegion_Callback_2(mthis, __arg_0, __arg_1) native "Geofencing_unregisterRegion_Callback";
  unregisterRegion_Callback_2_(mthis, __arg_0, __arg_1) => unregisterRegion_Callback_2(mthis, __arg_0, __arg_1);

  static unregisterRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Geofencing_unregisterRegion_Callback";
  unregisterRegion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => unregisterRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkGeofencingRegion {
  static final instance = new BlinkGeofencingRegion();

  static id_Getter(mthis) native "GeofencingRegion_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

}

class BlinkGeolocation {
  static final instance = new BlinkGeolocation();

  static clearWatch_Callback_0(mthis) native "Geolocation_clearWatch_Callback";
  clearWatch_Callback_0_(mthis) => clearWatch_Callback_0(mthis);

  static clearWatch_Callback_1(mthis, __arg_0) native "Geolocation_clearWatch_Callback";
  clearWatch_Callback_1_(mthis, __arg_0) => clearWatch_Callback_1(mthis, __arg_0);

  static clearWatch_Callback_2(mthis, __arg_0, __arg_1) native "Geolocation_clearWatch_Callback";
  clearWatch_Callback_2_(mthis, __arg_0, __arg_1) => clearWatch_Callback_2(mthis, __arg_0, __arg_1);

  static clearWatch_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Geolocation_clearWatch_Callback";
  clearWatch_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearWatch_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getCurrentPosition_Callback_0(mthis) native "Geolocation_getCurrentPosition_Callback";
  getCurrentPosition_Callback_0_(mthis) => getCurrentPosition_Callback_0(mthis);

  static getCurrentPosition_Callback_1(mthis, __arg_0) native "Geolocation_getCurrentPosition_Callback";
  getCurrentPosition_Callback_1_(mthis, __arg_0) => getCurrentPosition_Callback_1(mthis, __arg_0);

  static getCurrentPosition_Callback_2(mthis, __arg_0, __arg_1) native "Geolocation_getCurrentPosition_Callback";
  getCurrentPosition_Callback_2_(mthis, __arg_0, __arg_1) => getCurrentPosition_Callback_2(mthis, __arg_0, __arg_1);

  static getCurrentPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Geolocation_getCurrentPosition_Callback";
  getCurrentPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getCurrentPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getCurrentPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Geolocation_getCurrentPosition_Callback";
  getCurrentPosition_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getCurrentPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getCurrentPosition_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Geolocation_getCurrentPosition_Callback";
  getCurrentPosition_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => getCurrentPosition_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static watchPosition_Callback_0(mthis) native "Geolocation_watchPosition_Callback";
  watchPosition_Callback_0_(mthis) => watchPosition_Callback_0(mthis);

  static watchPosition_Callback_1(mthis, __arg_0) native "Geolocation_watchPosition_Callback";
  watchPosition_Callback_1_(mthis, __arg_0) => watchPosition_Callback_1(mthis, __arg_0);

  static watchPosition_Callback_2(mthis, __arg_0, __arg_1) native "Geolocation_watchPosition_Callback";
  watchPosition_Callback_2_(mthis, __arg_0, __arg_1) => watchPosition_Callback_2(mthis, __arg_0, __arg_1);

  static watchPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Geolocation_watchPosition_Callback";
  watchPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => watchPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static watchPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Geolocation_watchPosition_Callback";
  watchPosition_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => watchPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static watchPosition_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Geolocation_watchPosition_Callback";
  watchPosition_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => watchPosition_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkGeoposition {
  static final instance = new BlinkGeoposition();

  static coords_Getter(mthis) native "Geoposition_coords_Getter";
  coords_Getter_(mthis) => coords_Getter(mthis);

  static timestamp_Getter(mthis) native "Geoposition_timestamp_Getter";
  timestamp_Getter_(mthis) => timestamp_Getter(mthis);

}

class BlinkHTMLAllCollection {
  static final instance = new BlinkHTMLAllCollection();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLAllCollection___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "HTMLAllCollection_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "HTMLAllCollection_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "HTMLAllCollection_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLAllCollection_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "HTMLAllCollection_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static namedItem_Callback_0(mthis) native "HTMLAllCollection_namedItem_Callback";
  namedItem_Callback_0_(mthis) => namedItem_Callback_0(mthis);

  static namedItem_Callback_1(mthis, __arg_0) native "HTMLAllCollection_namedItem_Callback";
  namedItem_Callback_1_(mthis, __arg_0) => namedItem_Callback_1(mthis, __arg_0);

  static namedItem_Callback_2(mthis, __arg_0, __arg_1) native "HTMLAllCollection_namedItem_Callback";
  namedItem_Callback_2_(mthis, __arg_0, __arg_1) => namedItem_Callback_2(mthis, __arg_0, __arg_1);

  static namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLAllCollection_namedItem_Callback";
  namedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkHTMLAnchorElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLAnchorElement();

  static download_Getter(mthis) native "HTMLAnchorElement_download_Getter";
  download_Getter_(mthis) => download_Getter(mthis);

  static download_Setter(mthis, __arg_0) native "HTMLAnchorElement_download_Setter";
  download_Setter_(mthis, __arg_0) => download_Setter(mthis, __arg_0);

  static hash_Getter(mthis) native "HTMLAnchorElement_hash_Getter";
  hash_Getter_(mthis) => hash_Getter(mthis);

  static hash_Setter(mthis, __arg_0) native "HTMLAnchorElement_hash_Setter";
  hash_Setter_(mthis, __arg_0) => hash_Setter(mthis, __arg_0);

  static host_Getter(mthis) native "HTMLAnchorElement_host_Getter";
  host_Getter_(mthis) => host_Getter(mthis);

  static host_Setter(mthis, __arg_0) native "HTMLAnchorElement_host_Setter";
  host_Setter_(mthis, __arg_0) => host_Setter(mthis, __arg_0);

  static hostname_Getter(mthis) native "HTMLAnchorElement_hostname_Getter";
  hostname_Getter_(mthis) => hostname_Getter(mthis);

  static hostname_Setter(mthis, __arg_0) native "HTMLAnchorElement_hostname_Setter";
  hostname_Setter_(mthis, __arg_0) => hostname_Setter(mthis, __arg_0);

  static href_Getter(mthis) native "HTMLAnchorElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static href_Setter(mthis, __arg_0) native "HTMLAnchorElement_href_Setter";
  href_Setter_(mthis, __arg_0) => href_Setter(mthis, __arg_0);

  static hreflang_Getter(mthis) native "HTMLAnchorElement_hreflang_Getter";
  hreflang_Getter_(mthis) => hreflang_Getter(mthis);

  static hreflang_Setter(mthis, __arg_0) native "HTMLAnchorElement_hreflang_Setter";
  hreflang_Setter_(mthis, __arg_0) => hreflang_Setter(mthis, __arg_0);

  static integrity_Getter(mthis) native "HTMLAnchorElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLAnchorElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static name_Getter(mthis) native "HTMLAnchorElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLAnchorElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static origin_Getter(mthis) native "HTMLAnchorElement_origin_Getter";
  origin_Getter_(mthis) => origin_Getter(mthis);

  static password_Getter(mthis) native "HTMLAnchorElement_password_Getter";
  password_Getter_(mthis) => password_Getter(mthis);

  static password_Setter(mthis, __arg_0) native "HTMLAnchorElement_password_Setter";
  password_Setter_(mthis, __arg_0) => password_Setter(mthis, __arg_0);

  static pathname_Getter(mthis) native "HTMLAnchorElement_pathname_Getter";
  pathname_Getter_(mthis) => pathname_Getter(mthis);

  static pathname_Setter(mthis, __arg_0) native "HTMLAnchorElement_pathname_Setter";
  pathname_Setter_(mthis, __arg_0) => pathname_Setter(mthis, __arg_0);

  static ping_Getter(mthis) native "HTMLAnchorElement_ping_Getter";
  ping_Getter_(mthis) => ping_Getter(mthis);

  static ping_Setter(mthis, __arg_0) native "HTMLAnchorElement_ping_Setter";
  ping_Setter_(mthis, __arg_0) => ping_Setter(mthis, __arg_0);

  static port_Getter(mthis) native "HTMLAnchorElement_port_Getter";
  port_Getter_(mthis) => port_Getter(mthis);

  static port_Setter(mthis, __arg_0) native "HTMLAnchorElement_port_Setter";
  port_Setter_(mthis, __arg_0) => port_Setter(mthis, __arg_0);

  static protocol_Getter(mthis) native "HTMLAnchorElement_protocol_Getter";
  protocol_Getter_(mthis) => protocol_Getter(mthis);

  static protocol_Setter(mthis, __arg_0) native "HTMLAnchorElement_protocol_Setter";
  protocol_Setter_(mthis, __arg_0) => protocol_Setter(mthis, __arg_0);

  static rel_Getter(mthis) native "HTMLAnchorElement_rel_Getter";
  rel_Getter_(mthis) => rel_Getter(mthis);

  static rel_Setter(mthis, __arg_0) native "HTMLAnchorElement_rel_Setter";
  rel_Setter_(mthis, __arg_0) => rel_Setter(mthis, __arg_0);

  static search_Getter(mthis) native "HTMLAnchorElement_search_Getter";
  search_Getter_(mthis) => search_Getter(mthis);

  static search_Setter(mthis, __arg_0) native "HTMLAnchorElement_search_Setter";
  search_Setter_(mthis, __arg_0) => search_Setter(mthis, __arg_0);

  static target_Getter(mthis) native "HTMLAnchorElement_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

  static target_Setter(mthis, __arg_0) native "HTMLAnchorElement_target_Setter";
  target_Setter_(mthis, __arg_0) => target_Setter(mthis, __arg_0);

  static toString_Callback_0(mthis) native "HTMLAnchorElement_toString_Callback";
  toString_Callback_0_(mthis) => toString_Callback_0(mthis);

  static toString_Callback_1(mthis, __arg_0) native "HTMLAnchorElement_toString_Callback";
  toString_Callback_1_(mthis, __arg_0) => toString_Callback_1(mthis, __arg_0);

  static toString_Callback_2(mthis, __arg_0, __arg_1) native "HTMLAnchorElement_toString_Callback";
  toString_Callback_2_(mthis, __arg_0, __arg_1) => toString_Callback_2(mthis, __arg_0, __arg_1);

  static type_Getter(mthis) native "HTMLAnchorElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLAnchorElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

  static username_Getter(mthis) native "HTMLAnchorElement_username_Getter";
  username_Getter_(mthis) => username_Getter(mthis);

  static username_Setter(mthis, __arg_0) native "HTMLAnchorElement_username_Setter";
  username_Setter_(mthis, __arg_0) => username_Setter(mthis, __arg_0);

}

class BlinkHTMLAppletElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLAppletElement();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLAppletElement___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "HTMLAppletElement___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkHTMLAreaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLAreaElement();

  static alt_Getter(mthis) native "HTMLAreaElement_alt_Getter";
  alt_Getter_(mthis) => alt_Getter(mthis);

  static alt_Setter(mthis, __arg_0) native "HTMLAreaElement_alt_Setter";
  alt_Setter_(mthis, __arg_0) => alt_Setter(mthis, __arg_0);

  static coords_Getter(mthis) native "HTMLAreaElement_coords_Getter";
  coords_Getter_(mthis) => coords_Getter(mthis);

  static coords_Setter(mthis, __arg_0) native "HTMLAreaElement_coords_Setter";
  coords_Setter_(mthis, __arg_0) => coords_Setter(mthis, __arg_0);

  static hash_Getter(mthis) native "HTMLAreaElement_hash_Getter";
  hash_Getter_(mthis) => hash_Getter(mthis);

  static hash_Setter(mthis, __arg_0) native "HTMLAreaElement_hash_Setter";
  hash_Setter_(mthis, __arg_0) => hash_Setter(mthis, __arg_0);

  static host_Getter(mthis) native "HTMLAreaElement_host_Getter";
  host_Getter_(mthis) => host_Getter(mthis);

  static host_Setter(mthis, __arg_0) native "HTMLAreaElement_host_Setter";
  host_Setter_(mthis, __arg_0) => host_Setter(mthis, __arg_0);

  static hostname_Getter(mthis) native "HTMLAreaElement_hostname_Getter";
  hostname_Getter_(mthis) => hostname_Getter(mthis);

  static hostname_Setter(mthis, __arg_0) native "HTMLAreaElement_hostname_Setter";
  hostname_Setter_(mthis, __arg_0) => hostname_Setter(mthis, __arg_0);

  static href_Getter(mthis) native "HTMLAreaElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static href_Setter(mthis, __arg_0) native "HTMLAreaElement_href_Setter";
  href_Setter_(mthis, __arg_0) => href_Setter(mthis, __arg_0);

  static origin_Getter(mthis) native "HTMLAreaElement_origin_Getter";
  origin_Getter_(mthis) => origin_Getter(mthis);

  static password_Getter(mthis) native "HTMLAreaElement_password_Getter";
  password_Getter_(mthis) => password_Getter(mthis);

  static password_Setter(mthis, __arg_0) native "HTMLAreaElement_password_Setter";
  password_Setter_(mthis, __arg_0) => password_Setter(mthis, __arg_0);

  static pathname_Getter(mthis) native "HTMLAreaElement_pathname_Getter";
  pathname_Getter_(mthis) => pathname_Getter(mthis);

  static pathname_Setter(mthis, __arg_0) native "HTMLAreaElement_pathname_Setter";
  pathname_Setter_(mthis, __arg_0) => pathname_Setter(mthis, __arg_0);

  static ping_Getter(mthis) native "HTMLAreaElement_ping_Getter";
  ping_Getter_(mthis) => ping_Getter(mthis);

  static ping_Setter(mthis, __arg_0) native "HTMLAreaElement_ping_Setter";
  ping_Setter_(mthis, __arg_0) => ping_Setter(mthis, __arg_0);

  static port_Getter(mthis) native "HTMLAreaElement_port_Getter";
  port_Getter_(mthis) => port_Getter(mthis);

  static port_Setter(mthis, __arg_0) native "HTMLAreaElement_port_Setter";
  port_Setter_(mthis, __arg_0) => port_Setter(mthis, __arg_0);

  static protocol_Getter(mthis) native "HTMLAreaElement_protocol_Getter";
  protocol_Getter_(mthis) => protocol_Getter(mthis);

  static protocol_Setter(mthis, __arg_0) native "HTMLAreaElement_protocol_Setter";
  protocol_Setter_(mthis, __arg_0) => protocol_Setter(mthis, __arg_0);

  static search_Getter(mthis) native "HTMLAreaElement_search_Getter";
  search_Getter_(mthis) => search_Getter(mthis);

  static search_Setter(mthis, __arg_0) native "HTMLAreaElement_search_Setter";
  search_Setter_(mthis, __arg_0) => search_Setter(mthis, __arg_0);

  static shape_Getter(mthis) native "HTMLAreaElement_shape_Getter";
  shape_Getter_(mthis) => shape_Getter(mthis);

  static shape_Setter(mthis, __arg_0) native "HTMLAreaElement_shape_Setter";
  shape_Setter_(mthis, __arg_0) => shape_Setter(mthis, __arg_0);

  static target_Getter(mthis) native "HTMLAreaElement_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

  static target_Setter(mthis, __arg_0) native "HTMLAreaElement_target_Setter";
  target_Setter_(mthis, __arg_0) => target_Setter(mthis, __arg_0);

  static toString_Callback_0(mthis) native "HTMLAreaElement_toString_Callback";
  toString_Callback_0_(mthis) => toString_Callback_0(mthis);

  static toString_Callback_1(mthis, __arg_0) native "HTMLAreaElement_toString_Callback";
  toString_Callback_1_(mthis, __arg_0) => toString_Callback_1(mthis, __arg_0);

  static toString_Callback_2(mthis, __arg_0, __arg_1) native "HTMLAreaElement_toString_Callback";
  toString_Callback_2_(mthis, __arg_0, __arg_1) => toString_Callback_2(mthis, __arg_0, __arg_1);

  static username_Getter(mthis) native "HTMLAreaElement_username_Getter";
  username_Getter_(mthis) => username_Getter(mthis);

  static username_Setter(mthis, __arg_0) native "HTMLAreaElement_username_Setter";
  username_Setter_(mthis, __arg_0) => username_Setter(mthis, __arg_0);

}

class BlinkHTMLAudioElement extends BlinkHTMLMediaElement {
  static final instance = new BlinkHTMLAudioElement();

  static constructorCallback_0() native "HTMLAudioElement_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "HTMLAudioElement_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "HTMLAudioElement_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "HTMLAudioElement_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

}

class BlinkHTMLBRElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLBRElement();

}

class BlinkHTMLBaseElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLBaseElement();

  static href_Getter(mthis) native "HTMLBaseElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static href_Setter(mthis, __arg_0) native "HTMLBaseElement_href_Setter";
  href_Setter_(mthis, __arg_0) => href_Setter(mthis, __arg_0);

  static target_Getter(mthis) native "HTMLBaseElement_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

  static target_Setter(mthis, __arg_0) native "HTMLBaseElement_target_Setter";
  target_Setter_(mthis, __arg_0) => target_Setter(mthis, __arg_0);

}

class BlinkHTMLBodyElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLBodyElement();

  static onbeforeunload_Getter(mthis) native "HTMLBodyElement_onbeforeunload_Getter";
  onbeforeunload_Getter_(mthis) => onbeforeunload_Getter(mthis);

  static onbeforeunload_Setter(mthis, __arg_0) native "HTMLBodyElement_onbeforeunload_Setter";
  onbeforeunload_Setter_(mthis, __arg_0) => onbeforeunload_Setter(mthis, __arg_0);

  static onblur_Getter(mthis) native "HTMLBodyElement_onblur_Getter";
  onblur_Getter_(mthis) => onblur_Getter(mthis);

  static onblur_Setter(mthis, __arg_0) native "HTMLBodyElement_onblur_Setter";
  onblur_Setter_(mthis, __arg_0) => onblur_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "HTMLBodyElement_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "HTMLBodyElement_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onfocus_Getter(mthis) native "HTMLBodyElement_onfocus_Getter";
  onfocus_Getter_(mthis) => onfocus_Getter(mthis);

  static onfocus_Setter(mthis, __arg_0) native "HTMLBodyElement_onfocus_Setter";
  onfocus_Setter_(mthis, __arg_0) => onfocus_Setter(mthis, __arg_0);

  static onhashchange_Getter(mthis) native "HTMLBodyElement_onhashchange_Getter";
  onhashchange_Getter_(mthis) => onhashchange_Getter(mthis);

  static onhashchange_Setter(mthis, __arg_0) native "HTMLBodyElement_onhashchange_Setter";
  onhashchange_Setter_(mthis, __arg_0) => onhashchange_Setter(mthis, __arg_0);

  static onlanguagechange_Getter(mthis) native "HTMLBodyElement_onlanguagechange_Getter";
  onlanguagechange_Getter_(mthis) => onlanguagechange_Getter(mthis);

  static onlanguagechange_Setter(mthis, __arg_0) native "HTMLBodyElement_onlanguagechange_Setter";
  onlanguagechange_Setter_(mthis, __arg_0) => onlanguagechange_Setter(mthis, __arg_0);

  static onload_Getter(mthis) native "HTMLBodyElement_onload_Getter";
  onload_Getter_(mthis) => onload_Getter(mthis);

  static onload_Setter(mthis, __arg_0) native "HTMLBodyElement_onload_Setter";
  onload_Setter_(mthis, __arg_0) => onload_Setter(mthis, __arg_0);

  static onmessage_Getter(mthis) native "HTMLBodyElement_onmessage_Getter";
  onmessage_Getter_(mthis) => onmessage_Getter(mthis);

  static onmessage_Setter(mthis, __arg_0) native "HTMLBodyElement_onmessage_Setter";
  onmessage_Setter_(mthis, __arg_0) => onmessage_Setter(mthis, __arg_0);

  static onoffline_Getter(mthis) native "HTMLBodyElement_onoffline_Getter";
  onoffline_Getter_(mthis) => onoffline_Getter(mthis);

  static onoffline_Setter(mthis, __arg_0) native "HTMLBodyElement_onoffline_Setter";
  onoffline_Setter_(mthis, __arg_0) => onoffline_Setter(mthis, __arg_0);

  static ononline_Getter(mthis) native "HTMLBodyElement_ononline_Getter";
  ononline_Getter_(mthis) => ononline_Getter(mthis);

  static ononline_Setter(mthis, __arg_0) native "HTMLBodyElement_ononline_Setter";
  ononline_Setter_(mthis, __arg_0) => ononline_Setter(mthis, __arg_0);

  static onorientationchange_Getter(mthis) native "HTMLBodyElement_onorientationchange_Getter";
  onorientationchange_Getter_(mthis) => onorientationchange_Getter(mthis);

  static onorientationchange_Setter(mthis, __arg_0) native "HTMLBodyElement_onorientationchange_Setter";
  onorientationchange_Setter_(mthis, __arg_0) => onorientationchange_Setter(mthis, __arg_0);

  static onpagehide_Getter(mthis) native "HTMLBodyElement_onpagehide_Getter";
  onpagehide_Getter_(mthis) => onpagehide_Getter(mthis);

  static onpagehide_Setter(mthis, __arg_0) native "HTMLBodyElement_onpagehide_Setter";
  onpagehide_Setter_(mthis, __arg_0) => onpagehide_Setter(mthis, __arg_0);

  static onpageshow_Getter(mthis) native "HTMLBodyElement_onpageshow_Getter";
  onpageshow_Getter_(mthis) => onpageshow_Getter(mthis);

  static onpageshow_Setter(mthis, __arg_0) native "HTMLBodyElement_onpageshow_Setter";
  onpageshow_Setter_(mthis, __arg_0) => onpageshow_Setter(mthis, __arg_0);

  static onpopstate_Getter(mthis) native "HTMLBodyElement_onpopstate_Getter";
  onpopstate_Getter_(mthis) => onpopstate_Getter(mthis);

  static onpopstate_Setter(mthis, __arg_0) native "HTMLBodyElement_onpopstate_Setter";
  onpopstate_Setter_(mthis, __arg_0) => onpopstate_Setter(mthis, __arg_0);

  static onresize_Getter(mthis) native "HTMLBodyElement_onresize_Getter";
  onresize_Getter_(mthis) => onresize_Getter(mthis);

  static onresize_Setter(mthis, __arg_0) native "HTMLBodyElement_onresize_Setter";
  onresize_Setter_(mthis, __arg_0) => onresize_Setter(mthis, __arg_0);

  static onscroll_Getter(mthis) native "HTMLBodyElement_onscroll_Getter";
  onscroll_Getter_(mthis) => onscroll_Getter(mthis);

  static onscroll_Setter(mthis, __arg_0) native "HTMLBodyElement_onscroll_Setter";
  onscroll_Setter_(mthis, __arg_0) => onscroll_Setter(mthis, __arg_0);

  static onstorage_Getter(mthis) native "HTMLBodyElement_onstorage_Getter";
  onstorage_Getter_(mthis) => onstorage_Getter(mthis);

  static onstorage_Setter(mthis, __arg_0) native "HTMLBodyElement_onstorage_Setter";
  onstorage_Setter_(mthis, __arg_0) => onstorage_Setter(mthis, __arg_0);

  static onunload_Getter(mthis) native "HTMLBodyElement_onunload_Getter";
  onunload_Getter_(mthis) => onunload_Getter(mthis);

  static onunload_Setter(mthis, __arg_0) native "HTMLBodyElement_onunload_Setter";
  onunload_Setter_(mthis, __arg_0) => onunload_Setter(mthis, __arg_0);

}

class BlinkHTMLButtonElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLButtonElement();

  static autofocus_Getter(mthis) native "HTMLButtonElement_autofocus_Getter";
  autofocus_Getter_(mthis) => autofocus_Getter(mthis);

  static autofocus_Setter(mthis, __arg_0) native "HTMLButtonElement_autofocus_Setter";
  autofocus_Setter_(mthis, __arg_0) => autofocus_Setter(mthis, __arg_0);

  static checkValidity_Callback_0(mthis) native "HTMLButtonElement_checkValidity_Callback";
  checkValidity_Callback_0_(mthis) => checkValidity_Callback_0(mthis);

  static checkValidity_Callback_1(mthis, __arg_0) native "HTMLButtonElement_checkValidity_Callback";
  checkValidity_Callback_1_(mthis, __arg_0) => checkValidity_Callback_1(mthis, __arg_0);

  static checkValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLButtonElement_checkValidity_Callback";
  checkValidity_Callback_2_(mthis, __arg_0, __arg_1) => checkValidity_Callback_2(mthis, __arg_0, __arg_1);

  static disabled_Getter(mthis) native "HTMLButtonElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLButtonElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static formAction_Getter(mthis) native "HTMLButtonElement_formAction_Getter";
  formAction_Getter_(mthis) => formAction_Getter(mthis);

  static formAction_Setter(mthis, __arg_0) native "HTMLButtonElement_formAction_Setter";
  formAction_Setter_(mthis, __arg_0) => formAction_Setter(mthis, __arg_0);

  static formEnctype_Getter(mthis) native "HTMLButtonElement_formEnctype_Getter";
  formEnctype_Getter_(mthis) => formEnctype_Getter(mthis);

  static formEnctype_Setter(mthis, __arg_0) native "HTMLButtonElement_formEnctype_Setter";
  formEnctype_Setter_(mthis, __arg_0) => formEnctype_Setter(mthis, __arg_0);

  static formMethod_Getter(mthis) native "HTMLButtonElement_formMethod_Getter";
  formMethod_Getter_(mthis) => formMethod_Getter(mthis);

  static formMethod_Setter(mthis, __arg_0) native "HTMLButtonElement_formMethod_Setter";
  formMethod_Setter_(mthis, __arg_0) => formMethod_Setter(mthis, __arg_0);

  static formNoValidate_Getter(mthis) native "HTMLButtonElement_formNoValidate_Getter";
  formNoValidate_Getter_(mthis) => formNoValidate_Getter(mthis);

  static formNoValidate_Setter(mthis, __arg_0) native "HTMLButtonElement_formNoValidate_Setter";
  formNoValidate_Setter_(mthis, __arg_0) => formNoValidate_Setter(mthis, __arg_0);

  static formTarget_Getter(mthis) native "HTMLButtonElement_formTarget_Getter";
  formTarget_Getter_(mthis) => formTarget_Getter(mthis);

  static formTarget_Setter(mthis, __arg_0) native "HTMLButtonElement_formTarget_Setter";
  formTarget_Setter_(mthis, __arg_0) => formTarget_Setter(mthis, __arg_0);

  static form_Getter(mthis) native "HTMLButtonElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static labels_Getter(mthis) native "HTMLButtonElement_labels_Getter";
  labels_Getter_(mthis) => labels_Getter(mthis);

  static name_Getter(mthis) native "HTMLButtonElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLButtonElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static setCustomValidity_Callback_0(mthis) native "HTMLButtonElement_setCustomValidity_Callback";
  setCustomValidity_Callback_0_(mthis) => setCustomValidity_Callback_0(mthis);

  static setCustomValidity_Callback_1(mthis, __arg_0) native "HTMLButtonElement_setCustomValidity_Callback";
  setCustomValidity_Callback_1_(mthis, __arg_0) => setCustomValidity_Callback_1(mthis, __arg_0);

  static setCustomValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLButtonElement_setCustomValidity_Callback";
  setCustomValidity_Callback_2_(mthis, __arg_0, __arg_1) => setCustomValidity_Callback_2(mthis, __arg_0, __arg_1);

  static setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLButtonElement_setCustomValidity_Callback";
  setCustomValidity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static type_Getter(mthis) native "HTMLButtonElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLButtonElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

  static validationMessage_Getter(mthis) native "HTMLButtonElement_validationMessage_Getter";
  validationMessage_Getter_(mthis) => validationMessage_Getter(mthis);

  static validity_Getter(mthis) native "HTMLButtonElement_validity_Getter";
  validity_Getter_(mthis) => validity_Getter(mthis);

  static value_Getter(mthis) native "HTMLButtonElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLButtonElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

  static willValidate_Getter(mthis) native "HTMLButtonElement_willValidate_Getter";
  willValidate_Getter_(mthis) => willValidate_Getter(mthis);

}

class BlinkHTMLCanvasElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLCanvasElement();

  static getContext_Callback_0(mthis) native "HTMLCanvasElement_getContext_Callback";
  getContext_Callback_0_(mthis) => getContext_Callback_0(mthis);

  static getContext_Callback_1(mthis, __arg_0) native "HTMLCanvasElement_getContext_Callback";
  getContext_Callback_1_(mthis, __arg_0) => getContext_Callback_1(mthis, __arg_0);

  static getContext_Callback_2(mthis, __arg_0, __arg_1) native "HTMLCanvasElement_getContext_Callback";
  getContext_Callback_2_(mthis, __arg_0, __arg_1) => getContext_Callback_2(mthis, __arg_0, __arg_1);

  static getContext_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLCanvasElement_getContext_Callback";
  getContext_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getContext_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getContext_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLCanvasElement_getContext_Callback";
  getContext_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getContext_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static height_Getter(mthis) native "HTMLCanvasElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "HTMLCanvasElement_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static toDataURL_Callback_0(mthis) native "HTMLCanvasElement_toDataURL_Callback";
  toDataURL_Callback_0_(mthis) => toDataURL_Callback_0(mthis);

  static toDataURL_Callback_1(mthis, __arg_0) native "HTMLCanvasElement_toDataURL_Callback";
  toDataURL_Callback_1_(mthis, __arg_0) => toDataURL_Callback_1(mthis, __arg_0);

  static toDataURL_Callback_2(mthis, __arg_0, __arg_1) native "HTMLCanvasElement_toDataURL_Callback";
  toDataURL_Callback_2_(mthis, __arg_0, __arg_1) => toDataURL_Callback_2(mthis, __arg_0, __arg_1);

  static toDataURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLCanvasElement_toDataURL_Callback";
  toDataURL_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => toDataURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static toDataURL_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLCanvasElement_toDataURL_Callback";
  toDataURL_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => toDataURL_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static width_Getter(mthis) native "HTMLCanvasElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "HTMLCanvasElement_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

}

class BlinkHTMLCollection {
  static final instance = new BlinkHTMLCollection();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLCollection___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "HTMLCollection_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "HTMLCollection_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "HTMLCollection_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLCollection_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "HTMLCollection_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static namedItem_Callback_0(mthis) native "HTMLCollection_namedItem_Callback";
  namedItem_Callback_0_(mthis) => namedItem_Callback_0(mthis);

  static namedItem_Callback_1(mthis, __arg_0) native "HTMLCollection_namedItem_Callback";
  namedItem_Callback_1_(mthis, __arg_0) => namedItem_Callback_1(mthis, __arg_0);

  static namedItem_Callback_2(mthis, __arg_0, __arg_1) native "HTMLCollection_namedItem_Callback";
  namedItem_Callback_2_(mthis, __arg_0, __arg_1) => namedItem_Callback_2(mthis, __arg_0, __arg_1);

  static namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLCollection_namedItem_Callback";
  namedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkHTMLContentElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLContentElement();

  static getDistributedNodes_Callback_0(mthis) native "HTMLContentElement_getDistributedNodes_Callback";
  getDistributedNodes_Callback_0_(mthis) => getDistributedNodes_Callback_0(mthis);

  static getDistributedNodes_Callback_1(mthis, __arg_0) native "HTMLContentElement_getDistributedNodes_Callback";
  getDistributedNodes_Callback_1_(mthis, __arg_0) => getDistributedNodes_Callback_1(mthis, __arg_0);

  static getDistributedNodes_Callback_2(mthis, __arg_0, __arg_1) native "HTMLContentElement_getDistributedNodes_Callback";
  getDistributedNodes_Callback_2_(mthis, __arg_0, __arg_1) => getDistributedNodes_Callback_2(mthis, __arg_0, __arg_1);

  static select_Getter(mthis) native "HTMLContentElement_select_Getter";
  select_Getter_(mthis) => select_Getter(mthis);

  static select_Setter(mthis, __arg_0) native "HTMLContentElement_select_Setter";
  select_Setter_(mthis, __arg_0) => select_Setter(mthis, __arg_0);

}

class BlinkHTMLDListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDListElement();

}

class BlinkHTMLDataListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDataListElement();

  static options_Getter(mthis) native "HTMLDataListElement_options_Getter";
  options_Getter_(mthis) => options_Getter(mthis);

}

class BlinkHTMLDetailsElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDetailsElement();

  static open_Getter(mthis) native "HTMLDetailsElement_open_Getter";
  open_Getter_(mthis) => open_Getter(mthis);

  static open_Setter(mthis, __arg_0) native "HTMLDetailsElement_open_Setter";
  open_Setter_(mthis, __arg_0) => open_Setter(mthis, __arg_0);

}

class BlinkHTMLDialogElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDialogElement();

  static close_Callback_0(mthis) native "HTMLDialogElement_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "HTMLDialogElement_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDialogElement_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static close_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLDialogElement_close_Callback";
  close_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => close_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static open_Getter(mthis) native "HTMLDialogElement_open_Getter";
  open_Getter_(mthis) => open_Getter(mthis);

  static open_Setter(mthis, __arg_0) native "HTMLDialogElement_open_Setter";
  open_Setter_(mthis, __arg_0) => open_Setter(mthis, __arg_0);

  static returnValue_Getter(mthis) native "HTMLDialogElement_returnValue_Getter";
  returnValue_Getter_(mthis) => returnValue_Getter(mthis);

  static returnValue_Setter(mthis, __arg_0) native "HTMLDialogElement_returnValue_Setter";
  returnValue_Setter_(mthis, __arg_0) => returnValue_Setter(mthis, __arg_0);

  static showModal_Callback_0(mthis) native "HTMLDialogElement_showModal_Callback";
  showModal_Callback_0_(mthis) => showModal_Callback_0(mthis);

  static showModal_Callback_1(mthis, __arg_0) native "HTMLDialogElement_showModal_Callback";
  showModal_Callback_1_(mthis, __arg_0) => showModal_Callback_1(mthis, __arg_0);

  static showModal_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDialogElement_showModal_Callback";
  showModal_Callback_2_(mthis, __arg_0, __arg_1) => showModal_Callback_2(mthis, __arg_0, __arg_1);

  static show_Callback_0(mthis) native "HTMLDialogElement_show_Callback";
  show_Callback_0_(mthis) => show_Callback_0(mthis);

  static show_Callback_1(mthis, __arg_0) native "HTMLDialogElement_show_Callback";
  show_Callback_1_(mthis, __arg_0) => show_Callback_1(mthis, __arg_0);

  static show_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDialogElement_show_Callback";
  show_Callback_2_(mthis, __arg_0, __arg_1) => show_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkHTMLDirectoryElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDirectoryElement();

}

class BlinkHTMLDivElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLDivElement();

}

class BlinkHTMLDocument extends BlinkDocument {
  static final instance = new BlinkHTMLDocument();

  static alinkColor_Getter(mthis) native "HTMLDocument_alinkColor_Getter";
  alinkColor_Getter_(mthis) => alinkColor_Getter(mthis);

  static alinkColor_Setter(mthis, __arg_0) native "HTMLDocument_alinkColor_Setter";
  alinkColor_Setter_(mthis, __arg_0) => alinkColor_Setter(mthis, __arg_0);

  static bgColor_Getter(mthis) native "HTMLDocument_bgColor_Getter";
  bgColor_Getter_(mthis) => bgColor_Getter(mthis);

  static bgColor_Setter(mthis, __arg_0) native "HTMLDocument_bgColor_Setter";
  bgColor_Setter_(mthis, __arg_0) => bgColor_Setter(mthis, __arg_0);

  static captureEvents_Callback_0(mthis) native "HTMLDocument_captureEvents_Callback";
  captureEvents_Callback_0_(mthis) => captureEvents_Callback_0(mthis);

  static captureEvents_Callback_1(mthis, __arg_0) native "HTMLDocument_captureEvents_Callback";
  captureEvents_Callback_1_(mthis, __arg_0) => captureEvents_Callback_1(mthis, __arg_0);

  static captureEvents_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDocument_captureEvents_Callback";
  captureEvents_Callback_2_(mthis, __arg_0, __arg_1) => captureEvents_Callback_2(mthis, __arg_0, __arg_1);

  static clear_Callback_0(mthis) native "HTMLDocument_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "HTMLDocument_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDocument_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static close_Callback_0(mthis) native "HTMLDocument_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "HTMLDocument_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDocument_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static compatMode_Getter(mthis) native "HTMLDocument_compatMode_Getter";
  compatMode_Getter_(mthis) => compatMode_Getter(mthis);

  static fgColor_Getter(mthis) native "HTMLDocument_fgColor_Getter";
  fgColor_Getter_(mthis) => fgColor_Getter(mthis);

  static fgColor_Setter(mthis, __arg_0) native "HTMLDocument_fgColor_Setter";
  fgColor_Setter_(mthis, __arg_0) => fgColor_Setter(mthis, __arg_0);

  static linkColor_Getter(mthis) native "HTMLDocument_linkColor_Getter";
  linkColor_Getter_(mthis) => linkColor_Getter(mthis);

  static linkColor_Setter(mthis, __arg_0) native "HTMLDocument_linkColor_Setter";
  linkColor_Setter_(mthis, __arg_0) => linkColor_Setter(mthis, __arg_0);

  static open_Callback_0(mthis) native "HTMLDocument_open_Callback";
  open_Callback_0_(mthis) => open_Callback_0(mthis);

  static open_Callback_1(mthis, __arg_0) native "HTMLDocument_open_Callback";
  open_Callback_1_(mthis, __arg_0) => open_Callback_1(mthis, __arg_0);

  static open_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDocument_open_Callback";
  open_Callback_2_(mthis, __arg_0, __arg_1) => open_Callback_2(mthis, __arg_0, __arg_1);

  static releaseEvents_Callback_0(mthis) native "HTMLDocument_releaseEvents_Callback";
  releaseEvents_Callback_0_(mthis) => releaseEvents_Callback_0(mthis);

  static releaseEvents_Callback_1(mthis, __arg_0) native "HTMLDocument_releaseEvents_Callback";
  releaseEvents_Callback_1_(mthis, __arg_0) => releaseEvents_Callback_1(mthis, __arg_0);

  static releaseEvents_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDocument_releaseEvents_Callback";
  releaseEvents_Callback_2_(mthis, __arg_0, __arg_1) => releaseEvents_Callback_2(mthis, __arg_0, __arg_1);

  static vlinkColor_Getter(mthis) native "HTMLDocument_vlinkColor_Getter";
  vlinkColor_Getter_(mthis) => vlinkColor_Getter(mthis);

  static vlinkColor_Setter(mthis, __arg_0) native "HTMLDocument_vlinkColor_Setter";
  vlinkColor_Setter_(mthis, __arg_0) => vlinkColor_Setter(mthis, __arg_0);

  static write_Callback_0(mthis) native "HTMLDocument_write_Callback";
  write_Callback_0_(mthis) => write_Callback_0(mthis);

  static write_Callback_1(mthis, __arg_0) native "HTMLDocument_write_Callback";
  write_Callback_1_(mthis, __arg_0) => write_Callback_1(mthis, __arg_0);

  static write_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDocument_write_Callback";
  write_Callback_2_(mthis, __arg_0, __arg_1) => write_Callback_2(mthis, __arg_0, __arg_1);

  static write_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLDocument_write_Callback";
  write_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => write_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static writeln_Callback_0(mthis) native "HTMLDocument_writeln_Callback";
  writeln_Callback_0_(mthis) => writeln_Callback_0(mthis);

  static writeln_Callback_1(mthis, __arg_0) native "HTMLDocument_writeln_Callback";
  writeln_Callback_1_(mthis, __arg_0) => writeln_Callback_1(mthis, __arg_0);

  static writeln_Callback_2(mthis, __arg_0, __arg_1) native "HTMLDocument_writeln_Callback";
  writeln_Callback_2_(mthis, __arg_0, __arg_1) => writeln_Callback_2(mthis, __arg_0, __arg_1);

  static writeln_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLDocument_writeln_Callback";
  writeln_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => writeln_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkHTMLElement extends BlinkElement {
  static final instance = new BlinkHTMLElement();

  static accessKey_Getter(mthis) native "HTMLElement_accessKey_Getter";
  accessKey_Getter_(mthis) => accessKey_Getter(mthis);

  static accessKey_Setter(mthis, __arg_0) native "HTMLElement_accessKey_Setter";
  accessKey_Setter_(mthis, __arg_0) => accessKey_Setter(mthis, __arg_0);

  static click_Callback_0(mthis) native "HTMLElement_click_Callback";
  click_Callback_0_(mthis) => click_Callback_0(mthis);

  static click_Callback_1(mthis, __arg_0) native "HTMLElement_click_Callback";
  click_Callback_1_(mthis, __arg_0) => click_Callback_1(mthis, __arg_0);

  static click_Callback_2(mthis, __arg_0, __arg_1) native "HTMLElement_click_Callback";
  click_Callback_2_(mthis, __arg_0, __arg_1) => click_Callback_2(mthis, __arg_0, __arg_1);

  static contentEditable_Getter(mthis) native "HTMLElement_contentEditable_Getter";
  contentEditable_Getter_(mthis) => contentEditable_Getter(mthis);

  static contentEditable_Setter(mthis, __arg_0) native "HTMLElement_contentEditable_Setter";
  contentEditable_Setter_(mthis, __arg_0) => contentEditable_Setter(mthis, __arg_0);

  static contextMenu_Getter(mthis) native "HTMLElement_contextMenu_Getter";
  contextMenu_Getter_(mthis) => contextMenu_Getter(mthis);

  static contextMenu_Setter(mthis, __arg_0) native "HTMLElement_contextMenu_Setter";
  contextMenu_Setter_(mthis, __arg_0) => contextMenu_Setter(mthis, __arg_0);

  static dir_Getter(mthis) native "HTMLElement_dir_Getter";
  dir_Getter_(mthis) => dir_Getter(mthis);

  static dir_Setter(mthis, __arg_0) native "HTMLElement_dir_Setter";
  dir_Setter_(mthis, __arg_0) => dir_Setter(mthis, __arg_0);

  static draggable_Getter(mthis) native "HTMLElement_draggable_Getter";
  draggable_Getter_(mthis) => draggable_Getter(mthis);

  static draggable_Setter(mthis, __arg_0) native "HTMLElement_draggable_Setter";
  draggable_Setter_(mthis, __arg_0) => draggable_Setter(mthis, __arg_0);

  static hidden_Getter(mthis) native "HTMLElement_hidden_Getter";
  hidden_Getter_(mthis) => hidden_Getter(mthis);

  static hidden_Setter(mthis, __arg_0) native "HTMLElement_hidden_Setter";
  hidden_Setter_(mthis, __arg_0) => hidden_Setter(mthis, __arg_0);

  static innerText_Getter(mthis) native "HTMLElement_innerText_Getter";
  innerText_Getter_(mthis) => innerText_Getter(mthis);

  static innerText_Setter(mthis, __arg_0) native "HTMLElement_innerText_Setter";
  innerText_Setter_(mthis, __arg_0) => innerText_Setter(mthis, __arg_0);

  static inputMethodContext_Getter(mthis) native "HTMLElement_inputMethodContext_Getter";
  inputMethodContext_Getter_(mthis) => inputMethodContext_Getter(mthis);

  static isContentEditable_Getter(mthis) native "HTMLElement_isContentEditable_Getter";
  isContentEditable_Getter_(mthis) => isContentEditable_Getter(mthis);

  static lang_Getter(mthis) native "HTMLElement_lang_Getter";
  lang_Getter_(mthis) => lang_Getter(mthis);

  static lang_Setter(mthis, __arg_0) native "HTMLElement_lang_Setter";
  lang_Setter_(mthis, __arg_0) => lang_Setter(mthis, __arg_0);

  static onabort_Getter(mthis) native "HTMLElement_onabort_Getter";
  onabort_Getter_(mthis) => onabort_Getter(mthis);

  static onabort_Setter(mthis, __arg_0) native "HTMLElement_onabort_Setter";
  onabort_Setter_(mthis, __arg_0) => onabort_Setter(mthis, __arg_0);

  static onautocomplete_Getter(mthis) native "HTMLElement_onautocomplete_Getter";
  onautocomplete_Getter_(mthis) => onautocomplete_Getter(mthis);

  static onautocomplete_Setter(mthis, __arg_0) native "HTMLElement_onautocomplete_Setter";
  onautocomplete_Setter_(mthis, __arg_0) => onautocomplete_Setter(mthis, __arg_0);

  static onautocompleteerror_Getter(mthis) native "HTMLElement_onautocompleteerror_Getter";
  onautocompleteerror_Getter_(mthis) => onautocompleteerror_Getter(mthis);

  static onautocompleteerror_Setter(mthis, __arg_0) native "HTMLElement_onautocompleteerror_Setter";
  onautocompleteerror_Setter_(mthis, __arg_0) => onautocompleteerror_Setter(mthis, __arg_0);

  static onblur_Getter(mthis) native "HTMLElement_onblur_Getter";
  onblur_Getter_(mthis) => onblur_Getter(mthis);

  static onblur_Setter(mthis, __arg_0) native "HTMLElement_onblur_Setter";
  onblur_Setter_(mthis, __arg_0) => onblur_Setter(mthis, __arg_0);

  static oncancel_Getter(mthis) native "HTMLElement_oncancel_Getter";
  oncancel_Getter_(mthis) => oncancel_Getter(mthis);

  static oncancel_Setter(mthis, __arg_0) native "HTMLElement_oncancel_Setter";
  oncancel_Setter_(mthis, __arg_0) => oncancel_Setter(mthis, __arg_0);

  static oncanplay_Getter(mthis) native "HTMLElement_oncanplay_Getter";
  oncanplay_Getter_(mthis) => oncanplay_Getter(mthis);

  static oncanplay_Setter(mthis, __arg_0) native "HTMLElement_oncanplay_Setter";
  oncanplay_Setter_(mthis, __arg_0) => oncanplay_Setter(mthis, __arg_0);

  static oncanplaythrough_Getter(mthis) native "HTMLElement_oncanplaythrough_Getter";
  oncanplaythrough_Getter_(mthis) => oncanplaythrough_Getter(mthis);

  static oncanplaythrough_Setter(mthis, __arg_0) native "HTMLElement_oncanplaythrough_Setter";
  oncanplaythrough_Setter_(mthis, __arg_0) => oncanplaythrough_Setter(mthis, __arg_0);

  static onchange_Getter(mthis) native "HTMLElement_onchange_Getter";
  onchange_Getter_(mthis) => onchange_Getter(mthis);

  static onchange_Setter(mthis, __arg_0) native "HTMLElement_onchange_Setter";
  onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);

  static onclick_Getter(mthis) native "HTMLElement_onclick_Getter";
  onclick_Getter_(mthis) => onclick_Getter(mthis);

  static onclick_Setter(mthis, __arg_0) native "HTMLElement_onclick_Setter";
  onclick_Setter_(mthis, __arg_0) => onclick_Setter(mthis, __arg_0);

  static onclose_Getter(mthis) native "HTMLElement_onclose_Getter";
  onclose_Getter_(mthis) => onclose_Getter(mthis);

  static onclose_Setter(mthis, __arg_0) native "HTMLElement_onclose_Setter";
  onclose_Setter_(mthis, __arg_0) => onclose_Setter(mthis, __arg_0);

  static oncontextmenu_Getter(mthis) native "HTMLElement_oncontextmenu_Getter";
  oncontextmenu_Getter_(mthis) => oncontextmenu_Getter(mthis);

  static oncontextmenu_Setter(mthis, __arg_0) native "HTMLElement_oncontextmenu_Setter";
  oncontextmenu_Setter_(mthis, __arg_0) => oncontextmenu_Setter(mthis, __arg_0);

  static oncuechange_Getter(mthis) native "HTMLElement_oncuechange_Getter";
  oncuechange_Getter_(mthis) => oncuechange_Getter(mthis);

  static oncuechange_Setter(mthis, __arg_0) native "HTMLElement_oncuechange_Setter";
  oncuechange_Setter_(mthis, __arg_0) => oncuechange_Setter(mthis, __arg_0);

  static ondblclick_Getter(mthis) native "HTMLElement_ondblclick_Getter";
  ondblclick_Getter_(mthis) => ondblclick_Getter(mthis);

  static ondblclick_Setter(mthis, __arg_0) native "HTMLElement_ondblclick_Setter";
  ondblclick_Setter_(mthis, __arg_0) => ondblclick_Setter(mthis, __arg_0);

  static ondrag_Getter(mthis) native "HTMLElement_ondrag_Getter";
  ondrag_Getter_(mthis) => ondrag_Getter(mthis);

  static ondrag_Setter(mthis, __arg_0) native "HTMLElement_ondrag_Setter";
  ondrag_Setter_(mthis, __arg_0) => ondrag_Setter(mthis, __arg_0);

  static ondragend_Getter(mthis) native "HTMLElement_ondragend_Getter";
  ondragend_Getter_(mthis) => ondragend_Getter(mthis);

  static ondragend_Setter(mthis, __arg_0) native "HTMLElement_ondragend_Setter";
  ondragend_Setter_(mthis, __arg_0) => ondragend_Setter(mthis, __arg_0);

  static ondragenter_Getter(mthis) native "HTMLElement_ondragenter_Getter";
  ondragenter_Getter_(mthis) => ondragenter_Getter(mthis);

  static ondragenter_Setter(mthis, __arg_0) native "HTMLElement_ondragenter_Setter";
  ondragenter_Setter_(mthis, __arg_0) => ondragenter_Setter(mthis, __arg_0);

  static ondragleave_Getter(mthis) native "HTMLElement_ondragleave_Getter";
  ondragleave_Getter_(mthis) => ondragleave_Getter(mthis);

  static ondragleave_Setter(mthis, __arg_0) native "HTMLElement_ondragleave_Setter";
  ondragleave_Setter_(mthis, __arg_0) => ondragleave_Setter(mthis, __arg_0);

  static ondragover_Getter(mthis) native "HTMLElement_ondragover_Getter";
  ondragover_Getter_(mthis) => ondragover_Getter(mthis);

  static ondragover_Setter(mthis, __arg_0) native "HTMLElement_ondragover_Setter";
  ondragover_Setter_(mthis, __arg_0) => ondragover_Setter(mthis, __arg_0);

  static ondragstart_Getter(mthis) native "HTMLElement_ondragstart_Getter";
  ondragstart_Getter_(mthis) => ondragstart_Getter(mthis);

  static ondragstart_Setter(mthis, __arg_0) native "HTMLElement_ondragstart_Setter";
  ondragstart_Setter_(mthis, __arg_0) => ondragstart_Setter(mthis, __arg_0);

  static ondrop_Getter(mthis) native "HTMLElement_ondrop_Getter";
  ondrop_Getter_(mthis) => ondrop_Getter(mthis);

  static ondrop_Setter(mthis, __arg_0) native "HTMLElement_ondrop_Setter";
  ondrop_Setter_(mthis, __arg_0) => ondrop_Setter(mthis, __arg_0);

  static ondurationchange_Getter(mthis) native "HTMLElement_ondurationchange_Getter";
  ondurationchange_Getter_(mthis) => ondurationchange_Getter(mthis);

  static ondurationchange_Setter(mthis, __arg_0) native "HTMLElement_ondurationchange_Setter";
  ondurationchange_Setter_(mthis, __arg_0) => ondurationchange_Setter(mthis, __arg_0);

  static onemptied_Getter(mthis) native "HTMLElement_onemptied_Getter";
  onemptied_Getter_(mthis) => onemptied_Getter(mthis);

  static onemptied_Setter(mthis, __arg_0) native "HTMLElement_onemptied_Setter";
  onemptied_Setter_(mthis, __arg_0) => onemptied_Setter(mthis, __arg_0);

  static onended_Getter(mthis) native "HTMLElement_onended_Getter";
  onended_Getter_(mthis) => onended_Getter(mthis);

  static onended_Setter(mthis, __arg_0) native "HTMLElement_onended_Setter";
  onended_Setter_(mthis, __arg_0) => onended_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "HTMLElement_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "HTMLElement_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onfocus_Getter(mthis) native "HTMLElement_onfocus_Getter";
  onfocus_Getter_(mthis) => onfocus_Getter(mthis);

  static onfocus_Setter(mthis, __arg_0) native "HTMLElement_onfocus_Setter";
  onfocus_Setter_(mthis, __arg_0) => onfocus_Setter(mthis, __arg_0);

  static oninput_Getter(mthis) native "HTMLElement_oninput_Getter";
  oninput_Getter_(mthis) => oninput_Getter(mthis);

  static oninput_Setter(mthis, __arg_0) native "HTMLElement_oninput_Setter";
  oninput_Setter_(mthis, __arg_0) => oninput_Setter(mthis, __arg_0);

  static oninvalid_Getter(mthis) native "HTMLElement_oninvalid_Getter";
  oninvalid_Getter_(mthis) => oninvalid_Getter(mthis);

  static oninvalid_Setter(mthis, __arg_0) native "HTMLElement_oninvalid_Setter";
  oninvalid_Setter_(mthis, __arg_0) => oninvalid_Setter(mthis, __arg_0);

  static onkeydown_Getter(mthis) native "HTMLElement_onkeydown_Getter";
  onkeydown_Getter_(mthis) => onkeydown_Getter(mthis);

  static onkeydown_Setter(mthis, __arg_0) native "HTMLElement_onkeydown_Setter";
  onkeydown_Setter_(mthis, __arg_0) => onkeydown_Setter(mthis, __arg_0);

  static onkeypress_Getter(mthis) native "HTMLElement_onkeypress_Getter";
  onkeypress_Getter_(mthis) => onkeypress_Getter(mthis);

  static onkeypress_Setter(mthis, __arg_0) native "HTMLElement_onkeypress_Setter";
  onkeypress_Setter_(mthis, __arg_0) => onkeypress_Setter(mthis, __arg_0);

  static onkeyup_Getter(mthis) native "HTMLElement_onkeyup_Getter";
  onkeyup_Getter_(mthis) => onkeyup_Getter(mthis);

  static onkeyup_Setter(mthis, __arg_0) native "HTMLElement_onkeyup_Setter";
  onkeyup_Setter_(mthis, __arg_0) => onkeyup_Setter(mthis, __arg_0);

  static onload_Getter(mthis) native "HTMLElement_onload_Getter";
  onload_Getter_(mthis) => onload_Getter(mthis);

  static onload_Setter(mthis, __arg_0) native "HTMLElement_onload_Setter";
  onload_Setter_(mthis, __arg_0) => onload_Setter(mthis, __arg_0);

  static onloadeddata_Getter(mthis) native "HTMLElement_onloadeddata_Getter";
  onloadeddata_Getter_(mthis) => onloadeddata_Getter(mthis);

  static onloadeddata_Setter(mthis, __arg_0) native "HTMLElement_onloadeddata_Setter";
  onloadeddata_Setter_(mthis, __arg_0) => onloadeddata_Setter(mthis, __arg_0);

  static onloadedmetadata_Getter(mthis) native "HTMLElement_onloadedmetadata_Getter";
  onloadedmetadata_Getter_(mthis) => onloadedmetadata_Getter(mthis);

  static onloadedmetadata_Setter(mthis, __arg_0) native "HTMLElement_onloadedmetadata_Setter";
  onloadedmetadata_Setter_(mthis, __arg_0) => onloadedmetadata_Setter(mthis, __arg_0);

  static onloadstart_Getter(mthis) native "HTMLElement_onloadstart_Getter";
  onloadstart_Getter_(mthis) => onloadstart_Getter(mthis);

  static onloadstart_Setter(mthis, __arg_0) native "HTMLElement_onloadstart_Setter";
  onloadstart_Setter_(mthis, __arg_0) => onloadstart_Setter(mthis, __arg_0);

  static onmousedown_Getter(mthis) native "HTMLElement_onmousedown_Getter";
  onmousedown_Getter_(mthis) => onmousedown_Getter(mthis);

  static onmousedown_Setter(mthis, __arg_0) native "HTMLElement_onmousedown_Setter";
  onmousedown_Setter_(mthis, __arg_0) => onmousedown_Setter(mthis, __arg_0);

  static onmouseenter_Getter(mthis) native "HTMLElement_onmouseenter_Getter";
  onmouseenter_Getter_(mthis) => onmouseenter_Getter(mthis);

  static onmouseenter_Setter(mthis, __arg_0) native "HTMLElement_onmouseenter_Setter";
  onmouseenter_Setter_(mthis, __arg_0) => onmouseenter_Setter(mthis, __arg_0);

  static onmouseleave_Getter(mthis) native "HTMLElement_onmouseleave_Getter";
  onmouseleave_Getter_(mthis) => onmouseleave_Getter(mthis);

  static onmouseleave_Setter(mthis, __arg_0) native "HTMLElement_onmouseleave_Setter";
  onmouseleave_Setter_(mthis, __arg_0) => onmouseleave_Setter(mthis, __arg_0);

  static onmousemove_Getter(mthis) native "HTMLElement_onmousemove_Getter";
  onmousemove_Getter_(mthis) => onmousemove_Getter(mthis);

  static onmousemove_Setter(mthis, __arg_0) native "HTMLElement_onmousemove_Setter";
  onmousemove_Setter_(mthis, __arg_0) => onmousemove_Setter(mthis, __arg_0);

  static onmouseout_Getter(mthis) native "HTMLElement_onmouseout_Getter";
  onmouseout_Getter_(mthis) => onmouseout_Getter(mthis);

  static onmouseout_Setter(mthis, __arg_0) native "HTMLElement_onmouseout_Setter";
  onmouseout_Setter_(mthis, __arg_0) => onmouseout_Setter(mthis, __arg_0);

  static onmouseover_Getter(mthis) native "HTMLElement_onmouseover_Getter";
  onmouseover_Getter_(mthis) => onmouseover_Getter(mthis);

  static onmouseover_Setter(mthis, __arg_0) native "HTMLElement_onmouseover_Setter";
  onmouseover_Setter_(mthis, __arg_0) => onmouseover_Setter(mthis, __arg_0);

  static onmouseup_Getter(mthis) native "HTMLElement_onmouseup_Getter";
  onmouseup_Getter_(mthis) => onmouseup_Getter(mthis);

  static onmouseup_Setter(mthis, __arg_0) native "HTMLElement_onmouseup_Setter";
  onmouseup_Setter_(mthis, __arg_0) => onmouseup_Setter(mthis, __arg_0);

  static onmousewheel_Getter(mthis) native "HTMLElement_onmousewheel_Getter";
  onmousewheel_Getter_(mthis) => onmousewheel_Getter(mthis);

  static onmousewheel_Setter(mthis, __arg_0) native "HTMLElement_onmousewheel_Setter";
  onmousewheel_Setter_(mthis, __arg_0) => onmousewheel_Setter(mthis, __arg_0);

  static onpause_Getter(mthis) native "HTMLElement_onpause_Getter";
  onpause_Getter_(mthis) => onpause_Getter(mthis);

  static onpause_Setter(mthis, __arg_0) native "HTMLElement_onpause_Setter";
  onpause_Setter_(mthis, __arg_0) => onpause_Setter(mthis, __arg_0);

  static onplay_Getter(mthis) native "HTMLElement_onplay_Getter";
  onplay_Getter_(mthis) => onplay_Getter(mthis);

  static onplay_Setter(mthis, __arg_0) native "HTMLElement_onplay_Setter";
  onplay_Setter_(mthis, __arg_0) => onplay_Setter(mthis, __arg_0);

  static onplaying_Getter(mthis) native "HTMLElement_onplaying_Getter";
  onplaying_Getter_(mthis) => onplaying_Getter(mthis);

  static onplaying_Setter(mthis, __arg_0) native "HTMLElement_onplaying_Setter";
  onplaying_Setter_(mthis, __arg_0) => onplaying_Setter(mthis, __arg_0);

  static onprogress_Getter(mthis) native "HTMLElement_onprogress_Getter";
  onprogress_Getter_(mthis) => onprogress_Getter(mthis);

  static onprogress_Setter(mthis, __arg_0) native "HTMLElement_onprogress_Setter";
  onprogress_Setter_(mthis, __arg_0) => onprogress_Setter(mthis, __arg_0);

  static onratechange_Getter(mthis) native "HTMLElement_onratechange_Getter";
  onratechange_Getter_(mthis) => onratechange_Getter(mthis);

  static onratechange_Setter(mthis, __arg_0) native "HTMLElement_onratechange_Setter";
  onratechange_Setter_(mthis, __arg_0) => onratechange_Setter(mthis, __arg_0);

  static onreset_Getter(mthis) native "HTMLElement_onreset_Getter";
  onreset_Getter_(mthis) => onreset_Getter(mthis);

  static onreset_Setter(mthis, __arg_0) native "HTMLElement_onreset_Setter";
  onreset_Setter_(mthis, __arg_0) => onreset_Setter(mthis, __arg_0);

  static onresize_Getter(mthis) native "HTMLElement_onresize_Getter";
  onresize_Getter_(mthis) => onresize_Getter(mthis);

  static onresize_Setter(mthis, __arg_0) native "HTMLElement_onresize_Setter";
  onresize_Setter_(mthis, __arg_0) => onresize_Setter(mthis, __arg_0);

  static onscroll_Getter(mthis) native "HTMLElement_onscroll_Getter";
  onscroll_Getter_(mthis) => onscroll_Getter(mthis);

  static onscroll_Setter(mthis, __arg_0) native "HTMLElement_onscroll_Setter";
  onscroll_Setter_(mthis, __arg_0) => onscroll_Setter(mthis, __arg_0);

  static onseeked_Getter(mthis) native "HTMLElement_onseeked_Getter";
  onseeked_Getter_(mthis) => onseeked_Getter(mthis);

  static onseeked_Setter(mthis, __arg_0) native "HTMLElement_onseeked_Setter";
  onseeked_Setter_(mthis, __arg_0) => onseeked_Setter(mthis, __arg_0);

  static onseeking_Getter(mthis) native "HTMLElement_onseeking_Getter";
  onseeking_Getter_(mthis) => onseeking_Getter(mthis);

  static onseeking_Setter(mthis, __arg_0) native "HTMLElement_onseeking_Setter";
  onseeking_Setter_(mthis, __arg_0) => onseeking_Setter(mthis, __arg_0);

  static onselect_Getter(mthis) native "HTMLElement_onselect_Getter";
  onselect_Getter_(mthis) => onselect_Getter(mthis);

  static onselect_Setter(mthis, __arg_0) native "HTMLElement_onselect_Setter";
  onselect_Setter_(mthis, __arg_0) => onselect_Setter(mthis, __arg_0);

  static onshow_Getter(mthis) native "HTMLElement_onshow_Getter";
  onshow_Getter_(mthis) => onshow_Getter(mthis);

  static onshow_Setter(mthis, __arg_0) native "HTMLElement_onshow_Setter";
  onshow_Setter_(mthis, __arg_0) => onshow_Setter(mthis, __arg_0);

  static onstalled_Getter(mthis) native "HTMLElement_onstalled_Getter";
  onstalled_Getter_(mthis) => onstalled_Getter(mthis);

  static onstalled_Setter(mthis, __arg_0) native "HTMLElement_onstalled_Setter";
  onstalled_Setter_(mthis, __arg_0) => onstalled_Setter(mthis, __arg_0);

  static onsubmit_Getter(mthis) native "HTMLElement_onsubmit_Getter";
  onsubmit_Getter_(mthis) => onsubmit_Getter(mthis);

  static onsubmit_Setter(mthis, __arg_0) native "HTMLElement_onsubmit_Setter";
  onsubmit_Setter_(mthis, __arg_0) => onsubmit_Setter(mthis, __arg_0);

  static onsuspend_Getter(mthis) native "HTMLElement_onsuspend_Getter";
  onsuspend_Getter_(mthis) => onsuspend_Getter(mthis);

  static onsuspend_Setter(mthis, __arg_0) native "HTMLElement_onsuspend_Setter";
  onsuspend_Setter_(mthis, __arg_0) => onsuspend_Setter(mthis, __arg_0);

  static ontimeupdate_Getter(mthis) native "HTMLElement_ontimeupdate_Getter";
  ontimeupdate_Getter_(mthis) => ontimeupdate_Getter(mthis);

  static ontimeupdate_Setter(mthis, __arg_0) native "HTMLElement_ontimeupdate_Setter";
  ontimeupdate_Setter_(mthis, __arg_0) => ontimeupdate_Setter(mthis, __arg_0);

  static ontoggle_Getter(mthis) native "HTMLElement_ontoggle_Getter";
  ontoggle_Getter_(mthis) => ontoggle_Getter(mthis);

  static ontoggle_Setter(mthis, __arg_0) native "HTMLElement_ontoggle_Setter";
  ontoggle_Setter_(mthis, __arg_0) => ontoggle_Setter(mthis, __arg_0);

  static onvolumechange_Getter(mthis) native "HTMLElement_onvolumechange_Getter";
  onvolumechange_Getter_(mthis) => onvolumechange_Getter(mthis);

  static onvolumechange_Setter(mthis, __arg_0) native "HTMLElement_onvolumechange_Setter";
  onvolumechange_Setter_(mthis, __arg_0) => onvolumechange_Setter(mthis, __arg_0);

  static onwaiting_Getter(mthis) native "HTMLElement_onwaiting_Getter";
  onwaiting_Getter_(mthis) => onwaiting_Getter(mthis);

  static onwaiting_Setter(mthis, __arg_0) native "HTMLElement_onwaiting_Setter";
  onwaiting_Setter_(mthis, __arg_0) => onwaiting_Setter(mthis, __arg_0);

  static outerText_Getter(mthis) native "HTMLElement_outerText_Getter";
  outerText_Getter_(mthis) => outerText_Getter(mthis);

  static outerText_Setter(mthis, __arg_0) native "HTMLElement_outerText_Setter";
  outerText_Setter_(mthis, __arg_0) => outerText_Setter(mthis, __arg_0);

  static spellcheck_Getter(mthis) native "HTMLElement_spellcheck_Getter";
  spellcheck_Getter_(mthis) => spellcheck_Getter(mthis);

  static spellcheck_Setter(mthis, __arg_0) native "HTMLElement_spellcheck_Setter";
  spellcheck_Setter_(mthis, __arg_0) => spellcheck_Setter(mthis, __arg_0);

  static tabIndex_Getter(mthis) native "HTMLElement_tabIndex_Getter";
  tabIndex_Getter_(mthis) => tabIndex_Getter(mthis);

  static tabIndex_Setter(mthis, __arg_0) native "HTMLElement_tabIndex_Setter";
  tabIndex_Setter_(mthis, __arg_0) => tabIndex_Setter(mthis, __arg_0);

  static title_Getter(mthis) native "HTMLElement_title_Getter";
  title_Getter_(mthis) => title_Getter(mthis);

  static title_Setter(mthis, __arg_0) native "HTMLElement_title_Setter";
  title_Setter_(mthis, __arg_0) => title_Setter(mthis, __arg_0);

  static translate_Getter(mthis) native "HTMLElement_translate_Getter";
  translate_Getter_(mthis) => translate_Getter(mthis);

  static translate_Setter(mthis, __arg_0) native "HTMLElement_translate_Setter";
  translate_Setter_(mthis, __arg_0) => translate_Setter(mthis, __arg_0);

  static webkitdropzone_Getter(mthis) native "HTMLElement_webkitdropzone_Getter";
  webkitdropzone_Getter_(mthis) => webkitdropzone_Getter(mthis);

  static webkitdropzone_Setter(mthis, __arg_0) native "HTMLElement_webkitdropzone_Setter";
  webkitdropzone_Setter_(mthis, __arg_0) => webkitdropzone_Setter(mthis, __arg_0);

}

class BlinkHTMLEmbedElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLEmbedElement();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLEmbedElement___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "HTMLEmbedElement___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static align_Getter(mthis) native "HTMLEmbedElement_align_Getter";
  align_Getter_(mthis) => align_Getter(mthis);

  static align_Setter(mthis, __arg_0) native "HTMLEmbedElement_align_Setter";
  align_Setter_(mthis, __arg_0) => align_Setter(mthis, __arg_0);

  static getSVGDocument_Callback_0(mthis) native "HTMLEmbedElement_getSVGDocument_Callback";
  getSVGDocument_Callback_0_(mthis) => getSVGDocument_Callback_0(mthis);

  static getSVGDocument_Callback_1(mthis, __arg_0) native "HTMLEmbedElement_getSVGDocument_Callback";
  getSVGDocument_Callback_1_(mthis, __arg_0) => getSVGDocument_Callback_1(mthis, __arg_0);

  static getSVGDocument_Callback_2(mthis, __arg_0, __arg_1) native "HTMLEmbedElement_getSVGDocument_Callback";
  getSVGDocument_Callback_2_(mthis, __arg_0, __arg_1) => getSVGDocument_Callback_2(mthis, __arg_0, __arg_1);

  static height_Getter(mthis) native "HTMLEmbedElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "HTMLEmbedElement_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static integrity_Getter(mthis) native "HTMLEmbedElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLEmbedElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static name_Getter(mthis) native "HTMLEmbedElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLEmbedElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static src_Getter(mthis) native "HTMLEmbedElement_src_Getter";
  src_Getter_(mthis) => src_Getter(mthis);

  static src_Setter(mthis, __arg_0) native "HTMLEmbedElement_src_Setter";
  src_Setter_(mthis, __arg_0) => src_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "HTMLEmbedElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLEmbedElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

  static width_Getter(mthis) native "HTMLEmbedElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "HTMLEmbedElement_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

}

class BlinkHTMLFieldSetElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFieldSetElement();

  static checkValidity_Callback_0(mthis) native "HTMLFieldSetElement_checkValidity_Callback";
  checkValidity_Callback_0_(mthis) => checkValidity_Callback_0(mthis);

  static checkValidity_Callback_1(mthis, __arg_0) native "HTMLFieldSetElement_checkValidity_Callback";
  checkValidity_Callback_1_(mthis, __arg_0) => checkValidity_Callback_1(mthis, __arg_0);

  static checkValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLFieldSetElement_checkValidity_Callback";
  checkValidity_Callback_2_(mthis, __arg_0, __arg_1) => checkValidity_Callback_2(mthis, __arg_0, __arg_1);

  static disabled_Getter(mthis) native "HTMLFieldSetElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLFieldSetElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static elements_Getter(mthis) native "HTMLFieldSetElement_elements_Getter";
  elements_Getter_(mthis) => elements_Getter(mthis);

  static form_Getter(mthis) native "HTMLFieldSetElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static name_Getter(mthis) native "HTMLFieldSetElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLFieldSetElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static setCustomValidity_Callback_0(mthis) native "HTMLFieldSetElement_setCustomValidity_Callback";
  setCustomValidity_Callback_0_(mthis) => setCustomValidity_Callback_0(mthis);

  static setCustomValidity_Callback_1(mthis, __arg_0) native "HTMLFieldSetElement_setCustomValidity_Callback";
  setCustomValidity_Callback_1_(mthis, __arg_0) => setCustomValidity_Callback_1(mthis, __arg_0);

  static setCustomValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLFieldSetElement_setCustomValidity_Callback";
  setCustomValidity_Callback_2_(mthis, __arg_0, __arg_1) => setCustomValidity_Callback_2(mthis, __arg_0, __arg_1);

  static setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLFieldSetElement_setCustomValidity_Callback";
  setCustomValidity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static type_Getter(mthis) native "HTMLFieldSetElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static validationMessage_Getter(mthis) native "HTMLFieldSetElement_validationMessage_Getter";
  validationMessage_Getter_(mthis) => validationMessage_Getter(mthis);

  static validity_Getter(mthis) native "HTMLFieldSetElement_validity_Getter";
  validity_Getter_(mthis) => validity_Getter(mthis);

  static willValidate_Getter(mthis) native "HTMLFieldSetElement_willValidate_Getter";
  willValidate_Getter_(mthis) => willValidate_Getter(mthis);

}

class BlinkHTMLFontElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFontElement();

}

class BlinkHTMLFormControlsCollection extends BlinkHTMLCollection {
  static final instance = new BlinkHTMLFormControlsCollection();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLFormControlsCollection___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static namedItem_Callback_0(mthis) native "HTMLFormControlsCollection_namedItem_Callback";
  namedItem_Callback_0_(mthis) => namedItem_Callback_0(mthis);

  static namedItem_Callback_1(mthis, __arg_0) native "HTMLFormControlsCollection_namedItem_Callback";
  namedItem_Callback_1_(mthis, __arg_0) => namedItem_Callback_1(mthis, __arg_0);

  static namedItem_Callback_2(mthis, __arg_0, __arg_1) native "HTMLFormControlsCollection_namedItem_Callback";
  namedItem_Callback_2_(mthis, __arg_0, __arg_1) => namedItem_Callback_2(mthis, __arg_0, __arg_1);

  static namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLFormControlsCollection_namedItem_Callback";
  namedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkHTMLFormElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFormElement();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLFormElement___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static acceptCharset_Getter(mthis) native "HTMLFormElement_acceptCharset_Getter";
  acceptCharset_Getter_(mthis) => acceptCharset_Getter(mthis);

  static acceptCharset_Setter(mthis, __arg_0) native "HTMLFormElement_acceptCharset_Setter";
  acceptCharset_Setter_(mthis, __arg_0) => acceptCharset_Setter(mthis, __arg_0);

  static action_Getter(mthis) native "HTMLFormElement_action_Getter";
  action_Getter_(mthis) => action_Getter(mthis);

  static action_Setter(mthis, __arg_0) native "HTMLFormElement_action_Setter";
  action_Setter_(mthis, __arg_0) => action_Setter(mthis, __arg_0);

  static autocomplete_Getter(mthis) native "HTMLFormElement_autocomplete_Getter";
  autocomplete_Getter_(mthis) => autocomplete_Getter(mthis);

  static autocomplete_Setter(mthis, __arg_0) native "HTMLFormElement_autocomplete_Setter";
  autocomplete_Setter_(mthis, __arg_0) => autocomplete_Setter(mthis, __arg_0);

  static checkValidity_Callback_0(mthis) native "HTMLFormElement_checkValidity_Callback";
  checkValidity_Callback_0_(mthis) => checkValidity_Callback_0(mthis);

  static checkValidity_Callback_1(mthis, __arg_0) native "HTMLFormElement_checkValidity_Callback";
  checkValidity_Callback_1_(mthis, __arg_0) => checkValidity_Callback_1(mthis, __arg_0);

  static checkValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLFormElement_checkValidity_Callback";
  checkValidity_Callback_2_(mthis, __arg_0, __arg_1) => checkValidity_Callback_2(mthis, __arg_0, __arg_1);

  static elements_Getter(mthis) native "HTMLFormElement_elements_Getter";
  elements_Getter_(mthis) => elements_Getter(mthis);

  static encoding_Getter(mthis) native "HTMLFormElement_encoding_Getter";
  encoding_Getter_(mthis) => encoding_Getter(mthis);

  static encoding_Setter(mthis, __arg_0) native "HTMLFormElement_encoding_Setter";
  encoding_Setter_(mthis, __arg_0) => encoding_Setter(mthis, __arg_0);

  static enctype_Getter(mthis) native "HTMLFormElement_enctype_Getter";
  enctype_Getter_(mthis) => enctype_Getter(mthis);

  static enctype_Setter(mthis, __arg_0) native "HTMLFormElement_enctype_Setter";
  enctype_Setter_(mthis, __arg_0) => enctype_Setter(mthis, __arg_0);

  static length_Getter(mthis) native "HTMLFormElement_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static method_Getter(mthis) native "HTMLFormElement_method_Getter";
  method_Getter_(mthis) => method_Getter(mthis);

  static method_Setter(mthis, __arg_0) native "HTMLFormElement_method_Setter";
  method_Setter_(mthis, __arg_0) => method_Setter(mthis, __arg_0);

  static name_Getter(mthis) native "HTMLFormElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLFormElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static noValidate_Getter(mthis) native "HTMLFormElement_noValidate_Getter";
  noValidate_Getter_(mthis) => noValidate_Getter(mthis);

  static noValidate_Setter(mthis, __arg_0) native "HTMLFormElement_noValidate_Setter";
  noValidate_Setter_(mthis, __arg_0) => noValidate_Setter(mthis, __arg_0);

  static requestAutocomplete_Callback_0(mthis) native "HTMLFormElement_requestAutocomplete_Callback";
  requestAutocomplete_Callback_0_(mthis) => requestAutocomplete_Callback_0(mthis);

  static requestAutocomplete_Callback_1(mthis, __arg_0) native "HTMLFormElement_requestAutocomplete_Callback";
  requestAutocomplete_Callback_1_(mthis, __arg_0) => requestAutocomplete_Callback_1(mthis, __arg_0);

  static requestAutocomplete_Callback_2(mthis, __arg_0, __arg_1) native "HTMLFormElement_requestAutocomplete_Callback";
  requestAutocomplete_Callback_2_(mthis, __arg_0, __arg_1) => requestAutocomplete_Callback_2(mthis, __arg_0, __arg_1);

  static reset_Callback_0(mthis) native "HTMLFormElement_reset_Callback";
  reset_Callback_0_(mthis) => reset_Callback_0(mthis);

  static reset_Callback_1(mthis, __arg_0) native "HTMLFormElement_reset_Callback";
  reset_Callback_1_(mthis, __arg_0) => reset_Callback_1(mthis, __arg_0);

  static reset_Callback_2(mthis, __arg_0, __arg_1) native "HTMLFormElement_reset_Callback";
  reset_Callback_2_(mthis, __arg_0, __arg_1) => reset_Callback_2(mthis, __arg_0, __arg_1);

  static submit_Callback_0(mthis) native "HTMLFormElement_submit_Callback";
  submit_Callback_0_(mthis) => submit_Callback_0(mthis);

  static submit_Callback_1(mthis, __arg_0) native "HTMLFormElement_submit_Callback";
  submit_Callback_1_(mthis, __arg_0) => submit_Callback_1(mthis, __arg_0);

  static submit_Callback_2(mthis, __arg_0, __arg_1) native "HTMLFormElement_submit_Callback";
  submit_Callback_2_(mthis, __arg_0, __arg_1) => submit_Callback_2(mthis, __arg_0, __arg_1);

  static target_Getter(mthis) native "HTMLFormElement_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

  static target_Setter(mthis, __arg_0) native "HTMLFormElement_target_Setter";
  target_Setter_(mthis, __arg_0) => target_Setter(mthis, __arg_0);

}

class BlinkHTMLFrameElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFrameElement();

}

class BlinkHTMLFrameSetElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLFrameSetElement();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLFrameSetElement___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

}

class BlinkHTMLHRElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHRElement();

  static color_Getter(mthis) native "HTMLHRElement_color_Getter";
  color_Getter_(mthis) => color_Getter(mthis);

  static color_Setter(mthis, __arg_0) native "HTMLHRElement_color_Setter";
  color_Setter_(mthis, __arg_0) => color_Setter(mthis, __arg_0);

}

class BlinkHTMLHeadElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHeadElement();

}

class BlinkHTMLHeadingElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHeadingElement();

}

class BlinkHTMLHtmlElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLHtmlElement();

}

class BlinkHTMLIFrameElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLIFrameElement();

  static allowFullscreen_Getter(mthis) native "HTMLIFrameElement_allowFullscreen_Getter";
  allowFullscreen_Getter_(mthis) => allowFullscreen_Getter(mthis);

  static allowFullscreen_Setter(mthis, __arg_0) native "HTMLIFrameElement_allowFullscreen_Setter";
  allowFullscreen_Setter_(mthis, __arg_0) => allowFullscreen_Setter(mthis, __arg_0);

  static contentDocument_Getter(mthis) native "HTMLIFrameElement_contentDocument_Getter";
  contentDocument_Getter_(mthis) => contentDocument_Getter(mthis);

  static contentWindow_Getter(mthis) native "HTMLIFrameElement_contentWindow_Getter";
  contentWindow_Getter_(mthis) => contentWindow_Getter(mthis);

  static getSVGDocument_Callback_0(mthis) native "HTMLIFrameElement_getSVGDocument_Callback";
  getSVGDocument_Callback_0_(mthis) => getSVGDocument_Callback_0(mthis);

  static getSVGDocument_Callback_1(mthis, __arg_0) native "HTMLIFrameElement_getSVGDocument_Callback";
  getSVGDocument_Callback_1_(mthis, __arg_0) => getSVGDocument_Callback_1(mthis, __arg_0);

  static getSVGDocument_Callback_2(mthis, __arg_0, __arg_1) native "HTMLIFrameElement_getSVGDocument_Callback";
  getSVGDocument_Callback_2_(mthis, __arg_0, __arg_1) => getSVGDocument_Callback_2(mthis, __arg_0, __arg_1);

  static height_Getter(mthis) native "HTMLIFrameElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "HTMLIFrameElement_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static integrity_Getter(mthis) native "HTMLIFrameElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLIFrameElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static name_Getter(mthis) native "HTMLIFrameElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLIFrameElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static sandbox_Getter(mthis) native "HTMLIFrameElement_sandbox_Getter";
  sandbox_Getter_(mthis) => sandbox_Getter(mthis);

  static sandbox_Setter(mthis, __arg_0) native "HTMLIFrameElement_sandbox_Setter";
  sandbox_Setter_(mthis, __arg_0) => sandbox_Setter(mthis, __arg_0);

  static src_Getter(mthis) native "HTMLIFrameElement_src_Getter";
  src_Getter_(mthis) => src_Getter(mthis);

  static src_Setter(mthis, __arg_0) native "HTMLIFrameElement_src_Setter";
  src_Setter_(mthis, __arg_0) => src_Setter(mthis, __arg_0);

  static srcdoc_Getter(mthis) native "HTMLIFrameElement_srcdoc_Getter";
  srcdoc_Getter_(mthis) => srcdoc_Getter(mthis);

  static srcdoc_Setter(mthis, __arg_0) native "HTMLIFrameElement_srcdoc_Setter";
  srcdoc_Setter_(mthis, __arg_0) => srcdoc_Setter(mthis, __arg_0);

  static width_Getter(mthis) native "HTMLIFrameElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "HTMLIFrameElement_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

}

class BlinkHTMLImageElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLImageElement();

  static alt_Getter(mthis) native "HTMLImageElement_alt_Getter";
  alt_Getter_(mthis) => alt_Getter(mthis);

  static alt_Setter(mthis, __arg_0) native "HTMLImageElement_alt_Setter";
  alt_Setter_(mthis, __arg_0) => alt_Setter(mthis, __arg_0);

  static border_Getter(mthis) native "HTMLImageElement_border_Getter";
  border_Getter_(mthis) => border_Getter(mthis);

  static border_Setter(mthis, __arg_0) native "HTMLImageElement_border_Setter";
  border_Setter_(mthis, __arg_0) => border_Setter(mthis, __arg_0);

  static complete_Getter(mthis) native "HTMLImageElement_complete_Getter";
  complete_Getter_(mthis) => complete_Getter(mthis);

  static constructorCallback_0() native "HTMLImageElement_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "HTMLImageElement_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "HTMLImageElement_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "HTMLImageElement_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "HTMLImageElement_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static crossOrigin_Getter(mthis) native "HTMLImageElement_crossOrigin_Getter";
  crossOrigin_Getter_(mthis) => crossOrigin_Getter(mthis);

  static crossOrigin_Setter(mthis, __arg_0) native "HTMLImageElement_crossOrigin_Setter";
  crossOrigin_Setter_(mthis, __arg_0) => crossOrigin_Setter(mthis, __arg_0);

  static currentSrc_Getter(mthis) native "HTMLImageElement_currentSrc_Getter";
  currentSrc_Getter_(mthis) => currentSrc_Getter(mthis);

  static height_Getter(mthis) native "HTMLImageElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "HTMLImageElement_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static integrity_Getter(mthis) native "HTMLImageElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLImageElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static isMap_Getter(mthis) native "HTMLImageElement_isMap_Getter";
  isMap_Getter_(mthis) => isMap_Getter(mthis);

  static isMap_Setter(mthis, __arg_0) native "HTMLImageElement_isMap_Setter";
  isMap_Setter_(mthis, __arg_0) => isMap_Setter(mthis, __arg_0);

  static lowsrc_Getter(mthis) native "HTMLImageElement_lowsrc_Getter";
  lowsrc_Getter_(mthis) => lowsrc_Getter(mthis);

  static lowsrc_Setter(mthis, __arg_0) native "HTMLImageElement_lowsrc_Setter";
  lowsrc_Setter_(mthis, __arg_0) => lowsrc_Setter(mthis, __arg_0);

  static naturalHeight_Getter(mthis) native "HTMLImageElement_naturalHeight_Getter";
  naturalHeight_Getter_(mthis) => naturalHeight_Getter(mthis);

  static naturalWidth_Getter(mthis) native "HTMLImageElement_naturalWidth_Getter";
  naturalWidth_Getter_(mthis) => naturalWidth_Getter(mthis);

  static sizes_Getter(mthis) native "HTMLImageElement_sizes_Getter";
  sizes_Getter_(mthis) => sizes_Getter(mthis);

  static sizes_Setter(mthis, __arg_0) native "HTMLImageElement_sizes_Setter";
  sizes_Setter_(mthis, __arg_0) => sizes_Setter(mthis, __arg_0);

  static src_Getter(mthis) native "HTMLImageElement_src_Getter";
  src_Getter_(mthis) => src_Getter(mthis);

  static src_Setter(mthis, __arg_0) native "HTMLImageElement_src_Setter";
  src_Setter_(mthis, __arg_0) => src_Setter(mthis, __arg_0);

  static srcset_Getter(mthis) native "HTMLImageElement_srcset_Getter";
  srcset_Getter_(mthis) => srcset_Getter(mthis);

  static srcset_Setter(mthis, __arg_0) native "HTMLImageElement_srcset_Setter";
  srcset_Setter_(mthis, __arg_0) => srcset_Setter(mthis, __arg_0);

  static useMap_Getter(mthis) native "HTMLImageElement_useMap_Getter";
  useMap_Getter_(mthis) => useMap_Getter(mthis);

  static useMap_Setter(mthis, __arg_0) native "HTMLImageElement_useMap_Setter";
  useMap_Setter_(mthis, __arg_0) => useMap_Setter(mthis, __arg_0);

  static width_Getter(mthis) native "HTMLImageElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "HTMLImageElement_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "HTMLImageElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "HTMLImageElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkHTMLInputElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLInputElement();

  static accept_Getter(mthis) native "HTMLInputElement_accept_Getter";
  accept_Getter_(mthis) => accept_Getter(mthis);

  static accept_Setter(mthis, __arg_0) native "HTMLInputElement_accept_Setter";
  accept_Setter_(mthis, __arg_0) => accept_Setter(mthis, __arg_0);

  static alt_Getter(mthis) native "HTMLInputElement_alt_Getter";
  alt_Getter_(mthis) => alt_Getter(mthis);

  static alt_Setter(mthis, __arg_0) native "HTMLInputElement_alt_Setter";
  alt_Setter_(mthis, __arg_0) => alt_Setter(mthis, __arg_0);

  static autocomplete_Getter(mthis) native "HTMLInputElement_autocomplete_Getter";
  autocomplete_Getter_(mthis) => autocomplete_Getter(mthis);

  static autocomplete_Setter(mthis, __arg_0) native "HTMLInputElement_autocomplete_Setter";
  autocomplete_Setter_(mthis, __arg_0) => autocomplete_Setter(mthis, __arg_0);

  static autofocus_Getter(mthis) native "HTMLInputElement_autofocus_Getter";
  autofocus_Getter_(mthis) => autofocus_Getter(mthis);

  static autofocus_Setter(mthis, __arg_0) native "HTMLInputElement_autofocus_Setter";
  autofocus_Setter_(mthis, __arg_0) => autofocus_Setter(mthis, __arg_0);

  static capture_Getter(mthis) native "HTMLInputElement_capture_Getter";
  capture_Getter_(mthis) => capture_Getter(mthis);

  static capture_Setter(mthis, __arg_0) native "HTMLInputElement_capture_Setter";
  capture_Setter_(mthis, __arg_0) => capture_Setter(mthis, __arg_0);

  static checkValidity_Callback_0(mthis) native "HTMLInputElement_checkValidity_Callback";
  checkValidity_Callback_0_(mthis) => checkValidity_Callback_0(mthis);

  static checkValidity_Callback_1(mthis, __arg_0) native "HTMLInputElement_checkValidity_Callback";
  checkValidity_Callback_1_(mthis, __arg_0) => checkValidity_Callback_1(mthis, __arg_0);

  static checkValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLInputElement_checkValidity_Callback";
  checkValidity_Callback_2_(mthis, __arg_0, __arg_1) => checkValidity_Callback_2(mthis, __arg_0, __arg_1);

  static checked_Getter(mthis) native "HTMLInputElement_checked_Getter";
  checked_Getter_(mthis) => checked_Getter(mthis);

  static checked_Setter(mthis, __arg_0) native "HTMLInputElement_checked_Setter";
  checked_Setter_(mthis, __arg_0) => checked_Setter(mthis, __arg_0);

  static defaultChecked_Getter(mthis) native "HTMLInputElement_defaultChecked_Getter";
  defaultChecked_Getter_(mthis) => defaultChecked_Getter(mthis);

  static defaultChecked_Setter(mthis, __arg_0) native "HTMLInputElement_defaultChecked_Setter";
  defaultChecked_Setter_(mthis, __arg_0) => defaultChecked_Setter(mthis, __arg_0);

  static defaultValue_Getter(mthis) native "HTMLInputElement_defaultValue_Getter";
  defaultValue_Getter_(mthis) => defaultValue_Getter(mthis);

  static defaultValue_Setter(mthis, __arg_0) native "HTMLInputElement_defaultValue_Setter";
  defaultValue_Setter_(mthis, __arg_0) => defaultValue_Setter(mthis, __arg_0);

  static dirName_Getter(mthis) native "HTMLInputElement_dirName_Getter";
  dirName_Getter_(mthis) => dirName_Getter(mthis);

  static dirName_Setter(mthis, __arg_0) native "HTMLInputElement_dirName_Setter";
  dirName_Setter_(mthis, __arg_0) => dirName_Setter(mthis, __arg_0);

  static disabled_Getter(mthis) native "HTMLInputElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLInputElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static files_Getter(mthis) native "HTMLInputElement_files_Getter";
  files_Getter_(mthis) => files_Getter(mthis);

  static files_Setter(mthis, __arg_0) native "HTMLInputElement_files_Setter";
  files_Setter_(mthis, __arg_0) => files_Setter(mthis, __arg_0);

  static formAction_Getter(mthis) native "HTMLInputElement_formAction_Getter";
  formAction_Getter_(mthis) => formAction_Getter(mthis);

  static formAction_Setter(mthis, __arg_0) native "HTMLInputElement_formAction_Setter";
  formAction_Setter_(mthis, __arg_0) => formAction_Setter(mthis, __arg_0);

  static formEnctype_Getter(mthis) native "HTMLInputElement_formEnctype_Getter";
  formEnctype_Getter_(mthis) => formEnctype_Getter(mthis);

  static formEnctype_Setter(mthis, __arg_0) native "HTMLInputElement_formEnctype_Setter";
  formEnctype_Setter_(mthis, __arg_0) => formEnctype_Setter(mthis, __arg_0);

  static formMethod_Getter(mthis) native "HTMLInputElement_formMethod_Getter";
  formMethod_Getter_(mthis) => formMethod_Getter(mthis);

  static formMethod_Setter(mthis, __arg_0) native "HTMLInputElement_formMethod_Setter";
  formMethod_Setter_(mthis, __arg_0) => formMethod_Setter(mthis, __arg_0);

  static formNoValidate_Getter(mthis) native "HTMLInputElement_formNoValidate_Getter";
  formNoValidate_Getter_(mthis) => formNoValidate_Getter(mthis);

  static formNoValidate_Setter(mthis, __arg_0) native "HTMLInputElement_formNoValidate_Setter";
  formNoValidate_Setter_(mthis, __arg_0) => formNoValidate_Setter(mthis, __arg_0);

  static formTarget_Getter(mthis) native "HTMLInputElement_formTarget_Getter";
  formTarget_Getter_(mthis) => formTarget_Getter(mthis);

  static formTarget_Setter(mthis, __arg_0) native "HTMLInputElement_formTarget_Setter";
  formTarget_Setter_(mthis, __arg_0) => formTarget_Setter(mthis, __arg_0);

  static form_Getter(mthis) native "HTMLInputElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static height_Getter(mthis) native "HTMLInputElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "HTMLInputElement_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static incremental_Getter(mthis) native "HTMLInputElement_incremental_Getter";
  incremental_Getter_(mthis) => incremental_Getter(mthis);

  static incremental_Setter(mthis, __arg_0) native "HTMLInputElement_incremental_Setter";
  incremental_Setter_(mthis, __arg_0) => incremental_Setter(mthis, __arg_0);

  static indeterminate_Getter(mthis) native "HTMLInputElement_indeterminate_Getter";
  indeterminate_Getter_(mthis) => indeterminate_Getter(mthis);

  static indeterminate_Setter(mthis, __arg_0) native "HTMLInputElement_indeterminate_Setter";
  indeterminate_Setter_(mthis, __arg_0) => indeterminate_Setter(mthis, __arg_0);

  static inputMode_Getter(mthis) native "HTMLInputElement_inputMode_Getter";
  inputMode_Getter_(mthis) => inputMode_Getter(mthis);

  static inputMode_Setter(mthis, __arg_0) native "HTMLInputElement_inputMode_Setter";
  inputMode_Setter_(mthis, __arg_0) => inputMode_Setter(mthis, __arg_0);

  static labels_Getter(mthis) native "HTMLInputElement_labels_Getter";
  labels_Getter_(mthis) => labels_Getter(mthis);

  static list_Getter(mthis) native "HTMLInputElement_list_Getter";
  list_Getter_(mthis) => list_Getter(mthis);

  static maxLength_Getter(mthis) native "HTMLInputElement_maxLength_Getter";
  maxLength_Getter_(mthis) => maxLength_Getter(mthis);

  static maxLength_Setter(mthis, __arg_0) native "HTMLInputElement_maxLength_Setter";
  maxLength_Setter_(mthis, __arg_0) => maxLength_Setter(mthis, __arg_0);

  static max_Getter(mthis) native "HTMLInputElement_max_Getter";
  max_Getter_(mthis) => max_Getter(mthis);

  static max_Setter(mthis, __arg_0) native "HTMLInputElement_max_Setter";
  max_Setter_(mthis, __arg_0) => max_Setter(mthis, __arg_0);

  static min_Getter(mthis) native "HTMLInputElement_min_Getter";
  min_Getter_(mthis) => min_Getter(mthis);

  static min_Setter(mthis, __arg_0) native "HTMLInputElement_min_Setter";
  min_Setter_(mthis, __arg_0) => min_Setter(mthis, __arg_0);

  static multiple_Getter(mthis) native "HTMLInputElement_multiple_Getter";
  multiple_Getter_(mthis) => multiple_Getter(mthis);

  static multiple_Setter(mthis, __arg_0) native "HTMLInputElement_multiple_Setter";
  multiple_Setter_(mthis, __arg_0) => multiple_Setter(mthis, __arg_0);

  static name_Getter(mthis) native "HTMLInputElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLInputElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static pattern_Getter(mthis) native "HTMLInputElement_pattern_Getter";
  pattern_Getter_(mthis) => pattern_Getter(mthis);

  static pattern_Setter(mthis, __arg_0) native "HTMLInputElement_pattern_Setter";
  pattern_Setter_(mthis, __arg_0) => pattern_Setter(mthis, __arg_0);

  static placeholder_Getter(mthis) native "HTMLInputElement_placeholder_Getter";
  placeholder_Getter_(mthis) => placeholder_Getter(mthis);

  static placeholder_Setter(mthis, __arg_0) native "HTMLInputElement_placeholder_Setter";
  placeholder_Setter_(mthis, __arg_0) => placeholder_Setter(mthis, __arg_0);

  static readOnly_Getter(mthis) native "HTMLInputElement_readOnly_Getter";
  readOnly_Getter_(mthis) => readOnly_Getter(mthis);

  static readOnly_Setter(mthis, __arg_0) native "HTMLInputElement_readOnly_Setter";
  readOnly_Setter_(mthis, __arg_0) => readOnly_Setter(mthis, __arg_0);

  static required_Getter(mthis) native "HTMLInputElement_required_Getter";
  required_Getter_(mthis) => required_Getter(mthis);

  static required_Setter(mthis, __arg_0) native "HTMLInputElement_required_Setter";
  required_Setter_(mthis, __arg_0) => required_Setter(mthis, __arg_0);

  static select_Callback_0(mthis) native "HTMLInputElement_select_Callback";
  select_Callback_0_(mthis) => select_Callback_0(mthis);

  static select_Callback_1(mthis, __arg_0) native "HTMLInputElement_select_Callback";
  select_Callback_1_(mthis, __arg_0) => select_Callback_1(mthis, __arg_0);

  static select_Callback_2(mthis, __arg_0, __arg_1) native "HTMLInputElement_select_Callback";
  select_Callback_2_(mthis, __arg_0, __arg_1) => select_Callback_2(mthis, __arg_0, __arg_1);

  static selectionDirection_Getter(mthis) native "HTMLInputElement_selectionDirection_Getter";
  selectionDirection_Getter_(mthis) => selectionDirection_Getter(mthis);

  static selectionDirection_Setter(mthis, __arg_0) native "HTMLInputElement_selectionDirection_Setter";
  selectionDirection_Setter_(mthis, __arg_0) => selectionDirection_Setter(mthis, __arg_0);

  static selectionEnd_Getter(mthis) native "HTMLInputElement_selectionEnd_Getter";
  selectionEnd_Getter_(mthis) => selectionEnd_Getter(mthis);

  static selectionEnd_Setter(mthis, __arg_0) native "HTMLInputElement_selectionEnd_Setter";
  selectionEnd_Setter_(mthis, __arg_0) => selectionEnd_Setter(mthis, __arg_0);

  static selectionStart_Getter(mthis) native "HTMLInputElement_selectionStart_Getter";
  selectionStart_Getter_(mthis) => selectionStart_Getter(mthis);

  static selectionStart_Setter(mthis, __arg_0) native "HTMLInputElement_selectionStart_Setter";
  selectionStart_Setter_(mthis, __arg_0) => selectionStart_Setter(mthis, __arg_0);

  static setCustomValidity_Callback_0(mthis) native "HTMLInputElement_setCustomValidity_Callback";
  setCustomValidity_Callback_0_(mthis) => setCustomValidity_Callback_0(mthis);

  static setCustomValidity_Callback_1(mthis, __arg_0) native "HTMLInputElement_setCustomValidity_Callback";
  setCustomValidity_Callback_1_(mthis, __arg_0) => setCustomValidity_Callback_1(mthis, __arg_0);

  static setCustomValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLInputElement_setCustomValidity_Callback";
  setCustomValidity_Callback_2_(mthis, __arg_0, __arg_1) => setCustomValidity_Callback_2(mthis, __arg_0, __arg_1);

  static setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLInputElement_setCustomValidity_Callback";
  setCustomValidity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setRangeText_Callback_0(mthis) native "HTMLInputElement_setRangeText_Callback";
  setRangeText_Callback_0_(mthis) => setRangeText_Callback_0(mthis);

  static setRangeText_Callback_1(mthis, __arg_0) native "HTMLInputElement_setRangeText_Callback";
  setRangeText_Callback_1_(mthis, __arg_0) => setRangeText_Callback_1(mthis, __arg_0);

  static setRangeText_Callback_2(mthis, __arg_0, __arg_1) native "HTMLInputElement_setRangeText_Callback";
  setRangeText_Callback_2_(mthis, __arg_0, __arg_1) => setRangeText_Callback_2(mthis, __arg_0, __arg_1);

  static setRangeText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLInputElement_setRangeText_Callback";
  setRangeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setRangeText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setRangeText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLInputElement_setRangeText_Callback";
  setRangeText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setRangeText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setRangeText_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "HTMLInputElement_setRangeText_Callback";
  setRangeText_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setRangeText_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setRangeText_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "HTMLInputElement_setRangeText_Callback";
  setRangeText_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => setRangeText_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static setSelectionRange_Callback_0(mthis) native "HTMLInputElement_setSelectionRange_Callback";
  setSelectionRange_Callback_0_(mthis) => setSelectionRange_Callback_0(mthis);

  static setSelectionRange_Callback_1(mthis, __arg_0) native "HTMLInputElement_setSelectionRange_Callback";
  setSelectionRange_Callback_1_(mthis, __arg_0) => setSelectionRange_Callback_1(mthis, __arg_0);

  static setSelectionRange_Callback_2(mthis, __arg_0, __arg_1) native "HTMLInputElement_setSelectionRange_Callback";
  setSelectionRange_Callback_2_(mthis, __arg_0, __arg_1) => setSelectionRange_Callback_2(mthis, __arg_0, __arg_1);

  static setSelectionRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLInputElement_setSelectionRange_Callback";
  setSelectionRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setSelectionRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setSelectionRange_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLInputElement_setSelectionRange_Callback";
  setSelectionRange_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setSelectionRange_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setSelectionRange_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "HTMLInputElement_setSelectionRange_Callback";
  setSelectionRange_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setSelectionRange_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static size_Getter(mthis) native "HTMLInputElement_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

  static size_Setter(mthis, __arg_0) native "HTMLInputElement_size_Setter";
  size_Setter_(mthis, __arg_0) => size_Setter(mthis, __arg_0);

  static src_Getter(mthis) native "HTMLInputElement_src_Getter";
  src_Getter_(mthis) => src_Getter(mthis);

  static src_Setter(mthis, __arg_0) native "HTMLInputElement_src_Setter";
  src_Setter_(mthis, __arg_0) => src_Setter(mthis, __arg_0);

  static stepDown_Callback_0(mthis) native "HTMLInputElement_stepDown_Callback";
  stepDown_Callback_0_(mthis) => stepDown_Callback_0(mthis);

  static stepDown_Callback_1(mthis, __arg_0) native "HTMLInputElement_stepDown_Callback";
  stepDown_Callback_1_(mthis, __arg_0) => stepDown_Callback_1(mthis, __arg_0);

  static stepDown_Callback_2(mthis, __arg_0, __arg_1) native "HTMLInputElement_stepDown_Callback";
  stepDown_Callback_2_(mthis, __arg_0, __arg_1) => stepDown_Callback_2(mthis, __arg_0, __arg_1);

  static stepDown_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLInputElement_stepDown_Callback";
  stepDown_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stepDown_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static stepUp_Callback_0(mthis) native "HTMLInputElement_stepUp_Callback";
  stepUp_Callback_0_(mthis) => stepUp_Callback_0(mthis);

  static stepUp_Callback_1(mthis, __arg_0) native "HTMLInputElement_stepUp_Callback";
  stepUp_Callback_1_(mthis, __arg_0) => stepUp_Callback_1(mthis, __arg_0);

  static stepUp_Callback_2(mthis, __arg_0, __arg_1) native "HTMLInputElement_stepUp_Callback";
  stepUp_Callback_2_(mthis, __arg_0, __arg_1) => stepUp_Callback_2(mthis, __arg_0, __arg_1);

  static stepUp_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLInputElement_stepUp_Callback";
  stepUp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stepUp_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static step_Getter(mthis) native "HTMLInputElement_step_Getter";
  step_Getter_(mthis) => step_Getter(mthis);

  static step_Setter(mthis, __arg_0) native "HTMLInputElement_step_Setter";
  step_Setter_(mthis, __arg_0) => step_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "HTMLInputElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLInputElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

  static useMap_Getter(mthis) native "HTMLInputElement_useMap_Getter";
  useMap_Getter_(mthis) => useMap_Getter(mthis);

  static useMap_Setter(mthis, __arg_0) native "HTMLInputElement_useMap_Setter";
  useMap_Setter_(mthis, __arg_0) => useMap_Setter(mthis, __arg_0);

  static validationMessage_Getter(mthis) native "HTMLInputElement_validationMessage_Getter";
  validationMessage_Getter_(mthis) => validationMessage_Getter(mthis);

  static validity_Getter(mthis) native "HTMLInputElement_validity_Getter";
  validity_Getter_(mthis) => validity_Getter(mthis);

  static valueAsDate_Getter(mthis) native "HTMLInputElement_valueAsDate_Getter";
  valueAsDate_Getter_(mthis) => valueAsDate_Getter(mthis);

  static valueAsDate_Setter(mthis, __arg_0) native "HTMLInputElement_valueAsDate_Setter";
  valueAsDate_Setter_(mthis, __arg_0) => valueAsDate_Setter(mthis, __arg_0);

  static valueAsNumber_Getter(mthis) native "HTMLInputElement_valueAsNumber_Getter";
  valueAsNumber_Getter_(mthis) => valueAsNumber_Getter(mthis);

  static valueAsNumber_Setter(mthis, __arg_0) native "HTMLInputElement_valueAsNumber_Setter";
  valueAsNumber_Setter_(mthis, __arg_0) => valueAsNumber_Setter(mthis, __arg_0);

  static value_Getter(mthis) native "HTMLInputElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLInputElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

  static webkitEntries_Getter(mthis) native "HTMLInputElement_webkitEntries_Getter";
  webkitEntries_Getter_(mthis) => webkitEntries_Getter(mthis);

  static webkitdirectory_Getter(mthis) native "HTMLInputElement_webkitdirectory_Getter";
  webkitdirectory_Getter_(mthis) => webkitdirectory_Getter(mthis);

  static webkitdirectory_Setter(mthis, __arg_0) native "HTMLInputElement_webkitdirectory_Setter";
  webkitdirectory_Setter_(mthis, __arg_0) => webkitdirectory_Setter(mthis, __arg_0);

  static width_Getter(mthis) native "HTMLInputElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "HTMLInputElement_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

  static willValidate_Getter(mthis) native "HTMLInputElement_willValidate_Getter";
  willValidate_Getter_(mthis) => willValidate_Getter(mthis);

}

class BlinkHTMLKeygenElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLKeygenElement();

  static autofocus_Getter(mthis) native "HTMLKeygenElement_autofocus_Getter";
  autofocus_Getter_(mthis) => autofocus_Getter(mthis);

  static autofocus_Setter(mthis, __arg_0) native "HTMLKeygenElement_autofocus_Setter";
  autofocus_Setter_(mthis, __arg_0) => autofocus_Setter(mthis, __arg_0);

  static challenge_Getter(mthis) native "HTMLKeygenElement_challenge_Getter";
  challenge_Getter_(mthis) => challenge_Getter(mthis);

  static challenge_Setter(mthis, __arg_0) native "HTMLKeygenElement_challenge_Setter";
  challenge_Setter_(mthis, __arg_0) => challenge_Setter(mthis, __arg_0);

  static checkValidity_Callback_0(mthis) native "HTMLKeygenElement_checkValidity_Callback";
  checkValidity_Callback_0_(mthis) => checkValidity_Callback_0(mthis);

  static checkValidity_Callback_1(mthis, __arg_0) native "HTMLKeygenElement_checkValidity_Callback";
  checkValidity_Callback_1_(mthis, __arg_0) => checkValidity_Callback_1(mthis, __arg_0);

  static checkValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLKeygenElement_checkValidity_Callback";
  checkValidity_Callback_2_(mthis, __arg_0, __arg_1) => checkValidity_Callback_2(mthis, __arg_0, __arg_1);

  static disabled_Getter(mthis) native "HTMLKeygenElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLKeygenElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static form_Getter(mthis) native "HTMLKeygenElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static keytype_Getter(mthis) native "HTMLKeygenElement_keytype_Getter";
  keytype_Getter_(mthis) => keytype_Getter(mthis);

  static keytype_Setter(mthis, __arg_0) native "HTMLKeygenElement_keytype_Setter";
  keytype_Setter_(mthis, __arg_0) => keytype_Setter(mthis, __arg_0);

  static labels_Getter(mthis) native "HTMLKeygenElement_labels_Getter";
  labels_Getter_(mthis) => labels_Getter(mthis);

  static name_Getter(mthis) native "HTMLKeygenElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLKeygenElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static setCustomValidity_Callback_0(mthis) native "HTMLKeygenElement_setCustomValidity_Callback";
  setCustomValidity_Callback_0_(mthis) => setCustomValidity_Callback_0(mthis);

  static setCustomValidity_Callback_1(mthis, __arg_0) native "HTMLKeygenElement_setCustomValidity_Callback";
  setCustomValidity_Callback_1_(mthis, __arg_0) => setCustomValidity_Callback_1(mthis, __arg_0);

  static setCustomValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLKeygenElement_setCustomValidity_Callback";
  setCustomValidity_Callback_2_(mthis, __arg_0, __arg_1) => setCustomValidity_Callback_2(mthis, __arg_0, __arg_1);

  static setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLKeygenElement_setCustomValidity_Callback";
  setCustomValidity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static type_Getter(mthis) native "HTMLKeygenElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static validationMessage_Getter(mthis) native "HTMLKeygenElement_validationMessage_Getter";
  validationMessage_Getter_(mthis) => validationMessage_Getter(mthis);

  static validity_Getter(mthis) native "HTMLKeygenElement_validity_Getter";
  validity_Getter_(mthis) => validity_Getter(mthis);

  static willValidate_Getter(mthis) native "HTMLKeygenElement_willValidate_Getter";
  willValidate_Getter_(mthis) => willValidate_Getter(mthis);

}

class BlinkHTMLLIElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLIElement();

  static type_Getter(mthis) native "HTMLLIElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLLIElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

  static value_Getter(mthis) native "HTMLLIElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLLIElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkHTMLLabelElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLabelElement();

  static control_Getter(mthis) native "HTMLLabelElement_control_Getter";
  control_Getter_(mthis) => control_Getter(mthis);

  static form_Getter(mthis) native "HTMLLabelElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static htmlFor_Getter(mthis) native "HTMLLabelElement_htmlFor_Getter";
  htmlFor_Getter_(mthis) => htmlFor_Getter(mthis);

  static htmlFor_Setter(mthis, __arg_0) native "HTMLLabelElement_htmlFor_Setter";
  htmlFor_Setter_(mthis, __arg_0) => htmlFor_Setter(mthis, __arg_0);

}

class BlinkHTMLLegendElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLegendElement();

  static form_Getter(mthis) native "HTMLLegendElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

}

class BlinkHTMLLinkElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLLinkElement();

  static crossOrigin_Getter(mthis) native "HTMLLinkElement_crossOrigin_Getter";
  crossOrigin_Getter_(mthis) => crossOrigin_Getter(mthis);

  static crossOrigin_Setter(mthis, __arg_0) native "HTMLLinkElement_crossOrigin_Setter";
  crossOrigin_Setter_(mthis, __arg_0) => crossOrigin_Setter(mthis, __arg_0);

  static disabled_Getter(mthis) native "HTMLLinkElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLLinkElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static href_Getter(mthis) native "HTMLLinkElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static href_Setter(mthis, __arg_0) native "HTMLLinkElement_href_Setter";
  href_Setter_(mthis, __arg_0) => href_Setter(mthis, __arg_0);

  static hreflang_Getter(mthis) native "HTMLLinkElement_hreflang_Getter";
  hreflang_Getter_(mthis) => hreflang_Getter(mthis);

  static hreflang_Setter(mthis, __arg_0) native "HTMLLinkElement_hreflang_Setter";
  hreflang_Setter_(mthis, __arg_0) => hreflang_Setter(mthis, __arg_0);

  static import_Getter(mthis) native "HTMLLinkElement_import_Getter";
  import_Getter_(mthis) => import_Getter(mthis);

  static integrity_Getter(mthis) native "HTMLLinkElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLLinkElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static media_Getter(mthis) native "HTMLLinkElement_media_Getter";
  media_Getter_(mthis) => media_Getter(mthis);

  static media_Setter(mthis, __arg_0) native "HTMLLinkElement_media_Setter";
  media_Setter_(mthis, __arg_0) => media_Setter(mthis, __arg_0);

  static rel_Getter(mthis) native "HTMLLinkElement_rel_Getter";
  rel_Getter_(mthis) => rel_Getter(mthis);

  static rel_Setter(mthis, __arg_0) native "HTMLLinkElement_rel_Setter";
  rel_Setter_(mthis, __arg_0) => rel_Setter(mthis, __arg_0);

  static sheet_Getter(mthis) native "HTMLLinkElement_sheet_Getter";
  sheet_Getter_(mthis) => sheet_Getter(mthis);

  static sizes_Getter(mthis) native "HTMLLinkElement_sizes_Getter";
  sizes_Getter_(mthis) => sizes_Getter(mthis);

  static sizes_Setter(mthis, __arg_0) native "HTMLLinkElement_sizes_Setter";
  sizes_Setter_(mthis, __arg_0) => sizes_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "HTMLLinkElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLLinkElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkHTMLMapElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMapElement();

  static areas_Getter(mthis) native "HTMLMapElement_areas_Getter";
  areas_Getter_(mthis) => areas_Getter(mthis);

  static name_Getter(mthis) native "HTMLMapElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLMapElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

}

class BlinkHTMLMarqueeElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMarqueeElement();

}

class BlinkHTMLMediaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMediaElement();

  static addTextTrack_Callback_0(mthis) native "HTMLMediaElement_addTextTrack_Callback";
  addTextTrack_Callback_0_(mthis) => addTextTrack_Callback_0(mthis);

  static addTextTrack_Callback_1(mthis, __arg_0) native "HTMLMediaElement_addTextTrack_Callback";
  addTextTrack_Callback_1_(mthis, __arg_0) => addTextTrack_Callback_1(mthis, __arg_0);

  static addTextTrack_Callback_2(mthis, __arg_0, __arg_1) native "HTMLMediaElement_addTextTrack_Callback";
  addTextTrack_Callback_2_(mthis, __arg_0, __arg_1) => addTextTrack_Callback_2(mthis, __arg_0, __arg_1);

  static addTextTrack_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLMediaElement_addTextTrack_Callback";
  addTextTrack_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addTextTrack_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addTextTrack_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLMediaElement_addTextTrack_Callback";
  addTextTrack_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => addTextTrack_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static addTextTrack_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "HTMLMediaElement_addTextTrack_Callback";
  addTextTrack_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => addTextTrack_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static audioTracks_Getter(mthis) native "HTMLMediaElement_audioTracks_Getter";
  audioTracks_Getter_(mthis) => audioTracks_Getter(mthis);

  static autoplay_Getter(mthis) native "HTMLMediaElement_autoplay_Getter";
  autoplay_Getter_(mthis) => autoplay_Getter(mthis);

  static autoplay_Setter(mthis, __arg_0) native "HTMLMediaElement_autoplay_Setter";
  autoplay_Setter_(mthis, __arg_0) => autoplay_Setter(mthis, __arg_0);

  static buffered_Getter(mthis) native "HTMLMediaElement_buffered_Getter";
  buffered_Getter_(mthis) => buffered_Getter(mthis);

  static canPlayType_Callback_0(mthis) native "HTMLMediaElement_canPlayType_Callback";
  canPlayType_Callback_0_(mthis) => canPlayType_Callback_0(mthis);

  static canPlayType_Callback_1(mthis, __arg_0) native "HTMLMediaElement_canPlayType_Callback";
  canPlayType_Callback_1_(mthis, __arg_0) => canPlayType_Callback_1(mthis, __arg_0);

  static canPlayType_Callback_2(mthis, __arg_0, __arg_1) native "HTMLMediaElement_canPlayType_Callback";
  canPlayType_Callback_2_(mthis, __arg_0, __arg_1) => canPlayType_Callback_2(mthis, __arg_0, __arg_1);

  static canPlayType_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLMediaElement_canPlayType_Callback";
  canPlayType_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => canPlayType_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static canPlayType_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLMediaElement_canPlayType_Callback";
  canPlayType_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => canPlayType_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static controller_Getter(mthis) native "HTMLMediaElement_controller_Getter";
  controller_Getter_(mthis) => controller_Getter(mthis);

  static controller_Setter(mthis, __arg_0) native "HTMLMediaElement_controller_Setter";
  controller_Setter_(mthis, __arg_0) => controller_Setter(mthis, __arg_0);

  static controls_Getter(mthis) native "HTMLMediaElement_controls_Getter";
  controls_Getter_(mthis) => controls_Getter(mthis);

  static controls_Setter(mthis, __arg_0) native "HTMLMediaElement_controls_Setter";
  controls_Setter_(mthis, __arg_0) => controls_Setter(mthis, __arg_0);

  static crossOrigin_Getter(mthis) native "HTMLMediaElement_crossOrigin_Getter";
  crossOrigin_Getter_(mthis) => crossOrigin_Getter(mthis);

  static crossOrigin_Setter(mthis, __arg_0) native "HTMLMediaElement_crossOrigin_Setter";
  crossOrigin_Setter_(mthis, __arg_0) => crossOrigin_Setter(mthis, __arg_0);

  static currentSrc_Getter(mthis) native "HTMLMediaElement_currentSrc_Getter";
  currentSrc_Getter_(mthis) => currentSrc_Getter(mthis);

  static currentTime_Getter(mthis) native "HTMLMediaElement_currentTime_Getter";
  currentTime_Getter_(mthis) => currentTime_Getter(mthis);

  static currentTime_Setter(mthis, __arg_0) native "HTMLMediaElement_currentTime_Setter";
  currentTime_Setter_(mthis, __arg_0) => currentTime_Setter(mthis, __arg_0);

  static defaultMuted_Getter(mthis) native "HTMLMediaElement_defaultMuted_Getter";
  defaultMuted_Getter_(mthis) => defaultMuted_Getter(mthis);

  static defaultMuted_Setter(mthis, __arg_0) native "HTMLMediaElement_defaultMuted_Setter";
  defaultMuted_Setter_(mthis, __arg_0) => defaultMuted_Setter(mthis, __arg_0);

  static defaultPlaybackRate_Getter(mthis) native "HTMLMediaElement_defaultPlaybackRate_Getter";
  defaultPlaybackRate_Getter_(mthis) => defaultPlaybackRate_Getter(mthis);

  static defaultPlaybackRate_Setter(mthis, __arg_0) native "HTMLMediaElement_defaultPlaybackRate_Setter";
  defaultPlaybackRate_Setter_(mthis, __arg_0) => defaultPlaybackRate_Setter(mthis, __arg_0);

  static duration_Getter(mthis) native "HTMLMediaElement_duration_Getter";
  duration_Getter_(mthis) => duration_Getter(mthis);

  static ended_Getter(mthis) native "HTMLMediaElement_ended_Getter";
  ended_Getter_(mthis) => ended_Getter(mthis);

  static error_Getter(mthis) native "HTMLMediaElement_error_Getter";
  error_Getter_(mthis) => error_Getter(mthis);

  static integrity_Getter(mthis) native "HTMLMediaElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLMediaElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static load_Callback_0(mthis) native "HTMLMediaElement_load_Callback";
  load_Callback_0_(mthis) => load_Callback_0(mthis);

  static load_Callback_1(mthis, __arg_0) native "HTMLMediaElement_load_Callback";
  load_Callback_1_(mthis, __arg_0) => load_Callback_1(mthis, __arg_0);

  static load_Callback_2(mthis, __arg_0, __arg_1) native "HTMLMediaElement_load_Callback";
  load_Callback_2_(mthis, __arg_0, __arg_1) => load_Callback_2(mthis, __arg_0, __arg_1);

  static loop_Getter(mthis) native "HTMLMediaElement_loop_Getter";
  loop_Getter_(mthis) => loop_Getter(mthis);

  static loop_Setter(mthis, __arg_0) native "HTMLMediaElement_loop_Setter";
  loop_Setter_(mthis, __arg_0) => loop_Setter(mthis, __arg_0);

  static mediaGroup_Getter(mthis) native "HTMLMediaElement_mediaGroup_Getter";
  mediaGroup_Getter_(mthis) => mediaGroup_Getter(mthis);

  static mediaGroup_Setter(mthis, __arg_0) native "HTMLMediaElement_mediaGroup_Setter";
  mediaGroup_Setter_(mthis, __arg_0) => mediaGroup_Setter(mthis, __arg_0);

  static mediaKeys_Getter(mthis) native "HTMLMediaElement_mediaKeys_Getter";
  mediaKeys_Getter_(mthis) => mediaKeys_Getter(mthis);

  static muted_Getter(mthis) native "HTMLMediaElement_muted_Getter";
  muted_Getter_(mthis) => muted_Getter(mthis);

  static muted_Setter(mthis, __arg_0) native "HTMLMediaElement_muted_Setter";
  muted_Setter_(mthis, __arg_0) => muted_Setter(mthis, __arg_0);

  static networkState_Getter(mthis) native "HTMLMediaElement_networkState_Getter";
  networkState_Getter_(mthis) => networkState_Getter(mthis);

  static onneedkey_Getter(mthis) native "HTMLMediaElement_onneedkey_Getter";
  onneedkey_Getter_(mthis) => onneedkey_Getter(mthis);

  static onneedkey_Setter(mthis, __arg_0) native "HTMLMediaElement_onneedkey_Setter";
  onneedkey_Setter_(mthis, __arg_0) => onneedkey_Setter(mthis, __arg_0);

  static onwebkitkeyadded_Getter(mthis) native "HTMLMediaElement_onwebkitkeyadded_Getter";
  onwebkitkeyadded_Getter_(mthis) => onwebkitkeyadded_Getter(mthis);

  static onwebkitkeyadded_Setter(mthis, __arg_0) native "HTMLMediaElement_onwebkitkeyadded_Setter";
  onwebkitkeyadded_Setter_(mthis, __arg_0) => onwebkitkeyadded_Setter(mthis, __arg_0);

  static onwebkitkeyerror_Getter(mthis) native "HTMLMediaElement_onwebkitkeyerror_Getter";
  onwebkitkeyerror_Getter_(mthis) => onwebkitkeyerror_Getter(mthis);

  static onwebkitkeyerror_Setter(mthis, __arg_0) native "HTMLMediaElement_onwebkitkeyerror_Setter";
  onwebkitkeyerror_Setter_(mthis, __arg_0) => onwebkitkeyerror_Setter(mthis, __arg_0);

  static onwebkitkeymessage_Getter(mthis) native "HTMLMediaElement_onwebkitkeymessage_Getter";
  onwebkitkeymessage_Getter_(mthis) => onwebkitkeymessage_Getter(mthis);

  static onwebkitkeymessage_Setter(mthis, __arg_0) native "HTMLMediaElement_onwebkitkeymessage_Setter";
  onwebkitkeymessage_Setter_(mthis, __arg_0) => onwebkitkeymessage_Setter(mthis, __arg_0);

  static onwebkitneedkey_Getter(mthis) native "HTMLMediaElement_onwebkitneedkey_Getter";
  onwebkitneedkey_Getter_(mthis) => onwebkitneedkey_Getter(mthis);

  static onwebkitneedkey_Setter(mthis, __arg_0) native "HTMLMediaElement_onwebkitneedkey_Setter";
  onwebkitneedkey_Setter_(mthis, __arg_0) => onwebkitneedkey_Setter(mthis, __arg_0);

  static pause_Callback_0(mthis) native "HTMLMediaElement_pause_Callback";
  pause_Callback_0_(mthis) => pause_Callback_0(mthis);

  static pause_Callback_1(mthis, __arg_0) native "HTMLMediaElement_pause_Callback";
  pause_Callback_1_(mthis, __arg_0) => pause_Callback_1(mthis, __arg_0);

  static pause_Callback_2(mthis, __arg_0, __arg_1) native "HTMLMediaElement_pause_Callback";
  pause_Callback_2_(mthis, __arg_0, __arg_1) => pause_Callback_2(mthis, __arg_0, __arg_1);

  static paused_Getter(mthis) native "HTMLMediaElement_paused_Getter";
  paused_Getter_(mthis) => paused_Getter(mthis);

  static play_Callback_0(mthis) native "HTMLMediaElement_play_Callback";
  play_Callback_0_(mthis) => play_Callback_0(mthis);

  static play_Callback_1(mthis, __arg_0) native "HTMLMediaElement_play_Callback";
  play_Callback_1_(mthis, __arg_0) => play_Callback_1(mthis, __arg_0);

  static play_Callback_2(mthis, __arg_0, __arg_1) native "HTMLMediaElement_play_Callback";
  play_Callback_2_(mthis, __arg_0, __arg_1) => play_Callback_2(mthis, __arg_0, __arg_1);

  static playbackRate_Getter(mthis) native "HTMLMediaElement_playbackRate_Getter";
  playbackRate_Getter_(mthis) => playbackRate_Getter(mthis);

  static playbackRate_Setter(mthis, __arg_0) native "HTMLMediaElement_playbackRate_Setter";
  playbackRate_Setter_(mthis, __arg_0) => playbackRate_Setter(mthis, __arg_0);

  static played_Getter(mthis) native "HTMLMediaElement_played_Getter";
  played_Getter_(mthis) => played_Getter(mthis);

  static preload_Getter(mthis) native "HTMLMediaElement_preload_Getter";
  preload_Getter_(mthis) => preload_Getter(mthis);

  static preload_Setter(mthis, __arg_0) native "HTMLMediaElement_preload_Setter";
  preload_Setter_(mthis, __arg_0) => preload_Setter(mthis, __arg_0);

  static readyState_Getter(mthis) native "HTMLMediaElement_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static seekable_Getter(mthis) native "HTMLMediaElement_seekable_Getter";
  seekable_Getter_(mthis) => seekable_Getter(mthis);

  static seeking_Getter(mthis) native "HTMLMediaElement_seeking_Getter";
  seeking_Getter_(mthis) => seeking_Getter(mthis);

  static setMediaKeys_Callback_0(mthis) native "HTMLMediaElement_setMediaKeys_Callback";
  setMediaKeys_Callback_0_(mthis) => setMediaKeys_Callback_0(mthis);

  static setMediaKeys_Callback_1(mthis, __arg_0) native "HTMLMediaElement_setMediaKeys_Callback";
  setMediaKeys_Callback_1_(mthis, __arg_0) => setMediaKeys_Callback_1(mthis, __arg_0);

  static setMediaKeys_Callback_2(mthis, __arg_0, __arg_1) native "HTMLMediaElement_setMediaKeys_Callback";
  setMediaKeys_Callback_2_(mthis, __arg_0, __arg_1) => setMediaKeys_Callback_2(mthis, __arg_0, __arg_1);

  static setMediaKeys_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLMediaElement_setMediaKeys_Callback";
  setMediaKeys_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setMediaKeys_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static src_Getter(mthis) native "HTMLMediaElement_src_Getter";
  src_Getter_(mthis) => src_Getter(mthis);

  static src_Setter(mthis, __arg_0) native "HTMLMediaElement_src_Setter";
  src_Setter_(mthis, __arg_0) => src_Setter(mthis, __arg_0);

  static textTracks_Getter(mthis) native "HTMLMediaElement_textTracks_Getter";
  textTracks_Getter_(mthis) => textTracks_Getter(mthis);

  static videoTracks_Getter(mthis) native "HTMLMediaElement_videoTracks_Getter";
  videoTracks_Getter_(mthis) => videoTracks_Getter(mthis);

  static volume_Getter(mthis) native "HTMLMediaElement_volume_Getter";
  volume_Getter_(mthis) => volume_Getter(mthis);

  static volume_Setter(mthis, __arg_0) native "HTMLMediaElement_volume_Setter";
  volume_Setter_(mthis, __arg_0) => volume_Setter(mthis, __arg_0);

  static webkitAddKey_Callback_0(mthis) native "HTMLMediaElement_webkitAddKey_Callback";
  webkitAddKey_Callback_0_(mthis) => webkitAddKey_Callback_0(mthis);

  static webkitAddKey_Callback_1(mthis, __arg_0) native "HTMLMediaElement_webkitAddKey_Callback";
  webkitAddKey_Callback_1_(mthis, __arg_0) => webkitAddKey_Callback_1(mthis, __arg_0);

  static webkitAddKey_Callback_2(mthis, __arg_0, __arg_1) native "HTMLMediaElement_webkitAddKey_Callback";
  webkitAddKey_Callback_2_(mthis, __arg_0, __arg_1) => webkitAddKey_Callback_2(mthis, __arg_0, __arg_1);

  static webkitAddKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLMediaElement_webkitAddKey_Callback";
  webkitAddKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitAddKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitAddKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLMediaElement_webkitAddKey_Callback";
  webkitAddKey_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => webkitAddKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitAddKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "HTMLMediaElement_webkitAddKey_Callback";
  webkitAddKey_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => webkitAddKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static webkitAddKey_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "HTMLMediaElement_webkitAddKey_Callback";
  webkitAddKey_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => webkitAddKey_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static webkitAudioDecodedByteCount_Getter(mthis) native "HTMLMediaElement_webkitAudioDecodedByteCount_Getter";
  webkitAudioDecodedByteCount_Getter_(mthis) => webkitAudioDecodedByteCount_Getter(mthis);

  static webkitCancelKeyRequest_Callback_0(mthis) native "HTMLMediaElement_webkitCancelKeyRequest_Callback";
  webkitCancelKeyRequest_Callback_0_(mthis) => webkitCancelKeyRequest_Callback_0(mthis);

  static webkitCancelKeyRequest_Callback_1(mthis, __arg_0) native "HTMLMediaElement_webkitCancelKeyRequest_Callback";
  webkitCancelKeyRequest_Callback_1_(mthis, __arg_0) => webkitCancelKeyRequest_Callback_1(mthis, __arg_0);

  static webkitCancelKeyRequest_Callback_2(mthis, __arg_0, __arg_1) native "HTMLMediaElement_webkitCancelKeyRequest_Callback";
  webkitCancelKeyRequest_Callback_2_(mthis, __arg_0, __arg_1) => webkitCancelKeyRequest_Callback_2(mthis, __arg_0, __arg_1);

  static webkitCancelKeyRequest_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLMediaElement_webkitCancelKeyRequest_Callback";
  webkitCancelKeyRequest_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitCancelKeyRequest_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitCancelKeyRequest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLMediaElement_webkitCancelKeyRequest_Callback";
  webkitCancelKeyRequest_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => webkitCancelKeyRequest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitGenerateKeyRequest_Callback_0(mthis) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback";
  webkitGenerateKeyRequest_Callback_0_(mthis) => webkitGenerateKeyRequest_Callback_0(mthis);

  static webkitGenerateKeyRequest_Callback_1(mthis, __arg_0) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback";
  webkitGenerateKeyRequest_Callback_1_(mthis, __arg_0) => webkitGenerateKeyRequest_Callback_1(mthis, __arg_0);

  static webkitGenerateKeyRequest_Callback_2(mthis, __arg_0, __arg_1) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback";
  webkitGenerateKeyRequest_Callback_2_(mthis, __arg_0, __arg_1) => webkitGenerateKeyRequest_Callback_2(mthis, __arg_0, __arg_1);

  static webkitGenerateKeyRequest_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback";
  webkitGenerateKeyRequest_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitGenerateKeyRequest_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitGenerateKeyRequest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLMediaElement_webkitGenerateKeyRequest_Callback";
  webkitGenerateKeyRequest_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => webkitGenerateKeyRequest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitVideoDecodedByteCount_Getter(mthis) native "HTMLMediaElement_webkitVideoDecodedByteCount_Getter";
  webkitVideoDecodedByteCount_Getter_(mthis) => webkitVideoDecodedByteCount_Getter(mthis);

}

class BlinkHTMLMenuElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMenuElement();

  static label_Getter(mthis) native "HTMLMenuElement_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static label_Setter(mthis, __arg_0) native "HTMLMenuElement_label_Setter";
  label_Setter_(mthis, __arg_0) => label_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "HTMLMenuElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLMenuElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkHTMLMenuItemElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMenuItemElement();

  static checked_Getter(mthis) native "HTMLMenuItemElement_checked_Getter";
  checked_Getter_(mthis) => checked_Getter(mthis);

  static checked_Setter(mthis, __arg_0) native "HTMLMenuItemElement_checked_Setter";
  checked_Setter_(mthis, __arg_0) => checked_Setter(mthis, __arg_0);

  static default_Getter(mthis) native "HTMLMenuItemElement_default_Getter";
  default_Getter_(mthis) => default_Getter(mthis);

  static default_Setter(mthis, __arg_0) native "HTMLMenuItemElement_default_Setter";
  default_Setter_(mthis, __arg_0) => default_Setter(mthis, __arg_0);

  static disabled_Getter(mthis) native "HTMLMenuItemElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLMenuItemElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static label_Getter(mthis) native "HTMLMenuItemElement_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static label_Setter(mthis, __arg_0) native "HTMLMenuItemElement_label_Setter";
  label_Setter_(mthis, __arg_0) => label_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "HTMLMenuItemElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLMenuItemElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkHTMLMetaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMetaElement();

  static content_Getter(mthis) native "HTMLMetaElement_content_Getter";
  content_Getter_(mthis) => content_Getter(mthis);

  static content_Setter(mthis, __arg_0) native "HTMLMetaElement_content_Setter";
  content_Setter_(mthis, __arg_0) => content_Setter(mthis, __arg_0);

  static httpEquiv_Getter(mthis) native "HTMLMetaElement_httpEquiv_Getter";
  httpEquiv_Getter_(mthis) => httpEquiv_Getter(mthis);

  static httpEquiv_Setter(mthis, __arg_0) native "HTMLMetaElement_httpEquiv_Setter";
  httpEquiv_Setter_(mthis, __arg_0) => httpEquiv_Setter(mthis, __arg_0);

  static name_Getter(mthis) native "HTMLMetaElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLMetaElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

}

class BlinkHTMLMeterElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLMeterElement();

  static high_Getter(mthis) native "HTMLMeterElement_high_Getter";
  high_Getter_(mthis) => high_Getter(mthis);

  static high_Setter(mthis, __arg_0) native "HTMLMeterElement_high_Setter";
  high_Setter_(mthis, __arg_0) => high_Setter(mthis, __arg_0);

  static labels_Getter(mthis) native "HTMLMeterElement_labels_Getter";
  labels_Getter_(mthis) => labels_Getter(mthis);

  static low_Getter(mthis) native "HTMLMeterElement_low_Getter";
  low_Getter_(mthis) => low_Getter(mthis);

  static low_Setter(mthis, __arg_0) native "HTMLMeterElement_low_Setter";
  low_Setter_(mthis, __arg_0) => low_Setter(mthis, __arg_0);

  static max_Getter(mthis) native "HTMLMeterElement_max_Getter";
  max_Getter_(mthis) => max_Getter(mthis);

  static max_Setter(mthis, __arg_0) native "HTMLMeterElement_max_Setter";
  max_Setter_(mthis, __arg_0) => max_Setter(mthis, __arg_0);

  static min_Getter(mthis) native "HTMLMeterElement_min_Getter";
  min_Getter_(mthis) => min_Getter(mthis);

  static min_Setter(mthis, __arg_0) native "HTMLMeterElement_min_Setter";
  min_Setter_(mthis, __arg_0) => min_Setter(mthis, __arg_0);

  static optimum_Getter(mthis) native "HTMLMeterElement_optimum_Getter";
  optimum_Getter_(mthis) => optimum_Getter(mthis);

  static optimum_Setter(mthis, __arg_0) native "HTMLMeterElement_optimum_Setter";
  optimum_Setter_(mthis, __arg_0) => optimum_Setter(mthis, __arg_0);

  static value_Getter(mthis) native "HTMLMeterElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLMeterElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkHTMLModElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLModElement();

  static cite_Getter(mthis) native "HTMLModElement_cite_Getter";
  cite_Getter_(mthis) => cite_Getter(mthis);

  static cite_Setter(mthis, __arg_0) native "HTMLModElement_cite_Setter";
  cite_Setter_(mthis, __arg_0) => cite_Setter(mthis, __arg_0);

  static dateTime_Getter(mthis) native "HTMLModElement_dateTime_Getter";
  dateTime_Getter_(mthis) => dateTime_Getter(mthis);

  static dateTime_Setter(mthis, __arg_0) native "HTMLModElement_dateTime_Setter";
  dateTime_Setter_(mthis, __arg_0) => dateTime_Setter(mthis, __arg_0);

}

class BlinkHTMLOListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOListElement();

  static reversed_Getter(mthis) native "HTMLOListElement_reversed_Getter";
  reversed_Getter_(mthis) => reversed_Getter(mthis);

  static reversed_Setter(mthis, __arg_0) native "HTMLOListElement_reversed_Setter";
  reversed_Setter_(mthis, __arg_0) => reversed_Setter(mthis, __arg_0);

  static start_Getter(mthis) native "HTMLOListElement_start_Getter";
  start_Getter_(mthis) => start_Getter(mthis);

  static start_Setter(mthis, __arg_0) native "HTMLOListElement_start_Setter";
  start_Setter_(mthis, __arg_0) => start_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "HTMLOListElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLOListElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkHTMLObjectElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLObjectElement();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLObjectElement___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "HTMLObjectElement___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static checkValidity_Callback_0(mthis) native "HTMLObjectElement_checkValidity_Callback";
  checkValidity_Callback_0_(mthis) => checkValidity_Callback_0(mthis);

  static checkValidity_Callback_1(mthis, __arg_0) native "HTMLObjectElement_checkValidity_Callback";
  checkValidity_Callback_1_(mthis, __arg_0) => checkValidity_Callback_1(mthis, __arg_0);

  static checkValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLObjectElement_checkValidity_Callback";
  checkValidity_Callback_2_(mthis, __arg_0, __arg_1) => checkValidity_Callback_2(mthis, __arg_0, __arg_1);

  static code_Getter(mthis) native "HTMLObjectElement_code_Getter";
  code_Getter_(mthis) => code_Getter(mthis);

  static code_Setter(mthis, __arg_0) native "HTMLObjectElement_code_Setter";
  code_Setter_(mthis, __arg_0) => code_Setter(mthis, __arg_0);

  static contentDocument_Getter(mthis) native "HTMLObjectElement_contentDocument_Getter";
  contentDocument_Getter_(mthis) => contentDocument_Getter(mthis);

  static data_Getter(mthis) native "HTMLObjectElement_data_Getter";
  data_Getter_(mthis) => data_Getter(mthis);

  static data_Setter(mthis, __arg_0) native "HTMLObjectElement_data_Setter";
  data_Setter_(mthis, __arg_0) => data_Setter(mthis, __arg_0);

  static form_Getter(mthis) native "HTMLObjectElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static getSVGDocument_Callback_0(mthis) native "HTMLObjectElement_getSVGDocument_Callback";
  getSVGDocument_Callback_0_(mthis) => getSVGDocument_Callback_0(mthis);

  static getSVGDocument_Callback_1(mthis, __arg_0) native "HTMLObjectElement_getSVGDocument_Callback";
  getSVGDocument_Callback_1_(mthis, __arg_0) => getSVGDocument_Callback_1(mthis, __arg_0);

  static getSVGDocument_Callback_2(mthis, __arg_0, __arg_1) native "HTMLObjectElement_getSVGDocument_Callback";
  getSVGDocument_Callback_2_(mthis, __arg_0, __arg_1) => getSVGDocument_Callback_2(mthis, __arg_0, __arg_1);

  static height_Getter(mthis) native "HTMLObjectElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "HTMLObjectElement_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static integrity_Getter(mthis) native "HTMLObjectElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLObjectElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static name_Getter(mthis) native "HTMLObjectElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLObjectElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static setCustomValidity_Callback_0(mthis) native "HTMLObjectElement_setCustomValidity_Callback";
  setCustomValidity_Callback_0_(mthis) => setCustomValidity_Callback_0(mthis);

  static setCustomValidity_Callback_1(mthis, __arg_0) native "HTMLObjectElement_setCustomValidity_Callback";
  setCustomValidity_Callback_1_(mthis, __arg_0) => setCustomValidity_Callback_1(mthis, __arg_0);

  static setCustomValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLObjectElement_setCustomValidity_Callback";
  setCustomValidity_Callback_2_(mthis, __arg_0, __arg_1) => setCustomValidity_Callback_2(mthis, __arg_0, __arg_1);

  static setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLObjectElement_setCustomValidity_Callback";
  setCustomValidity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static type_Getter(mthis) native "HTMLObjectElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLObjectElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

  static useMap_Getter(mthis) native "HTMLObjectElement_useMap_Getter";
  useMap_Getter_(mthis) => useMap_Getter(mthis);

  static useMap_Setter(mthis, __arg_0) native "HTMLObjectElement_useMap_Setter";
  useMap_Setter_(mthis, __arg_0) => useMap_Setter(mthis, __arg_0);

  static validationMessage_Getter(mthis) native "HTMLObjectElement_validationMessage_Getter";
  validationMessage_Getter_(mthis) => validationMessage_Getter(mthis);

  static validity_Getter(mthis) native "HTMLObjectElement_validity_Getter";
  validity_Getter_(mthis) => validity_Getter(mthis);

  static width_Getter(mthis) native "HTMLObjectElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "HTMLObjectElement_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

  static willValidate_Getter(mthis) native "HTMLObjectElement_willValidate_Getter";
  willValidate_Getter_(mthis) => willValidate_Getter(mthis);

}

class BlinkHTMLOptGroupElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOptGroupElement();

  static disabled_Getter(mthis) native "HTMLOptGroupElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLOptGroupElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static label_Getter(mthis) native "HTMLOptGroupElement_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static label_Setter(mthis, __arg_0) native "HTMLOptGroupElement_label_Setter";
  label_Setter_(mthis, __arg_0) => label_Setter(mthis, __arg_0);

}

class BlinkHTMLOptionElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOptionElement();

  static constructorCallback_0() native "HTMLOptionElement_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "HTMLOptionElement_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "HTMLOptionElement_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "HTMLOptionElement_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "HTMLOptionElement_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "HTMLOptionElement_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "HTMLOptionElement_constructorCallback";
  constructorCallback_6_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static defaultSelected_Getter(mthis) native "HTMLOptionElement_defaultSelected_Getter";
  defaultSelected_Getter_(mthis) => defaultSelected_Getter(mthis);

  static defaultSelected_Setter(mthis, __arg_0) native "HTMLOptionElement_defaultSelected_Setter";
  defaultSelected_Setter_(mthis, __arg_0) => defaultSelected_Setter(mthis, __arg_0);

  static disabled_Getter(mthis) native "HTMLOptionElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLOptionElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static form_Getter(mthis) native "HTMLOptionElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static index_Getter(mthis) native "HTMLOptionElement_index_Getter";
  index_Getter_(mthis) => index_Getter(mthis);

  static label_Getter(mthis) native "HTMLOptionElement_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static label_Setter(mthis, __arg_0) native "HTMLOptionElement_label_Setter";
  label_Setter_(mthis, __arg_0) => label_Setter(mthis, __arg_0);

  static selected_Getter(mthis) native "HTMLOptionElement_selected_Getter";
  selected_Getter_(mthis) => selected_Getter(mthis);

  static selected_Setter(mthis, __arg_0) native "HTMLOptionElement_selected_Setter";
  selected_Setter_(mthis, __arg_0) => selected_Setter(mthis, __arg_0);

  static value_Getter(mthis) native "HTMLOptionElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLOptionElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkHTMLOptionsCollection extends BlinkHTMLCollection {
  static final instance = new BlinkHTMLOptionsCollection();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLOptionsCollection___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "HTMLOptionsCollection___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkHTMLOutputElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLOutputElement();

  static checkValidity_Callback_0(mthis) native "HTMLOutputElement_checkValidity_Callback";
  checkValidity_Callback_0_(mthis) => checkValidity_Callback_0(mthis);

  static checkValidity_Callback_1(mthis, __arg_0) native "HTMLOutputElement_checkValidity_Callback";
  checkValidity_Callback_1_(mthis, __arg_0) => checkValidity_Callback_1(mthis, __arg_0);

  static checkValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLOutputElement_checkValidity_Callback";
  checkValidity_Callback_2_(mthis, __arg_0, __arg_1) => checkValidity_Callback_2(mthis, __arg_0, __arg_1);

  static defaultValue_Getter(mthis) native "HTMLOutputElement_defaultValue_Getter";
  defaultValue_Getter_(mthis) => defaultValue_Getter(mthis);

  static defaultValue_Setter(mthis, __arg_0) native "HTMLOutputElement_defaultValue_Setter";
  defaultValue_Setter_(mthis, __arg_0) => defaultValue_Setter(mthis, __arg_0);

  static form_Getter(mthis) native "HTMLOutputElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static htmlFor_Getter(mthis) native "HTMLOutputElement_htmlFor_Getter";
  htmlFor_Getter_(mthis) => htmlFor_Getter(mthis);

  static htmlFor_Setter(mthis, __arg_0) native "HTMLOutputElement_htmlFor_Setter";
  htmlFor_Setter_(mthis, __arg_0) => htmlFor_Setter(mthis, __arg_0);

  static labels_Getter(mthis) native "HTMLOutputElement_labels_Getter";
  labels_Getter_(mthis) => labels_Getter(mthis);

  static name_Getter(mthis) native "HTMLOutputElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLOutputElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static setCustomValidity_Callback_0(mthis) native "HTMLOutputElement_setCustomValidity_Callback";
  setCustomValidity_Callback_0_(mthis) => setCustomValidity_Callback_0(mthis);

  static setCustomValidity_Callback_1(mthis, __arg_0) native "HTMLOutputElement_setCustomValidity_Callback";
  setCustomValidity_Callback_1_(mthis, __arg_0) => setCustomValidity_Callback_1(mthis, __arg_0);

  static setCustomValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLOutputElement_setCustomValidity_Callback";
  setCustomValidity_Callback_2_(mthis, __arg_0, __arg_1) => setCustomValidity_Callback_2(mthis, __arg_0, __arg_1);

  static setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLOutputElement_setCustomValidity_Callback";
  setCustomValidity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static type_Getter(mthis) native "HTMLOutputElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static validationMessage_Getter(mthis) native "HTMLOutputElement_validationMessage_Getter";
  validationMessage_Getter_(mthis) => validationMessage_Getter(mthis);

  static validity_Getter(mthis) native "HTMLOutputElement_validity_Getter";
  validity_Getter_(mthis) => validity_Getter(mthis);

  static value_Getter(mthis) native "HTMLOutputElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLOutputElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

  static willValidate_Getter(mthis) native "HTMLOutputElement_willValidate_Getter";
  willValidate_Getter_(mthis) => willValidate_Getter(mthis);

}

class BlinkHTMLParagraphElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLParagraphElement();

}

class BlinkHTMLParamElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLParamElement();

  static name_Getter(mthis) native "HTMLParamElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLParamElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static value_Getter(mthis) native "HTMLParamElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLParamElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkHTMLPictureElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLPictureElement();

}

class BlinkHTMLPreElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLPreElement();

}

class BlinkHTMLProgressElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLProgressElement();

  static labels_Getter(mthis) native "HTMLProgressElement_labels_Getter";
  labels_Getter_(mthis) => labels_Getter(mthis);

  static max_Getter(mthis) native "HTMLProgressElement_max_Getter";
  max_Getter_(mthis) => max_Getter(mthis);

  static max_Setter(mthis, __arg_0) native "HTMLProgressElement_max_Setter";
  max_Setter_(mthis, __arg_0) => max_Setter(mthis, __arg_0);

  static position_Getter(mthis) native "HTMLProgressElement_position_Getter";
  position_Getter_(mthis) => position_Getter(mthis);

  static value_Getter(mthis) native "HTMLProgressElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLProgressElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkHTMLQuoteElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLQuoteElement();

  static cite_Getter(mthis) native "HTMLQuoteElement_cite_Getter";
  cite_Getter_(mthis) => cite_Getter(mthis);

  static cite_Setter(mthis, __arg_0) native "HTMLQuoteElement_cite_Setter";
  cite_Setter_(mthis, __arg_0) => cite_Setter(mthis, __arg_0);

}

class BlinkHTMLScriptElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLScriptElement();

  static async_Getter(mthis) native "HTMLScriptElement_async_Getter";
  async_Getter_(mthis) => async_Getter(mthis);

  static async_Setter(mthis, __arg_0) native "HTMLScriptElement_async_Setter";
  async_Setter_(mthis, __arg_0) => async_Setter(mthis, __arg_0);

  static charset_Getter(mthis) native "HTMLScriptElement_charset_Getter";
  charset_Getter_(mthis) => charset_Getter(mthis);

  static charset_Setter(mthis, __arg_0) native "HTMLScriptElement_charset_Setter";
  charset_Setter_(mthis, __arg_0) => charset_Setter(mthis, __arg_0);

  static crossOrigin_Getter(mthis) native "HTMLScriptElement_crossOrigin_Getter";
  crossOrigin_Getter_(mthis) => crossOrigin_Getter(mthis);

  static crossOrigin_Setter(mthis, __arg_0) native "HTMLScriptElement_crossOrigin_Setter";
  crossOrigin_Setter_(mthis, __arg_0) => crossOrigin_Setter(mthis, __arg_0);

  static defer_Getter(mthis) native "HTMLScriptElement_defer_Getter";
  defer_Getter_(mthis) => defer_Getter(mthis);

  static defer_Setter(mthis, __arg_0) native "HTMLScriptElement_defer_Setter";
  defer_Setter_(mthis, __arg_0) => defer_Setter(mthis, __arg_0);

  static event_Getter(mthis) native "HTMLScriptElement_event_Getter";
  event_Getter_(mthis) => event_Getter(mthis);

  static event_Setter(mthis, __arg_0) native "HTMLScriptElement_event_Setter";
  event_Setter_(mthis, __arg_0) => event_Setter(mthis, __arg_0);

  static htmlFor_Getter(mthis) native "HTMLScriptElement_htmlFor_Getter";
  htmlFor_Getter_(mthis) => htmlFor_Getter(mthis);

  static htmlFor_Setter(mthis, __arg_0) native "HTMLScriptElement_htmlFor_Setter";
  htmlFor_Setter_(mthis, __arg_0) => htmlFor_Setter(mthis, __arg_0);

  static integrity_Getter(mthis) native "HTMLScriptElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLScriptElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static nonce_Getter(mthis) native "HTMLScriptElement_nonce_Getter";
  nonce_Getter_(mthis) => nonce_Getter(mthis);

  static nonce_Setter(mthis, __arg_0) native "HTMLScriptElement_nonce_Setter";
  nonce_Setter_(mthis, __arg_0) => nonce_Setter(mthis, __arg_0);

  static src_Getter(mthis) native "HTMLScriptElement_src_Getter";
  src_Getter_(mthis) => src_Getter(mthis);

  static src_Setter(mthis, __arg_0) native "HTMLScriptElement_src_Setter";
  src_Setter_(mthis, __arg_0) => src_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "HTMLScriptElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLScriptElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkHTMLSelectElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSelectElement();

  static $__getter___Callback_1(mthis, __arg_0) native "HTMLSelectElement___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "HTMLSelectElement___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static add_Callback_0(mthis) native "HTMLSelectElement_add_Callback";
  add_Callback_0_(mthis) => add_Callback_0(mthis);

  static add_Callback_1(mthis, __arg_0) native "HTMLSelectElement_add_Callback";
  add_Callback_1_(mthis, __arg_0) => add_Callback_1(mthis, __arg_0);

  static add_Callback_2(mthis, __arg_0, __arg_1) native "HTMLSelectElement_add_Callback";
  add_Callback_2_(mthis, __arg_0, __arg_1) => add_Callback_2(mthis, __arg_0, __arg_1);

  static add_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLSelectElement_add_Callback";
  add_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => add_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static add_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLSelectElement_add_Callback";
  add_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => add_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static autofocus_Getter(mthis) native "HTMLSelectElement_autofocus_Getter";
  autofocus_Getter_(mthis) => autofocus_Getter(mthis);

  static autofocus_Setter(mthis, __arg_0) native "HTMLSelectElement_autofocus_Setter";
  autofocus_Setter_(mthis, __arg_0) => autofocus_Setter(mthis, __arg_0);

  static checkValidity_Callback_0(mthis) native "HTMLSelectElement_checkValidity_Callback";
  checkValidity_Callback_0_(mthis) => checkValidity_Callback_0(mthis);

  static checkValidity_Callback_1(mthis, __arg_0) native "HTMLSelectElement_checkValidity_Callback";
  checkValidity_Callback_1_(mthis, __arg_0) => checkValidity_Callback_1(mthis, __arg_0);

  static checkValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLSelectElement_checkValidity_Callback";
  checkValidity_Callback_2_(mthis, __arg_0, __arg_1) => checkValidity_Callback_2(mthis, __arg_0, __arg_1);

  static disabled_Getter(mthis) native "HTMLSelectElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLSelectElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static form_Getter(mthis) native "HTMLSelectElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static item_Callback_0(mthis) native "HTMLSelectElement_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "HTMLSelectElement_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "HTMLSelectElement_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLSelectElement_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static labels_Getter(mthis) native "HTMLSelectElement_labels_Getter";
  labels_Getter_(mthis) => labels_Getter(mthis);

  static length_Getter(mthis) native "HTMLSelectElement_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static length_Setter(mthis, __arg_0) native "HTMLSelectElement_length_Setter";
  length_Setter_(mthis, __arg_0) => length_Setter(mthis, __arg_0);

  static multiple_Getter(mthis) native "HTMLSelectElement_multiple_Getter";
  multiple_Getter_(mthis) => multiple_Getter(mthis);

  static multiple_Setter(mthis, __arg_0) native "HTMLSelectElement_multiple_Setter";
  multiple_Setter_(mthis, __arg_0) => multiple_Setter(mthis, __arg_0);

  static name_Getter(mthis) native "HTMLSelectElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLSelectElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static namedItem_Callback_0(mthis) native "HTMLSelectElement_namedItem_Callback";
  namedItem_Callback_0_(mthis) => namedItem_Callback_0(mthis);

  static namedItem_Callback_1(mthis, __arg_0) native "HTMLSelectElement_namedItem_Callback";
  namedItem_Callback_1_(mthis, __arg_0) => namedItem_Callback_1(mthis, __arg_0);

  static namedItem_Callback_2(mthis, __arg_0, __arg_1) native "HTMLSelectElement_namedItem_Callback";
  namedItem_Callback_2_(mthis, __arg_0, __arg_1) => namedItem_Callback_2(mthis, __arg_0, __arg_1);

  static namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLSelectElement_namedItem_Callback";
  namedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static required_Getter(mthis) native "HTMLSelectElement_required_Getter";
  required_Getter_(mthis) => required_Getter(mthis);

  static required_Setter(mthis, __arg_0) native "HTMLSelectElement_required_Setter";
  required_Setter_(mthis, __arg_0) => required_Setter(mthis, __arg_0);

  static selectedIndex_Getter(mthis) native "HTMLSelectElement_selectedIndex_Getter";
  selectedIndex_Getter_(mthis) => selectedIndex_Getter(mthis);

  static selectedIndex_Setter(mthis, __arg_0) native "HTMLSelectElement_selectedIndex_Setter";
  selectedIndex_Setter_(mthis, __arg_0) => selectedIndex_Setter(mthis, __arg_0);

  static setCustomValidity_Callback_0(mthis) native "HTMLSelectElement_setCustomValidity_Callback";
  setCustomValidity_Callback_0_(mthis) => setCustomValidity_Callback_0(mthis);

  static setCustomValidity_Callback_1(mthis, __arg_0) native "HTMLSelectElement_setCustomValidity_Callback";
  setCustomValidity_Callback_1_(mthis, __arg_0) => setCustomValidity_Callback_1(mthis, __arg_0);

  static setCustomValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLSelectElement_setCustomValidity_Callback";
  setCustomValidity_Callback_2_(mthis, __arg_0, __arg_1) => setCustomValidity_Callback_2(mthis, __arg_0, __arg_1);

  static setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLSelectElement_setCustomValidity_Callback";
  setCustomValidity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static size_Getter(mthis) native "HTMLSelectElement_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

  static size_Setter(mthis, __arg_0) native "HTMLSelectElement_size_Setter";
  size_Setter_(mthis, __arg_0) => size_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "HTMLSelectElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static validationMessage_Getter(mthis) native "HTMLSelectElement_validationMessage_Getter";
  validationMessage_Getter_(mthis) => validationMessage_Getter(mthis);

  static validity_Getter(mthis) native "HTMLSelectElement_validity_Getter";
  validity_Getter_(mthis) => validity_Getter(mthis);

  static value_Getter(mthis) native "HTMLSelectElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLSelectElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

  static willValidate_Getter(mthis) native "HTMLSelectElement_willValidate_Getter";
  willValidate_Getter_(mthis) => willValidate_Getter(mthis);

}

class BlinkHTMLShadowElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLShadowElement();

  static getDistributedNodes_Callback_0(mthis) native "HTMLShadowElement_getDistributedNodes_Callback";
  getDistributedNodes_Callback_0_(mthis) => getDistributedNodes_Callback_0(mthis);

  static getDistributedNodes_Callback_1(mthis, __arg_0) native "HTMLShadowElement_getDistributedNodes_Callback";
  getDistributedNodes_Callback_1_(mthis, __arg_0) => getDistributedNodes_Callback_1(mthis, __arg_0);

  static getDistributedNodes_Callback_2(mthis, __arg_0, __arg_1) native "HTMLShadowElement_getDistributedNodes_Callback";
  getDistributedNodes_Callback_2_(mthis, __arg_0, __arg_1) => getDistributedNodes_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkHTMLSourceElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSourceElement();

  static integrity_Getter(mthis) native "HTMLSourceElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLSourceElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static media_Getter(mthis) native "HTMLSourceElement_media_Getter";
  media_Getter_(mthis) => media_Getter(mthis);

  static media_Setter(mthis, __arg_0) native "HTMLSourceElement_media_Setter";
  media_Setter_(mthis, __arg_0) => media_Setter(mthis, __arg_0);

  static sizes_Getter(mthis) native "HTMLSourceElement_sizes_Getter";
  sizes_Getter_(mthis) => sizes_Getter(mthis);

  static sizes_Setter(mthis, __arg_0) native "HTMLSourceElement_sizes_Setter";
  sizes_Setter_(mthis, __arg_0) => sizes_Setter(mthis, __arg_0);

  static src_Getter(mthis) native "HTMLSourceElement_src_Getter";
  src_Getter_(mthis) => src_Getter(mthis);

  static src_Setter(mthis, __arg_0) native "HTMLSourceElement_src_Setter";
  src_Setter_(mthis, __arg_0) => src_Setter(mthis, __arg_0);

  static srcset_Getter(mthis) native "HTMLSourceElement_srcset_Getter";
  srcset_Getter_(mthis) => srcset_Getter(mthis);

  static srcset_Setter(mthis, __arg_0) native "HTMLSourceElement_srcset_Setter";
  srcset_Setter_(mthis, __arg_0) => srcset_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "HTMLSourceElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLSourceElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkHTMLSpanElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLSpanElement();

}

class BlinkHTMLStyleElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLStyleElement();

  static disabled_Getter(mthis) native "HTMLStyleElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLStyleElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static media_Getter(mthis) native "HTMLStyleElement_media_Getter";
  media_Getter_(mthis) => media_Getter(mthis);

  static media_Setter(mthis, __arg_0) native "HTMLStyleElement_media_Setter";
  media_Setter_(mthis, __arg_0) => media_Setter(mthis, __arg_0);

  static sheet_Getter(mthis) native "HTMLStyleElement_sheet_Getter";
  sheet_Getter_(mthis) => sheet_Getter(mthis);

  static type_Getter(mthis) native "HTMLStyleElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "HTMLStyleElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkHTMLTableCaptionElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableCaptionElement();

}

class BlinkHTMLTableCellElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableCellElement();

  static cellIndex_Getter(mthis) native "HTMLTableCellElement_cellIndex_Getter";
  cellIndex_Getter_(mthis) => cellIndex_Getter(mthis);

  static colSpan_Getter(mthis) native "HTMLTableCellElement_colSpan_Getter";
  colSpan_Getter_(mthis) => colSpan_Getter(mthis);

  static colSpan_Setter(mthis, __arg_0) native "HTMLTableCellElement_colSpan_Setter";
  colSpan_Setter_(mthis, __arg_0) => colSpan_Setter(mthis, __arg_0);

  static headers_Getter(mthis) native "HTMLTableCellElement_headers_Getter";
  headers_Getter_(mthis) => headers_Getter(mthis);

  static headers_Setter(mthis, __arg_0) native "HTMLTableCellElement_headers_Setter";
  headers_Setter_(mthis, __arg_0) => headers_Setter(mthis, __arg_0);

  static rowSpan_Getter(mthis) native "HTMLTableCellElement_rowSpan_Getter";
  rowSpan_Getter_(mthis) => rowSpan_Getter(mthis);

  static rowSpan_Setter(mthis, __arg_0) native "HTMLTableCellElement_rowSpan_Setter";
  rowSpan_Setter_(mthis, __arg_0) => rowSpan_Setter(mthis, __arg_0);

}

class BlinkHTMLTableColElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableColElement();

  static span_Getter(mthis) native "HTMLTableColElement_span_Getter";
  span_Getter_(mthis) => span_Getter(mthis);

  static span_Setter(mthis, __arg_0) native "HTMLTableColElement_span_Setter";
  span_Setter_(mthis, __arg_0) => span_Setter(mthis, __arg_0);

}

class BlinkHTMLTableElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableElement();

  static border_Getter(mthis) native "HTMLTableElement_border_Getter";
  border_Getter_(mthis) => border_Getter(mthis);

  static border_Setter(mthis, __arg_0) native "HTMLTableElement_border_Setter";
  border_Setter_(mthis, __arg_0) => border_Setter(mthis, __arg_0);

  static caption_Getter(mthis) native "HTMLTableElement_caption_Getter";
  caption_Getter_(mthis) => caption_Getter(mthis);

  static caption_Setter(mthis, __arg_0) native "HTMLTableElement_caption_Setter";
  caption_Setter_(mthis, __arg_0) => caption_Setter(mthis, __arg_0);

  static createCaption_Callback_0(mthis) native "HTMLTableElement_createCaption_Callback";
  createCaption_Callback_0_(mthis) => createCaption_Callback_0(mthis);

  static createCaption_Callback_1(mthis, __arg_0) native "HTMLTableElement_createCaption_Callback";
  createCaption_Callback_1_(mthis, __arg_0) => createCaption_Callback_1(mthis, __arg_0);

  static createCaption_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableElement_createCaption_Callback";
  createCaption_Callback_2_(mthis, __arg_0, __arg_1) => createCaption_Callback_2(mthis, __arg_0, __arg_1);

  static createTBody_Callback_0(mthis) native "HTMLTableElement_createTBody_Callback";
  createTBody_Callback_0_(mthis) => createTBody_Callback_0(mthis);

  static createTBody_Callback_1(mthis, __arg_0) native "HTMLTableElement_createTBody_Callback";
  createTBody_Callback_1_(mthis, __arg_0) => createTBody_Callback_1(mthis, __arg_0);

  static createTBody_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableElement_createTBody_Callback";
  createTBody_Callback_2_(mthis, __arg_0, __arg_1) => createTBody_Callback_2(mthis, __arg_0, __arg_1);

  static createTFoot_Callback_0(mthis) native "HTMLTableElement_createTFoot_Callback";
  createTFoot_Callback_0_(mthis) => createTFoot_Callback_0(mthis);

  static createTFoot_Callback_1(mthis, __arg_0) native "HTMLTableElement_createTFoot_Callback";
  createTFoot_Callback_1_(mthis, __arg_0) => createTFoot_Callback_1(mthis, __arg_0);

  static createTFoot_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableElement_createTFoot_Callback";
  createTFoot_Callback_2_(mthis, __arg_0, __arg_1) => createTFoot_Callback_2(mthis, __arg_0, __arg_1);

  static createTHead_Callback_0(mthis) native "HTMLTableElement_createTHead_Callback";
  createTHead_Callback_0_(mthis) => createTHead_Callback_0(mthis);

  static createTHead_Callback_1(mthis, __arg_0) native "HTMLTableElement_createTHead_Callback";
  createTHead_Callback_1_(mthis, __arg_0) => createTHead_Callback_1(mthis, __arg_0);

  static createTHead_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableElement_createTHead_Callback";
  createTHead_Callback_2_(mthis, __arg_0, __arg_1) => createTHead_Callback_2(mthis, __arg_0, __arg_1);

  static deleteCaption_Callback_0(mthis) native "HTMLTableElement_deleteCaption_Callback";
  deleteCaption_Callback_0_(mthis) => deleteCaption_Callback_0(mthis);

  static deleteCaption_Callback_1(mthis, __arg_0) native "HTMLTableElement_deleteCaption_Callback";
  deleteCaption_Callback_1_(mthis, __arg_0) => deleteCaption_Callback_1(mthis, __arg_0);

  static deleteCaption_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableElement_deleteCaption_Callback";
  deleteCaption_Callback_2_(mthis, __arg_0, __arg_1) => deleteCaption_Callback_2(mthis, __arg_0, __arg_1);

  static deleteRow_Callback_0(mthis) native "HTMLTableElement_deleteRow_Callback";
  deleteRow_Callback_0_(mthis) => deleteRow_Callback_0(mthis);

  static deleteRow_Callback_1(mthis, __arg_0) native "HTMLTableElement_deleteRow_Callback";
  deleteRow_Callback_1_(mthis, __arg_0) => deleteRow_Callback_1(mthis, __arg_0);

  static deleteRow_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableElement_deleteRow_Callback";
  deleteRow_Callback_2_(mthis, __arg_0, __arg_1) => deleteRow_Callback_2(mthis, __arg_0, __arg_1);

  static deleteRow_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLTableElement_deleteRow_Callback";
  deleteRow_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteRow_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteTFoot_Callback_0(mthis) native "HTMLTableElement_deleteTFoot_Callback";
  deleteTFoot_Callback_0_(mthis) => deleteTFoot_Callback_0(mthis);

  static deleteTFoot_Callback_1(mthis, __arg_0) native "HTMLTableElement_deleteTFoot_Callback";
  deleteTFoot_Callback_1_(mthis, __arg_0) => deleteTFoot_Callback_1(mthis, __arg_0);

  static deleteTFoot_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableElement_deleteTFoot_Callback";
  deleteTFoot_Callback_2_(mthis, __arg_0, __arg_1) => deleteTFoot_Callback_2(mthis, __arg_0, __arg_1);

  static deleteTHead_Callback_0(mthis) native "HTMLTableElement_deleteTHead_Callback";
  deleteTHead_Callback_0_(mthis) => deleteTHead_Callback_0(mthis);

  static deleteTHead_Callback_1(mthis, __arg_0) native "HTMLTableElement_deleteTHead_Callback";
  deleteTHead_Callback_1_(mthis, __arg_0) => deleteTHead_Callback_1(mthis, __arg_0);

  static deleteTHead_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableElement_deleteTHead_Callback";
  deleteTHead_Callback_2_(mthis, __arg_0, __arg_1) => deleteTHead_Callback_2(mthis, __arg_0, __arg_1);

  static insertRow_Callback_0(mthis) native "HTMLTableElement_insertRow_Callback";
  insertRow_Callback_0_(mthis) => insertRow_Callback_0(mthis);

  static insertRow_Callback_1(mthis, __arg_0) native "HTMLTableElement_insertRow_Callback";
  insertRow_Callback_1_(mthis, __arg_0) => insertRow_Callback_1(mthis, __arg_0);

  static insertRow_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableElement_insertRow_Callback";
  insertRow_Callback_2_(mthis, __arg_0, __arg_1) => insertRow_Callback_2(mthis, __arg_0, __arg_1);

  static insertRow_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLTableElement_insertRow_Callback";
  insertRow_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertRow_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rows_Getter(mthis) native "HTMLTableElement_rows_Getter";
  rows_Getter_(mthis) => rows_Getter(mthis);

  static tBodies_Getter(mthis) native "HTMLTableElement_tBodies_Getter";
  tBodies_Getter_(mthis) => tBodies_Getter(mthis);

  static tFoot_Getter(mthis) native "HTMLTableElement_tFoot_Getter";
  tFoot_Getter_(mthis) => tFoot_Getter(mthis);

  static tFoot_Setter(mthis, __arg_0) native "HTMLTableElement_tFoot_Setter";
  tFoot_Setter_(mthis, __arg_0) => tFoot_Setter(mthis, __arg_0);

  static tHead_Getter(mthis) native "HTMLTableElement_tHead_Getter";
  tHead_Getter_(mthis) => tHead_Getter(mthis);

  static tHead_Setter(mthis, __arg_0) native "HTMLTableElement_tHead_Setter";
  tHead_Setter_(mthis, __arg_0) => tHead_Setter(mthis, __arg_0);

}

class BlinkHTMLTableRowElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableRowElement();

  static cells_Getter(mthis) native "HTMLTableRowElement_cells_Getter";
  cells_Getter_(mthis) => cells_Getter(mthis);

  static deleteCell_Callback_0(mthis) native "HTMLTableRowElement_deleteCell_Callback";
  deleteCell_Callback_0_(mthis) => deleteCell_Callback_0(mthis);

  static deleteCell_Callback_1(mthis, __arg_0) native "HTMLTableRowElement_deleteCell_Callback";
  deleteCell_Callback_1_(mthis, __arg_0) => deleteCell_Callback_1(mthis, __arg_0);

  static deleteCell_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableRowElement_deleteCell_Callback";
  deleteCell_Callback_2_(mthis, __arg_0, __arg_1) => deleteCell_Callback_2(mthis, __arg_0, __arg_1);

  static deleteCell_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLTableRowElement_deleteCell_Callback";
  deleteCell_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteCell_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertCell_Callback_0(mthis) native "HTMLTableRowElement_insertCell_Callback";
  insertCell_Callback_0_(mthis) => insertCell_Callback_0(mthis);

  static insertCell_Callback_1(mthis, __arg_0) native "HTMLTableRowElement_insertCell_Callback";
  insertCell_Callback_1_(mthis, __arg_0) => insertCell_Callback_1(mthis, __arg_0);

  static insertCell_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableRowElement_insertCell_Callback";
  insertCell_Callback_2_(mthis, __arg_0, __arg_1) => insertCell_Callback_2(mthis, __arg_0, __arg_1);

  static insertCell_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLTableRowElement_insertCell_Callback";
  insertCell_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertCell_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rowIndex_Getter(mthis) native "HTMLTableRowElement_rowIndex_Getter";
  rowIndex_Getter_(mthis) => rowIndex_Getter(mthis);

  static sectionRowIndex_Getter(mthis) native "HTMLTableRowElement_sectionRowIndex_Getter";
  sectionRowIndex_Getter_(mthis) => sectionRowIndex_Getter(mthis);

}

class BlinkHTMLTableSectionElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTableSectionElement();

  static deleteRow_Callback_0(mthis) native "HTMLTableSectionElement_deleteRow_Callback";
  deleteRow_Callback_0_(mthis) => deleteRow_Callback_0(mthis);

  static deleteRow_Callback_1(mthis, __arg_0) native "HTMLTableSectionElement_deleteRow_Callback";
  deleteRow_Callback_1_(mthis, __arg_0) => deleteRow_Callback_1(mthis, __arg_0);

  static deleteRow_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableSectionElement_deleteRow_Callback";
  deleteRow_Callback_2_(mthis, __arg_0, __arg_1) => deleteRow_Callback_2(mthis, __arg_0, __arg_1);

  static deleteRow_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLTableSectionElement_deleteRow_Callback";
  deleteRow_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteRow_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertRow_Callback_0(mthis) native "HTMLTableSectionElement_insertRow_Callback";
  insertRow_Callback_0_(mthis) => insertRow_Callback_0(mthis);

  static insertRow_Callback_1(mthis, __arg_0) native "HTMLTableSectionElement_insertRow_Callback";
  insertRow_Callback_1_(mthis, __arg_0) => insertRow_Callback_1(mthis, __arg_0);

  static insertRow_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTableSectionElement_insertRow_Callback";
  insertRow_Callback_2_(mthis, __arg_0, __arg_1) => insertRow_Callback_2(mthis, __arg_0, __arg_1);

  static insertRow_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLTableSectionElement_insertRow_Callback";
  insertRow_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertRow_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rows_Getter(mthis) native "HTMLTableSectionElement_rows_Getter";
  rows_Getter_(mthis) => rows_Getter(mthis);

}

class BlinkHTMLTemplateElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTemplateElement();

  static content_Getter(mthis) native "HTMLTemplateElement_content_Getter";
  content_Getter_(mthis) => content_Getter(mthis);

}

class BlinkHTMLTextAreaElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTextAreaElement();

  static autofocus_Getter(mthis) native "HTMLTextAreaElement_autofocus_Getter";
  autofocus_Getter_(mthis) => autofocus_Getter(mthis);

  static autofocus_Setter(mthis, __arg_0) native "HTMLTextAreaElement_autofocus_Setter";
  autofocus_Setter_(mthis, __arg_0) => autofocus_Setter(mthis, __arg_0);

  static checkValidity_Callback_0(mthis) native "HTMLTextAreaElement_checkValidity_Callback";
  checkValidity_Callback_0_(mthis) => checkValidity_Callback_0(mthis);

  static checkValidity_Callback_1(mthis, __arg_0) native "HTMLTextAreaElement_checkValidity_Callback";
  checkValidity_Callback_1_(mthis, __arg_0) => checkValidity_Callback_1(mthis, __arg_0);

  static checkValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTextAreaElement_checkValidity_Callback";
  checkValidity_Callback_2_(mthis, __arg_0, __arg_1) => checkValidity_Callback_2(mthis, __arg_0, __arg_1);

  static cols_Getter(mthis) native "HTMLTextAreaElement_cols_Getter";
  cols_Getter_(mthis) => cols_Getter(mthis);

  static cols_Setter(mthis, __arg_0) native "HTMLTextAreaElement_cols_Setter";
  cols_Setter_(mthis, __arg_0) => cols_Setter(mthis, __arg_0);

  static defaultValue_Getter(mthis) native "HTMLTextAreaElement_defaultValue_Getter";
  defaultValue_Getter_(mthis) => defaultValue_Getter(mthis);

  static defaultValue_Setter(mthis, __arg_0) native "HTMLTextAreaElement_defaultValue_Setter";
  defaultValue_Setter_(mthis, __arg_0) => defaultValue_Setter(mthis, __arg_0);

  static dirName_Getter(mthis) native "HTMLTextAreaElement_dirName_Getter";
  dirName_Getter_(mthis) => dirName_Getter(mthis);

  static dirName_Setter(mthis, __arg_0) native "HTMLTextAreaElement_dirName_Setter";
  dirName_Setter_(mthis, __arg_0) => dirName_Setter(mthis, __arg_0);

  static disabled_Getter(mthis) native "HTMLTextAreaElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "HTMLTextAreaElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static form_Getter(mthis) native "HTMLTextAreaElement_form_Getter";
  form_Getter_(mthis) => form_Getter(mthis);

  static inputMode_Getter(mthis) native "HTMLTextAreaElement_inputMode_Getter";
  inputMode_Getter_(mthis) => inputMode_Getter(mthis);

  static inputMode_Setter(mthis, __arg_0) native "HTMLTextAreaElement_inputMode_Setter";
  inputMode_Setter_(mthis, __arg_0) => inputMode_Setter(mthis, __arg_0);

  static labels_Getter(mthis) native "HTMLTextAreaElement_labels_Getter";
  labels_Getter_(mthis) => labels_Getter(mthis);

  static maxLength_Getter(mthis) native "HTMLTextAreaElement_maxLength_Getter";
  maxLength_Getter_(mthis) => maxLength_Getter(mthis);

  static maxLength_Setter(mthis, __arg_0) native "HTMLTextAreaElement_maxLength_Setter";
  maxLength_Setter_(mthis, __arg_0) => maxLength_Setter(mthis, __arg_0);

  static name_Getter(mthis) native "HTMLTextAreaElement_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "HTMLTextAreaElement_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static placeholder_Getter(mthis) native "HTMLTextAreaElement_placeholder_Getter";
  placeholder_Getter_(mthis) => placeholder_Getter(mthis);

  static placeholder_Setter(mthis, __arg_0) native "HTMLTextAreaElement_placeholder_Setter";
  placeholder_Setter_(mthis, __arg_0) => placeholder_Setter(mthis, __arg_0);

  static readOnly_Getter(mthis) native "HTMLTextAreaElement_readOnly_Getter";
  readOnly_Getter_(mthis) => readOnly_Getter(mthis);

  static readOnly_Setter(mthis, __arg_0) native "HTMLTextAreaElement_readOnly_Setter";
  readOnly_Setter_(mthis, __arg_0) => readOnly_Setter(mthis, __arg_0);

  static required_Getter(mthis) native "HTMLTextAreaElement_required_Getter";
  required_Getter_(mthis) => required_Getter(mthis);

  static required_Setter(mthis, __arg_0) native "HTMLTextAreaElement_required_Setter";
  required_Setter_(mthis, __arg_0) => required_Setter(mthis, __arg_0);

  static rows_Getter(mthis) native "HTMLTextAreaElement_rows_Getter";
  rows_Getter_(mthis) => rows_Getter(mthis);

  static rows_Setter(mthis, __arg_0) native "HTMLTextAreaElement_rows_Setter";
  rows_Setter_(mthis, __arg_0) => rows_Setter(mthis, __arg_0);

  static select_Callback_0(mthis) native "HTMLTextAreaElement_select_Callback";
  select_Callback_0_(mthis) => select_Callback_0(mthis);

  static select_Callback_1(mthis, __arg_0) native "HTMLTextAreaElement_select_Callback";
  select_Callback_1_(mthis, __arg_0) => select_Callback_1(mthis, __arg_0);

  static select_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTextAreaElement_select_Callback";
  select_Callback_2_(mthis, __arg_0, __arg_1) => select_Callback_2(mthis, __arg_0, __arg_1);

  static selectionDirection_Getter(mthis) native "HTMLTextAreaElement_selectionDirection_Getter";
  selectionDirection_Getter_(mthis) => selectionDirection_Getter(mthis);

  static selectionDirection_Setter(mthis, __arg_0) native "HTMLTextAreaElement_selectionDirection_Setter";
  selectionDirection_Setter_(mthis, __arg_0) => selectionDirection_Setter(mthis, __arg_0);

  static selectionEnd_Getter(mthis) native "HTMLTextAreaElement_selectionEnd_Getter";
  selectionEnd_Getter_(mthis) => selectionEnd_Getter(mthis);

  static selectionEnd_Setter(mthis, __arg_0) native "HTMLTextAreaElement_selectionEnd_Setter";
  selectionEnd_Setter_(mthis, __arg_0) => selectionEnd_Setter(mthis, __arg_0);

  static selectionStart_Getter(mthis) native "HTMLTextAreaElement_selectionStart_Getter";
  selectionStart_Getter_(mthis) => selectionStart_Getter(mthis);

  static selectionStart_Setter(mthis, __arg_0) native "HTMLTextAreaElement_selectionStart_Setter";
  selectionStart_Setter_(mthis, __arg_0) => selectionStart_Setter(mthis, __arg_0);

  static setCustomValidity_Callback_0(mthis) native "HTMLTextAreaElement_setCustomValidity_Callback";
  setCustomValidity_Callback_0_(mthis) => setCustomValidity_Callback_0(mthis);

  static setCustomValidity_Callback_1(mthis, __arg_0) native "HTMLTextAreaElement_setCustomValidity_Callback";
  setCustomValidity_Callback_1_(mthis, __arg_0) => setCustomValidity_Callback_1(mthis, __arg_0);

  static setCustomValidity_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTextAreaElement_setCustomValidity_Callback";
  setCustomValidity_Callback_2_(mthis, __arg_0, __arg_1) => setCustomValidity_Callback_2(mthis, __arg_0, __arg_1);

  static setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLTextAreaElement_setCustomValidity_Callback";
  setCustomValidity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setCustomValidity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setRangeText_Callback_0(mthis) native "HTMLTextAreaElement_setRangeText_Callback";
  setRangeText_Callback_0_(mthis) => setRangeText_Callback_0(mthis);

  static setRangeText_Callback_1(mthis, __arg_0) native "HTMLTextAreaElement_setRangeText_Callback";
  setRangeText_Callback_1_(mthis, __arg_0) => setRangeText_Callback_1(mthis, __arg_0);

  static setRangeText_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTextAreaElement_setRangeText_Callback";
  setRangeText_Callback_2_(mthis, __arg_0, __arg_1) => setRangeText_Callback_2(mthis, __arg_0, __arg_1);

  static setRangeText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLTextAreaElement_setRangeText_Callback";
  setRangeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setRangeText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setRangeText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLTextAreaElement_setRangeText_Callback";
  setRangeText_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setRangeText_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setRangeText_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "HTMLTextAreaElement_setRangeText_Callback";
  setRangeText_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setRangeText_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setRangeText_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "HTMLTextAreaElement_setRangeText_Callback";
  setRangeText_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => setRangeText_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static setSelectionRange_Callback_0(mthis) native "HTMLTextAreaElement_setSelectionRange_Callback";
  setSelectionRange_Callback_0_(mthis) => setSelectionRange_Callback_0(mthis);

  static setSelectionRange_Callback_1(mthis, __arg_0) native "HTMLTextAreaElement_setSelectionRange_Callback";
  setSelectionRange_Callback_1_(mthis, __arg_0) => setSelectionRange_Callback_1(mthis, __arg_0);

  static setSelectionRange_Callback_2(mthis, __arg_0, __arg_1) native "HTMLTextAreaElement_setSelectionRange_Callback";
  setSelectionRange_Callback_2_(mthis, __arg_0, __arg_1) => setSelectionRange_Callback_2(mthis, __arg_0, __arg_1);

  static setSelectionRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HTMLTextAreaElement_setSelectionRange_Callback";
  setSelectionRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setSelectionRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setSelectionRange_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HTMLTextAreaElement_setSelectionRange_Callback";
  setSelectionRange_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setSelectionRange_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setSelectionRange_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "HTMLTextAreaElement_setSelectionRange_Callback";
  setSelectionRange_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setSelectionRange_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static textLength_Getter(mthis) native "HTMLTextAreaElement_textLength_Getter";
  textLength_Getter_(mthis) => textLength_Getter(mthis);

  static type_Getter(mthis) native "HTMLTextAreaElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static validationMessage_Getter(mthis) native "HTMLTextAreaElement_validationMessage_Getter";
  validationMessage_Getter_(mthis) => validationMessage_Getter(mthis);

  static validity_Getter(mthis) native "HTMLTextAreaElement_validity_Getter";
  validity_Getter_(mthis) => validity_Getter(mthis);

  static value_Getter(mthis) native "HTMLTextAreaElement_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "HTMLTextAreaElement_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

  static willValidate_Getter(mthis) native "HTMLTextAreaElement_willValidate_Getter";
  willValidate_Getter_(mthis) => willValidate_Getter(mthis);

  static wrap_Getter(mthis) native "HTMLTextAreaElement_wrap_Getter";
  wrap_Getter_(mthis) => wrap_Getter(mthis);

  static wrap_Setter(mthis, __arg_0) native "HTMLTextAreaElement_wrap_Setter";
  wrap_Setter_(mthis, __arg_0) => wrap_Setter(mthis, __arg_0);

}

class BlinkHTMLTitleElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTitleElement();

}

class BlinkHTMLTrackElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLTrackElement();

  static default_Getter(mthis) native "HTMLTrackElement_default_Getter";
  default_Getter_(mthis) => default_Getter(mthis);

  static default_Setter(mthis, __arg_0) native "HTMLTrackElement_default_Setter";
  default_Setter_(mthis, __arg_0) => default_Setter(mthis, __arg_0);

  static integrity_Getter(mthis) native "HTMLTrackElement_integrity_Getter";
  integrity_Getter_(mthis) => integrity_Getter(mthis);

  static integrity_Setter(mthis, __arg_0) native "HTMLTrackElement_integrity_Setter";
  integrity_Setter_(mthis, __arg_0) => integrity_Setter(mthis, __arg_0);

  static kind_Getter(mthis) native "HTMLTrackElement_kind_Getter";
  kind_Getter_(mthis) => kind_Getter(mthis);

  static kind_Setter(mthis, __arg_0) native "HTMLTrackElement_kind_Setter";
  kind_Setter_(mthis, __arg_0) => kind_Setter(mthis, __arg_0);

  static label_Getter(mthis) native "HTMLTrackElement_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static label_Setter(mthis, __arg_0) native "HTMLTrackElement_label_Setter";
  label_Setter_(mthis, __arg_0) => label_Setter(mthis, __arg_0);

  static readyState_Getter(mthis) native "HTMLTrackElement_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static src_Getter(mthis) native "HTMLTrackElement_src_Getter";
  src_Getter_(mthis) => src_Getter(mthis);

  static src_Setter(mthis, __arg_0) native "HTMLTrackElement_src_Setter";
  src_Setter_(mthis, __arg_0) => src_Setter(mthis, __arg_0);

  static srclang_Getter(mthis) native "HTMLTrackElement_srclang_Getter";
  srclang_Getter_(mthis) => srclang_Getter(mthis);

  static srclang_Setter(mthis, __arg_0) native "HTMLTrackElement_srclang_Setter";
  srclang_Setter_(mthis, __arg_0) => srclang_Setter(mthis, __arg_0);

  static track_Getter(mthis) native "HTMLTrackElement_track_Getter";
  track_Getter_(mthis) => track_Getter(mthis);

}

class BlinkHTMLUListElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLUListElement();

}

class BlinkHTMLUnknownElement extends BlinkHTMLElement {
  static final instance = new BlinkHTMLUnknownElement();

}

class BlinkHTMLVideoElement extends BlinkHTMLMediaElement {
  static final instance = new BlinkHTMLVideoElement();

  static getVideoPlaybackQuality_Callback_0(mthis) native "HTMLVideoElement_getVideoPlaybackQuality_Callback";
  getVideoPlaybackQuality_Callback_0_(mthis) => getVideoPlaybackQuality_Callback_0(mthis);

  static getVideoPlaybackQuality_Callback_1(mthis, __arg_0) native "HTMLVideoElement_getVideoPlaybackQuality_Callback";
  getVideoPlaybackQuality_Callback_1_(mthis, __arg_0) => getVideoPlaybackQuality_Callback_1(mthis, __arg_0);

  static getVideoPlaybackQuality_Callback_2(mthis, __arg_0, __arg_1) native "HTMLVideoElement_getVideoPlaybackQuality_Callback";
  getVideoPlaybackQuality_Callback_2_(mthis, __arg_0, __arg_1) => getVideoPlaybackQuality_Callback_2(mthis, __arg_0, __arg_1);

  static height_Getter(mthis) native "HTMLVideoElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "HTMLVideoElement_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static poster_Getter(mthis) native "HTMLVideoElement_poster_Getter";
  poster_Getter_(mthis) => poster_Getter(mthis);

  static poster_Setter(mthis, __arg_0) native "HTMLVideoElement_poster_Setter";
  poster_Setter_(mthis, __arg_0) => poster_Setter(mthis, __arg_0);

  static videoHeight_Getter(mthis) native "HTMLVideoElement_videoHeight_Getter";
  videoHeight_Getter_(mthis) => videoHeight_Getter(mthis);

  static videoWidth_Getter(mthis) native "HTMLVideoElement_videoWidth_Getter";
  videoWidth_Getter_(mthis) => videoWidth_Getter(mthis);

  static webkitDecodedFrameCount_Getter(mthis) native "HTMLVideoElement_webkitDecodedFrameCount_Getter";
  webkitDecodedFrameCount_Getter_(mthis) => webkitDecodedFrameCount_Getter(mthis);

  static webkitDisplayingFullscreen_Getter(mthis) native "HTMLVideoElement_webkitDisplayingFullscreen_Getter";
  webkitDisplayingFullscreen_Getter_(mthis) => webkitDisplayingFullscreen_Getter(mthis);

  static webkitDroppedFrameCount_Getter(mthis) native "HTMLVideoElement_webkitDroppedFrameCount_Getter";
  webkitDroppedFrameCount_Getter_(mthis) => webkitDroppedFrameCount_Getter(mthis);

  static webkitEnterFullScreen_Callback_0(mthis) native "HTMLVideoElement_webkitEnterFullScreen_Callback";
  webkitEnterFullScreen_Callback_0_(mthis) => webkitEnterFullScreen_Callback_0(mthis);

  static webkitEnterFullScreen_Callback_1(mthis, __arg_0) native "HTMLVideoElement_webkitEnterFullScreen_Callback";
  webkitEnterFullScreen_Callback_1_(mthis, __arg_0) => webkitEnterFullScreen_Callback_1(mthis, __arg_0);

  static webkitEnterFullScreen_Callback_2(mthis, __arg_0, __arg_1) native "HTMLVideoElement_webkitEnterFullScreen_Callback";
  webkitEnterFullScreen_Callback_2_(mthis, __arg_0, __arg_1) => webkitEnterFullScreen_Callback_2(mthis, __arg_0, __arg_1);

  static webkitEnterFullscreen_Callback_0(mthis) native "HTMLVideoElement_webkitEnterFullscreen_Callback";
  webkitEnterFullscreen_Callback_0_(mthis) => webkitEnterFullscreen_Callback_0(mthis);

  static webkitEnterFullscreen_Callback_1(mthis, __arg_0) native "HTMLVideoElement_webkitEnterFullscreen_Callback";
  webkitEnterFullscreen_Callback_1_(mthis, __arg_0) => webkitEnterFullscreen_Callback_1(mthis, __arg_0);

  static webkitEnterFullscreen_Callback_2(mthis, __arg_0, __arg_1) native "HTMLVideoElement_webkitEnterFullscreen_Callback";
  webkitEnterFullscreen_Callback_2_(mthis, __arg_0, __arg_1) => webkitEnterFullscreen_Callback_2(mthis, __arg_0, __arg_1);

  static webkitExitFullScreen_Callback_0(mthis) native "HTMLVideoElement_webkitExitFullScreen_Callback";
  webkitExitFullScreen_Callback_0_(mthis) => webkitExitFullScreen_Callback_0(mthis);

  static webkitExitFullScreen_Callback_1(mthis, __arg_0) native "HTMLVideoElement_webkitExitFullScreen_Callback";
  webkitExitFullScreen_Callback_1_(mthis, __arg_0) => webkitExitFullScreen_Callback_1(mthis, __arg_0);

  static webkitExitFullScreen_Callback_2(mthis, __arg_0, __arg_1) native "HTMLVideoElement_webkitExitFullScreen_Callback";
  webkitExitFullScreen_Callback_2_(mthis, __arg_0, __arg_1) => webkitExitFullScreen_Callback_2(mthis, __arg_0, __arg_1);

  static webkitExitFullscreen_Callback_0(mthis) native "HTMLVideoElement_webkitExitFullscreen_Callback";
  webkitExitFullscreen_Callback_0_(mthis) => webkitExitFullscreen_Callback_0(mthis);

  static webkitExitFullscreen_Callback_1(mthis, __arg_0) native "HTMLVideoElement_webkitExitFullscreen_Callback";
  webkitExitFullscreen_Callback_1_(mthis, __arg_0) => webkitExitFullscreen_Callback_1(mthis, __arg_0);

  static webkitExitFullscreen_Callback_2(mthis, __arg_0, __arg_1) native "HTMLVideoElement_webkitExitFullscreen_Callback";
  webkitExitFullscreen_Callback_2_(mthis, __arg_0, __arg_1) => webkitExitFullscreen_Callback_2(mthis, __arg_0, __arg_1);

  static webkitSupportsFullscreen_Getter(mthis) native "HTMLVideoElement_webkitSupportsFullscreen_Getter";
  webkitSupportsFullscreen_Getter_(mthis) => webkitSupportsFullscreen_Getter(mthis);

  static width_Getter(mthis) native "HTMLVideoElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "HTMLVideoElement_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

}

class BlinkHashChangeEvent extends BlinkEvent {
  static final instance = new BlinkHashChangeEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "HashChangeEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static initHashChangeEvent_Callback_0(mthis) native "HashChangeEvent_initHashChangeEvent_Callback";
  initHashChangeEvent_Callback_0_(mthis) => initHashChangeEvent_Callback_0(mthis);

  static initHashChangeEvent_Callback_1(mthis, __arg_0) native "HashChangeEvent_initHashChangeEvent_Callback";
  initHashChangeEvent_Callback_1_(mthis, __arg_0) => initHashChangeEvent_Callback_1(mthis, __arg_0);

  static initHashChangeEvent_Callback_2(mthis, __arg_0, __arg_1) native "HashChangeEvent_initHashChangeEvent_Callback";
  initHashChangeEvent_Callback_2_(mthis, __arg_0, __arg_1) => initHashChangeEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initHashChangeEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "HashChangeEvent_initHashChangeEvent_Callback";
  initHashChangeEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initHashChangeEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initHashChangeEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "HashChangeEvent_initHashChangeEvent_Callback";
  initHashChangeEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initHashChangeEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initHashChangeEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "HashChangeEvent_initHashChangeEvent_Callback";
  initHashChangeEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initHashChangeEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initHashChangeEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "HashChangeEvent_initHashChangeEvent_Callback";
  initHashChangeEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initHashChangeEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initHashChangeEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "HashChangeEvent_initHashChangeEvent_Callback";
  initHashChangeEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initHashChangeEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static newURL_Getter(mthis) native "HashChangeEvent_newURL_Getter";
  newURL_Getter_(mthis) => newURL_Getter(mthis);

  static oldURL_Getter(mthis) native "HashChangeEvent_oldURL_Getter";
  oldURL_Getter_(mthis) => oldURL_Getter(mthis);

}

class BlinkHeaders {
  static final instance = new BlinkHeaders();

  static append_Callback_0(mthis) native "Headers_append_Callback";
  append_Callback_0_(mthis) => append_Callback_0(mthis);

  static append_Callback_1(mthis, __arg_0) native "Headers_append_Callback";
  append_Callback_1_(mthis, __arg_0) => append_Callback_1(mthis, __arg_0);

  static append_Callback_2(mthis, __arg_0, __arg_1) native "Headers_append_Callback";
  append_Callback_2_(mthis, __arg_0, __arg_1) => append_Callback_2(mthis, __arg_0, __arg_1);

  static append_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Headers_append_Callback";
  append_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => append_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static append_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Headers_append_Callback";
  append_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => append_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_0() native "Headers_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Headers_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Headers_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Headers_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static delete_Callback_0(mthis) native "Headers_delete_Callback";
  delete_Callback_0_(mthis) => delete_Callback_0(mthis);

  static delete_Callback_1(mthis, __arg_0) native "Headers_delete_Callback";
  delete_Callback_1_(mthis, __arg_0) => delete_Callback_1(mthis, __arg_0);

  static delete_Callback_2(mthis, __arg_0, __arg_1) native "Headers_delete_Callback";
  delete_Callback_2_(mthis, __arg_0, __arg_1) => delete_Callback_2(mthis, __arg_0, __arg_1);

  static delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Headers_delete_Callback";
  delete_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static forEach_Callback_0(mthis) native "Headers_forEach_Callback";
  forEach_Callback_0_(mthis) => forEach_Callback_0(mthis);

  static forEach_Callback_1(mthis, __arg_0) native "Headers_forEach_Callback";
  forEach_Callback_1_(mthis, __arg_0) => forEach_Callback_1(mthis, __arg_0);

  static forEach_Callback_2(mthis, __arg_0, __arg_1) native "Headers_forEach_Callback";
  forEach_Callback_2_(mthis, __arg_0, __arg_1) => forEach_Callback_2(mthis, __arg_0, __arg_1);

  static forEach_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Headers_forEach_Callback";
  forEach_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => forEach_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static forEach_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Headers_forEach_Callback";
  forEach_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => forEach_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getAll_Callback_0(mthis) native "Headers_getAll_Callback";
  getAll_Callback_0_(mthis) => getAll_Callback_0(mthis);

  static getAll_Callback_1(mthis, __arg_0) native "Headers_getAll_Callback";
  getAll_Callback_1_(mthis, __arg_0) => getAll_Callback_1(mthis, __arg_0);

  static getAll_Callback_2(mthis, __arg_0, __arg_1) native "Headers_getAll_Callback";
  getAll_Callback_2_(mthis, __arg_0, __arg_1) => getAll_Callback_2(mthis, __arg_0, __arg_1);

  static getAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Headers_getAll_Callback";
  getAll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static get_Callback_0(mthis) native "Headers_get_Callback";
  get_Callback_0_(mthis) => get_Callback_0(mthis);

  static get_Callback_1(mthis, __arg_0) native "Headers_get_Callback";
  get_Callback_1_(mthis, __arg_0) => get_Callback_1(mthis, __arg_0);

  static get_Callback_2(mthis, __arg_0, __arg_1) native "Headers_get_Callback";
  get_Callback_2_(mthis, __arg_0, __arg_1) => get_Callback_2(mthis, __arg_0, __arg_1);

  static get_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Headers_get_Callback";
  get_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => get_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static has_Callback_0(mthis) native "Headers_has_Callback";
  has_Callback_0_(mthis) => has_Callback_0(mthis);

  static has_Callback_1(mthis, __arg_0) native "Headers_has_Callback";
  has_Callback_1_(mthis, __arg_0) => has_Callback_1(mthis, __arg_0);

  static has_Callback_2(mthis, __arg_0, __arg_1) native "Headers_has_Callback";
  has_Callback_2_(mthis, __arg_0, __arg_1) => has_Callback_2(mthis, __arg_0, __arg_1);

  static has_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Headers_has_Callback";
  has_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => has_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static set_Callback_0(mthis) native "Headers_set_Callback";
  set_Callback_0_(mthis) => set_Callback_0(mthis);

  static set_Callback_1(mthis, __arg_0) native "Headers_set_Callback";
  set_Callback_1_(mthis, __arg_0) => set_Callback_1(mthis, __arg_0);

  static set_Callback_2(mthis, __arg_0, __arg_1) native "Headers_set_Callback";
  set_Callback_2_(mthis, __arg_0, __arg_1) => set_Callback_2(mthis, __arg_0, __arg_1);

  static set_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Headers_set_Callback";
  set_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => set_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static set_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Headers_set_Callback";
  set_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => set_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static size_Getter(mthis) native "Headers_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

}

class BlinkHistory {
  static final instance = new BlinkHistory();

  static back_Callback_0(mthis) native "History_back_Callback";
  back_Callback_0_(mthis) => back_Callback_0(mthis);

  static back_Callback_1(mthis, __arg_0) native "History_back_Callback";
  back_Callback_1_(mthis, __arg_0) => back_Callback_1(mthis, __arg_0);

  static back_Callback_2(mthis, __arg_0, __arg_1) native "History_back_Callback";
  back_Callback_2_(mthis, __arg_0, __arg_1) => back_Callback_2(mthis, __arg_0, __arg_1);

  static forward_Callback_0(mthis) native "History_forward_Callback";
  forward_Callback_0_(mthis) => forward_Callback_0(mthis);

  static forward_Callback_1(mthis, __arg_0) native "History_forward_Callback";
  forward_Callback_1_(mthis, __arg_0) => forward_Callback_1(mthis, __arg_0);

  static forward_Callback_2(mthis, __arg_0, __arg_1) native "History_forward_Callback";
  forward_Callback_2_(mthis, __arg_0, __arg_1) => forward_Callback_2(mthis, __arg_0, __arg_1);

  static go_Callback_0(mthis) native "History_go_Callback";
  go_Callback_0_(mthis) => go_Callback_0(mthis);

  static go_Callback_1(mthis, __arg_0) native "History_go_Callback";
  go_Callback_1_(mthis, __arg_0) => go_Callback_1(mthis, __arg_0);

  static go_Callback_2(mthis, __arg_0, __arg_1) native "History_go_Callback";
  go_Callback_2_(mthis, __arg_0, __arg_1) => go_Callback_2(mthis, __arg_0, __arg_1);

  static go_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "History_go_Callback";
  go_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => go_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "History_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static pushState_Callback_0(mthis) native "History_pushState_Callback";
  pushState_Callback_0_(mthis) => pushState_Callback_0(mthis);

  static pushState_Callback_1(mthis, __arg_0) native "History_pushState_Callback";
  pushState_Callback_1_(mthis, __arg_0) => pushState_Callback_1(mthis, __arg_0);

  static pushState_Callback_2(mthis, __arg_0, __arg_1) native "History_pushState_Callback";
  pushState_Callback_2_(mthis, __arg_0, __arg_1) => pushState_Callback_2(mthis, __arg_0, __arg_1);

  static pushState_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "History_pushState_Callback";
  pushState_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => pushState_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static pushState_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "History_pushState_Callback";
  pushState_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => pushState_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static pushState_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "History_pushState_Callback";
  pushState_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => pushState_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static replaceState_Callback_0(mthis) native "History_replaceState_Callback";
  replaceState_Callback_0_(mthis) => replaceState_Callback_0(mthis);

  static replaceState_Callback_1(mthis, __arg_0) native "History_replaceState_Callback";
  replaceState_Callback_1_(mthis, __arg_0) => replaceState_Callback_1(mthis, __arg_0);

  static replaceState_Callback_2(mthis, __arg_0, __arg_1) native "History_replaceState_Callback";
  replaceState_Callback_2_(mthis, __arg_0, __arg_1) => replaceState_Callback_2(mthis, __arg_0, __arg_1);

  static replaceState_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "History_replaceState_Callback";
  replaceState_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceState_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceState_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "History_replaceState_Callback";
  replaceState_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => replaceState_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static replaceState_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "History_replaceState_Callback";
  replaceState_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => replaceState_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static state_Getter(mthis) native "History_state_Getter";
  state_Getter_(mthis) => state_Getter(mthis);

}

class BlinkIDBCursor {
  static final instance = new BlinkIDBCursor();

  static advance_Callback_0(mthis) native "IDBCursor_advance_Callback";
  advance_Callback_0_(mthis) => advance_Callback_0(mthis);

  static advance_Callback_1(mthis, __arg_0) native "IDBCursor_advance_Callback";
  advance_Callback_1_(mthis, __arg_0) => advance_Callback_1(mthis, __arg_0);

  static advance_Callback_2(mthis, __arg_0, __arg_1) native "IDBCursor_advance_Callback";
  advance_Callback_2_(mthis, __arg_0, __arg_1) => advance_Callback_2(mthis, __arg_0, __arg_1);

  static advance_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBCursor_advance_Callback";
  advance_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => advance_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static continuePrimaryKey_Callback_0(mthis) native "IDBCursor_continuePrimaryKey_Callback";
  continuePrimaryKey_Callback_0_(mthis) => continuePrimaryKey_Callback_0(mthis);

  static continuePrimaryKey_Callback_1(mthis, __arg_0) native "IDBCursor_continuePrimaryKey_Callback";
  continuePrimaryKey_Callback_1_(mthis, __arg_0) => continuePrimaryKey_Callback_1(mthis, __arg_0);

  static continuePrimaryKey_Callback_2(mthis, __arg_0, __arg_1) native "IDBCursor_continuePrimaryKey_Callback";
  continuePrimaryKey_Callback_2_(mthis, __arg_0, __arg_1) => continuePrimaryKey_Callback_2(mthis, __arg_0, __arg_1);

  static continuePrimaryKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBCursor_continuePrimaryKey_Callback";
  continuePrimaryKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => continuePrimaryKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static continuePrimaryKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBCursor_continuePrimaryKey_Callback";
  continuePrimaryKey_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => continuePrimaryKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static continue_Callback_0(mthis) native "IDBCursor_continue_Callback";
  continue_Callback_0_(mthis) => continue_Callback_0(mthis);

  static continue_Callback_1(mthis, __arg_0) native "IDBCursor_continue_Callback";
  continue_Callback_1_(mthis, __arg_0) => continue_Callback_1(mthis, __arg_0);

  static continue_Callback_2(mthis, __arg_0, __arg_1) native "IDBCursor_continue_Callback";
  continue_Callback_2_(mthis, __arg_0, __arg_1) => continue_Callback_2(mthis, __arg_0, __arg_1);

  static continue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBCursor_continue_Callback";
  continue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => continue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static delete_Callback_0(mthis) native "IDBCursor_delete_Callback";
  delete_Callback_0_(mthis) => delete_Callback_0(mthis);

  static delete_Callback_1(mthis, __arg_0) native "IDBCursor_delete_Callback";
  delete_Callback_1_(mthis, __arg_0) => delete_Callback_1(mthis, __arg_0);

  static delete_Callback_2(mthis, __arg_0, __arg_1) native "IDBCursor_delete_Callback";
  delete_Callback_2_(mthis, __arg_0, __arg_1) => delete_Callback_2(mthis, __arg_0, __arg_1);

  static direction_Getter(mthis) native "IDBCursor_direction_Getter";
  direction_Getter_(mthis) => direction_Getter(mthis);

  static key_Getter(mthis) native "IDBCursor_key_Getter";
  key_Getter_(mthis) => key_Getter(mthis);

  static primaryKey_Getter(mthis) native "IDBCursor_primaryKey_Getter";
  primaryKey_Getter_(mthis) => primaryKey_Getter(mthis);

  static source_Getter(mthis) native "IDBCursor_source_Getter";
  source_Getter_(mthis) => source_Getter(mthis);

  static update_Callback_0(mthis) native "IDBCursor_update_Callback";
  update_Callback_0_(mthis) => update_Callback_0(mthis);

  static update_Callback_1(mthis, __arg_0) native "IDBCursor_update_Callback";
  update_Callback_1_(mthis, __arg_0) => update_Callback_1(mthis, __arg_0);

  static update_Callback_2(mthis, __arg_0, __arg_1) native "IDBCursor_update_Callback";
  update_Callback_2_(mthis, __arg_0, __arg_1) => update_Callback_2(mthis, __arg_0, __arg_1);

  static update_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBCursor_update_Callback";
  update_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => update_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkIDBCursorWithValue extends BlinkIDBCursor {
  static final instance = new BlinkIDBCursorWithValue();

  static value_Getter(mthis) native "IDBCursorWithValue_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

}

class BlinkIDBDatabase extends BlinkEventTarget {
  static final instance = new BlinkIDBDatabase();

  static close_Callback_0(mthis) native "IDBDatabase_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "IDBDatabase_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "IDBDatabase_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static createObjectStore_Callback_0(mthis) native "IDBDatabase_createObjectStore_Callback";
  createObjectStore_Callback_0_(mthis) => createObjectStore_Callback_0(mthis);

  static createObjectStore_Callback_1(mthis, __arg_0) native "IDBDatabase_createObjectStore_Callback";
  createObjectStore_Callback_1_(mthis, __arg_0) => createObjectStore_Callback_1(mthis, __arg_0);

  static createObjectStore_Callback_2(mthis, __arg_0, __arg_1) native "IDBDatabase_createObjectStore_Callback";
  createObjectStore_Callback_2_(mthis, __arg_0, __arg_1) => createObjectStore_Callback_2(mthis, __arg_0, __arg_1);

  static createObjectStore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBDatabase_createObjectStore_Callback";
  createObjectStore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createObjectStore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createObjectStore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBDatabase_createObjectStore_Callback";
  createObjectStore_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createObjectStore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static deleteObjectStore_Callback_0(mthis) native "IDBDatabase_deleteObjectStore_Callback";
  deleteObjectStore_Callback_0_(mthis) => deleteObjectStore_Callback_0(mthis);

  static deleteObjectStore_Callback_1(mthis, __arg_0) native "IDBDatabase_deleteObjectStore_Callback";
  deleteObjectStore_Callback_1_(mthis, __arg_0) => deleteObjectStore_Callback_1(mthis, __arg_0);

  static deleteObjectStore_Callback_2(mthis, __arg_0, __arg_1) native "IDBDatabase_deleteObjectStore_Callback";
  deleteObjectStore_Callback_2_(mthis, __arg_0, __arg_1) => deleteObjectStore_Callback_2(mthis, __arg_0, __arg_1);

  static deleteObjectStore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBDatabase_deleteObjectStore_Callback";
  deleteObjectStore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteObjectStore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static name_Getter(mthis) native "IDBDatabase_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static objectStoreNames_Getter(mthis) native "IDBDatabase_objectStoreNames_Getter";
  objectStoreNames_Getter_(mthis) => objectStoreNames_Getter(mthis);

  static onabort_Getter(mthis) native "IDBDatabase_onabort_Getter";
  onabort_Getter_(mthis) => onabort_Getter(mthis);

  static onabort_Setter(mthis, __arg_0) native "IDBDatabase_onabort_Setter";
  onabort_Setter_(mthis, __arg_0) => onabort_Setter(mthis, __arg_0);

  static onclose_Getter(mthis) native "IDBDatabase_onclose_Getter";
  onclose_Getter_(mthis) => onclose_Getter(mthis);

  static onclose_Setter(mthis, __arg_0) native "IDBDatabase_onclose_Setter";
  onclose_Setter_(mthis, __arg_0) => onclose_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "IDBDatabase_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "IDBDatabase_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onversionchange_Getter(mthis) native "IDBDatabase_onversionchange_Getter";
  onversionchange_Getter_(mthis) => onversionchange_Getter(mthis);

  static onversionchange_Setter(mthis, __arg_0) native "IDBDatabase_onversionchange_Setter";
  onversionchange_Setter_(mthis, __arg_0) => onversionchange_Setter(mthis, __arg_0);

  static transaction_Callback_0(mthis) native "IDBDatabase_transaction_Callback";
  transaction_Callback_0_(mthis) => transaction_Callback_0(mthis);

  static transaction_Callback_1(mthis, __arg_0) native "IDBDatabase_transaction_Callback";
  transaction_Callback_1_(mthis, __arg_0) => transaction_Callback_1(mthis, __arg_0);

  static transaction_Callback_2(mthis, __arg_0, __arg_1) native "IDBDatabase_transaction_Callback";
  transaction_Callback_2_(mthis, __arg_0, __arg_1) => transaction_Callback_2(mthis, __arg_0, __arg_1);

  static transaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBDatabase_transaction_Callback";
  transaction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => transaction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static transaction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBDatabase_transaction_Callback";
  transaction_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => transaction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static version_Getter(mthis) native "IDBDatabase_version_Getter";
  version_Getter_(mthis) => version_Getter(mthis);

}

class BlinkIDBFactory {
  static final instance = new BlinkIDBFactory();

  static cmp_Callback_0(mthis) native "IDBFactory_cmp_Callback";
  cmp_Callback_0_(mthis) => cmp_Callback_0(mthis);

  static cmp_Callback_1(mthis, __arg_0) native "IDBFactory_cmp_Callback";
  cmp_Callback_1_(mthis, __arg_0) => cmp_Callback_1(mthis, __arg_0);

  static cmp_Callback_2(mthis, __arg_0, __arg_1) native "IDBFactory_cmp_Callback";
  cmp_Callback_2_(mthis, __arg_0, __arg_1) => cmp_Callback_2(mthis, __arg_0, __arg_1);

  static cmp_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBFactory_cmp_Callback";
  cmp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => cmp_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static cmp_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBFactory_cmp_Callback";
  cmp_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => cmp_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static deleteDatabase_Callback_0(mthis) native "IDBFactory_deleteDatabase_Callback";
  deleteDatabase_Callback_0_(mthis) => deleteDatabase_Callback_0(mthis);

  static deleteDatabase_Callback_1(mthis, __arg_0) native "IDBFactory_deleteDatabase_Callback";
  deleteDatabase_Callback_1_(mthis, __arg_0) => deleteDatabase_Callback_1(mthis, __arg_0);

  static deleteDatabase_Callback_2(mthis, __arg_0, __arg_1) native "IDBFactory_deleteDatabase_Callback";
  deleteDatabase_Callback_2_(mthis, __arg_0, __arg_1) => deleteDatabase_Callback_2(mthis, __arg_0, __arg_1);

  static deleteDatabase_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBFactory_deleteDatabase_Callback";
  deleteDatabase_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteDatabase_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static open_Callback_0(mthis) native "IDBFactory_open_Callback";
  open_Callback_0_(mthis) => open_Callback_0(mthis);

  static open_Callback_1(mthis, __arg_0) native "IDBFactory_open_Callback";
  open_Callback_1_(mthis, __arg_0) => open_Callback_1(mthis, __arg_0);

  static open_Callback_2(mthis, __arg_0, __arg_1) native "IDBFactory_open_Callback";
  open_Callback_2_(mthis, __arg_0, __arg_1) => open_Callback_2(mthis, __arg_0, __arg_1);

  static open_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBFactory_open_Callback";
  open_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => open_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static open_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBFactory_open_Callback";
  open_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => open_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitGetDatabaseNames_Callback_0(mthis) native "IDBFactory_webkitGetDatabaseNames_Callback";
  webkitGetDatabaseNames_Callback_0_(mthis) => webkitGetDatabaseNames_Callback_0(mthis);

  static webkitGetDatabaseNames_Callback_1(mthis, __arg_0) native "IDBFactory_webkitGetDatabaseNames_Callback";
  webkitGetDatabaseNames_Callback_1_(mthis, __arg_0) => webkitGetDatabaseNames_Callback_1(mthis, __arg_0);

  static webkitGetDatabaseNames_Callback_2(mthis, __arg_0, __arg_1) native "IDBFactory_webkitGetDatabaseNames_Callback";
  webkitGetDatabaseNames_Callback_2_(mthis, __arg_0, __arg_1) => webkitGetDatabaseNames_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkIDBIndex {
  static final instance = new BlinkIDBIndex();

  static count_Callback_0(mthis) native "IDBIndex_count_Callback";
  count_Callback_0_(mthis) => count_Callback_0(mthis);

  static count_Callback_1(mthis, __arg_0) native "IDBIndex_count_Callback";
  count_Callback_1_(mthis, __arg_0) => count_Callback_1(mthis, __arg_0);

  static count_Callback_2(mthis, __arg_0, __arg_1) native "IDBIndex_count_Callback";
  count_Callback_2_(mthis, __arg_0, __arg_1) => count_Callback_2(mthis, __arg_0, __arg_1);

  static count_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBIndex_count_Callback";
  count_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => count_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getKey_Callback_0(mthis) native "IDBIndex_getKey_Callback";
  getKey_Callback_0_(mthis) => getKey_Callback_0(mthis);

  static getKey_Callback_1(mthis, __arg_0) native "IDBIndex_getKey_Callback";
  getKey_Callback_1_(mthis, __arg_0) => getKey_Callback_1(mthis, __arg_0);

  static getKey_Callback_2(mthis, __arg_0, __arg_1) native "IDBIndex_getKey_Callback";
  getKey_Callback_2_(mthis, __arg_0, __arg_1) => getKey_Callback_2(mthis, __arg_0, __arg_1);

  static getKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBIndex_getKey_Callback";
  getKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static get_Callback_0(mthis) native "IDBIndex_get_Callback";
  get_Callback_0_(mthis) => get_Callback_0(mthis);

  static get_Callback_1(mthis, __arg_0) native "IDBIndex_get_Callback";
  get_Callback_1_(mthis, __arg_0) => get_Callback_1(mthis, __arg_0);

  static get_Callback_2(mthis, __arg_0, __arg_1) native "IDBIndex_get_Callback";
  get_Callback_2_(mthis, __arg_0, __arg_1) => get_Callback_2(mthis, __arg_0, __arg_1);

  static get_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBIndex_get_Callback";
  get_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => get_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static keyPath_Getter(mthis) native "IDBIndex_keyPath_Getter";
  keyPath_Getter_(mthis) => keyPath_Getter(mthis);

  static multiEntry_Getter(mthis) native "IDBIndex_multiEntry_Getter";
  multiEntry_Getter_(mthis) => multiEntry_Getter(mthis);

  static name_Getter(mthis) native "IDBIndex_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static objectStore_Getter(mthis) native "IDBIndex_objectStore_Getter";
  objectStore_Getter_(mthis) => objectStore_Getter(mthis);

  static openCursor_Callback_0(mthis) native "IDBIndex_openCursor_Callback";
  openCursor_Callback_0_(mthis) => openCursor_Callback_0(mthis);

  static openCursor_Callback_1(mthis, __arg_0) native "IDBIndex_openCursor_Callback";
  openCursor_Callback_1_(mthis, __arg_0) => openCursor_Callback_1(mthis, __arg_0);

  static openCursor_Callback_2(mthis, __arg_0, __arg_1) native "IDBIndex_openCursor_Callback";
  openCursor_Callback_2_(mthis, __arg_0, __arg_1) => openCursor_Callback_2(mthis, __arg_0, __arg_1);

  static openCursor_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBIndex_openCursor_Callback";
  openCursor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => openCursor_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static openCursor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBIndex_openCursor_Callback";
  openCursor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => openCursor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static openKeyCursor_Callback_0(mthis) native "IDBIndex_openKeyCursor_Callback";
  openKeyCursor_Callback_0_(mthis) => openKeyCursor_Callback_0(mthis);

  static openKeyCursor_Callback_1(mthis, __arg_0) native "IDBIndex_openKeyCursor_Callback";
  openKeyCursor_Callback_1_(mthis, __arg_0) => openKeyCursor_Callback_1(mthis, __arg_0);

  static openKeyCursor_Callback_2(mthis, __arg_0, __arg_1) native "IDBIndex_openKeyCursor_Callback";
  openKeyCursor_Callback_2_(mthis, __arg_0, __arg_1) => openKeyCursor_Callback_2(mthis, __arg_0, __arg_1);

  static openKeyCursor_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBIndex_openKeyCursor_Callback";
  openKeyCursor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => openKeyCursor_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static openKeyCursor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBIndex_openKeyCursor_Callback";
  openKeyCursor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => openKeyCursor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static unique_Getter(mthis) native "IDBIndex_unique_Getter";
  unique_Getter_(mthis) => unique_Getter(mthis);

}

class BlinkIDBKeyRange {
  static final instance = new BlinkIDBKeyRange();

  static bound_Callback_0() native "IDBKeyRange_bound_Callback";
  bound_Callback_0_() => bound_Callback_0();

  static bound_Callback_1(__arg_0) native "IDBKeyRange_bound_Callback";
  bound_Callback_1_(__arg_0) => bound_Callback_1(__arg_0);

  static bound_Callback_2(__arg_0, __arg_1) native "IDBKeyRange_bound_Callback";
  bound_Callback_2_(__arg_0, __arg_1) => bound_Callback_2(__arg_0, __arg_1);

  static bound_Callback_3(__arg_0, __arg_1, __arg_2) native "IDBKeyRange_bound_Callback";
  bound_Callback_3_(__arg_0, __arg_1, __arg_2) => bound_Callback_3(__arg_0, __arg_1, __arg_2);

  static bound_Callback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "IDBKeyRange_bound_Callback";
  bound_Callback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => bound_Callback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static bound_Callback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "IDBKeyRange_bound_Callback";
  bound_Callback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => bound_Callback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static bound_Callback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "IDBKeyRange_bound_Callback";
  bound_Callback_6_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => bound_Callback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static lowerBound_Callback_0() native "IDBKeyRange_lowerBound_Callback";
  lowerBound_Callback_0_() => lowerBound_Callback_0();

  static lowerBound_Callback_1(__arg_0) native "IDBKeyRange_lowerBound_Callback";
  lowerBound_Callback_1_(__arg_0) => lowerBound_Callback_1(__arg_0);

  static lowerBound_Callback_2(__arg_0, __arg_1) native "IDBKeyRange_lowerBound_Callback";
  lowerBound_Callback_2_(__arg_0, __arg_1) => lowerBound_Callback_2(__arg_0, __arg_1);

  static lowerBound_Callback_3(__arg_0, __arg_1, __arg_2) native "IDBKeyRange_lowerBound_Callback";
  lowerBound_Callback_3_(__arg_0, __arg_1, __arg_2) => lowerBound_Callback_3(__arg_0, __arg_1, __arg_2);

  static lowerBound_Callback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "IDBKeyRange_lowerBound_Callback";
  lowerBound_Callback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => lowerBound_Callback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static lowerOpen_Getter(mthis) native "IDBKeyRange_lowerOpen_Getter";
  lowerOpen_Getter_(mthis) => lowerOpen_Getter(mthis);

  static lower_Getter(mthis) native "IDBKeyRange_lower_Getter";
  lower_Getter_(mthis) => lower_Getter(mthis);

  static only_Callback_0() native "IDBKeyRange_only_Callback";
  only_Callback_0_() => only_Callback_0();

  static only_Callback_1(__arg_0) native "IDBKeyRange_only_Callback";
  only_Callback_1_(__arg_0) => only_Callback_1(__arg_0);

  static only_Callback_2(__arg_0, __arg_1) native "IDBKeyRange_only_Callback";
  only_Callback_2_(__arg_0, __arg_1) => only_Callback_2(__arg_0, __arg_1);

  static only_Callback_3(__arg_0, __arg_1, __arg_2) native "IDBKeyRange_only_Callback";
  only_Callback_3_(__arg_0, __arg_1, __arg_2) => only_Callback_3(__arg_0, __arg_1, __arg_2);

  static upperBound_Callback_0() native "IDBKeyRange_upperBound_Callback";
  upperBound_Callback_0_() => upperBound_Callback_0();

  static upperBound_Callback_1(__arg_0) native "IDBKeyRange_upperBound_Callback";
  upperBound_Callback_1_(__arg_0) => upperBound_Callback_1(__arg_0);

  static upperBound_Callback_2(__arg_0, __arg_1) native "IDBKeyRange_upperBound_Callback";
  upperBound_Callback_2_(__arg_0, __arg_1) => upperBound_Callback_2(__arg_0, __arg_1);

  static upperBound_Callback_3(__arg_0, __arg_1, __arg_2) native "IDBKeyRange_upperBound_Callback";
  upperBound_Callback_3_(__arg_0, __arg_1, __arg_2) => upperBound_Callback_3(__arg_0, __arg_1, __arg_2);

  static upperBound_Callback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "IDBKeyRange_upperBound_Callback";
  upperBound_Callback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => upperBound_Callback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static upperOpen_Getter(mthis) native "IDBKeyRange_upperOpen_Getter";
  upperOpen_Getter_(mthis) => upperOpen_Getter(mthis);

  static upper_Getter(mthis) native "IDBKeyRange_upper_Getter";
  upper_Getter_(mthis) => upper_Getter(mthis);

}

class BlinkIDBObjectStore {
  static final instance = new BlinkIDBObjectStore();

  static add_Callback_0(mthis) native "IDBObjectStore_add_Callback";
  add_Callback_0_(mthis) => add_Callback_0(mthis);

  static add_Callback_1(mthis, __arg_0) native "IDBObjectStore_add_Callback";
  add_Callback_1_(mthis, __arg_0) => add_Callback_1(mthis, __arg_0);

  static add_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_add_Callback";
  add_Callback_2_(mthis, __arg_0, __arg_1) => add_Callback_2(mthis, __arg_0, __arg_1);

  static add_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_add_Callback";
  add_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => add_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static add_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBObjectStore_add_Callback";
  add_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => add_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static autoIncrement_Getter(mthis) native "IDBObjectStore_autoIncrement_Getter";
  autoIncrement_Getter_(mthis) => autoIncrement_Getter(mthis);

  static clear_Callback_0(mthis) native "IDBObjectStore_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "IDBObjectStore_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static count_Callback_0(mthis) native "IDBObjectStore_count_Callback";
  count_Callback_0_(mthis) => count_Callback_0(mthis);

  static count_Callback_1(mthis, __arg_0) native "IDBObjectStore_count_Callback";
  count_Callback_1_(mthis, __arg_0) => count_Callback_1(mthis, __arg_0);

  static count_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_count_Callback";
  count_Callback_2_(mthis, __arg_0, __arg_1) => count_Callback_2(mthis, __arg_0, __arg_1);

  static count_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_count_Callback";
  count_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => count_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createIndex_Callback_0(mthis) native "IDBObjectStore_createIndex_Callback";
  createIndex_Callback_0_(mthis) => createIndex_Callback_0(mthis);

  static createIndex_Callback_1(mthis, __arg_0) native "IDBObjectStore_createIndex_Callback";
  createIndex_Callback_1_(mthis, __arg_0) => createIndex_Callback_1(mthis, __arg_0);

  static createIndex_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_createIndex_Callback";
  createIndex_Callback_2_(mthis, __arg_0, __arg_1) => createIndex_Callback_2(mthis, __arg_0, __arg_1);

  static createIndex_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_createIndex_Callback";
  createIndex_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createIndex_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createIndex_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBObjectStore_createIndex_Callback";
  createIndex_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createIndex_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createIndex_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "IDBObjectStore_createIndex_Callback";
  createIndex_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createIndex_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static deleteIndex_Callback_0(mthis) native "IDBObjectStore_deleteIndex_Callback";
  deleteIndex_Callback_0_(mthis) => deleteIndex_Callback_0(mthis);

  static deleteIndex_Callback_1(mthis, __arg_0) native "IDBObjectStore_deleteIndex_Callback";
  deleteIndex_Callback_1_(mthis, __arg_0) => deleteIndex_Callback_1(mthis, __arg_0);

  static deleteIndex_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_deleteIndex_Callback";
  deleteIndex_Callback_2_(mthis, __arg_0, __arg_1) => deleteIndex_Callback_2(mthis, __arg_0, __arg_1);

  static deleteIndex_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_deleteIndex_Callback";
  deleteIndex_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteIndex_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static delete_Callback_0(mthis) native "IDBObjectStore_delete_Callback";
  delete_Callback_0_(mthis) => delete_Callback_0(mthis);

  static delete_Callback_1(mthis, __arg_0) native "IDBObjectStore_delete_Callback";
  delete_Callback_1_(mthis, __arg_0) => delete_Callback_1(mthis, __arg_0);

  static delete_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_delete_Callback";
  delete_Callback_2_(mthis, __arg_0, __arg_1) => delete_Callback_2(mthis, __arg_0, __arg_1);

  static delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_delete_Callback";
  delete_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => delete_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static get_Callback_0(mthis) native "IDBObjectStore_get_Callback";
  get_Callback_0_(mthis) => get_Callback_0(mthis);

  static get_Callback_1(mthis, __arg_0) native "IDBObjectStore_get_Callback";
  get_Callback_1_(mthis, __arg_0) => get_Callback_1(mthis, __arg_0);

  static get_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_get_Callback";
  get_Callback_2_(mthis, __arg_0, __arg_1) => get_Callback_2(mthis, __arg_0, __arg_1);

  static get_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_get_Callback";
  get_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => get_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static indexNames_Getter(mthis) native "IDBObjectStore_indexNames_Getter";
  indexNames_Getter_(mthis) => indexNames_Getter(mthis);

  static index_Callback_0(mthis) native "IDBObjectStore_index_Callback";
  index_Callback_0_(mthis) => index_Callback_0(mthis);

  static index_Callback_1(mthis, __arg_0) native "IDBObjectStore_index_Callback";
  index_Callback_1_(mthis, __arg_0) => index_Callback_1(mthis, __arg_0);

  static index_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_index_Callback";
  index_Callback_2_(mthis, __arg_0, __arg_1) => index_Callback_2(mthis, __arg_0, __arg_1);

  static index_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_index_Callback";
  index_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => index_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static keyPath_Getter(mthis) native "IDBObjectStore_keyPath_Getter";
  keyPath_Getter_(mthis) => keyPath_Getter(mthis);

  static name_Getter(mthis) native "IDBObjectStore_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static openCursor_Callback_0(mthis) native "IDBObjectStore_openCursor_Callback";
  openCursor_Callback_0_(mthis) => openCursor_Callback_0(mthis);

  static openCursor_Callback_1(mthis, __arg_0) native "IDBObjectStore_openCursor_Callback";
  openCursor_Callback_1_(mthis, __arg_0) => openCursor_Callback_1(mthis, __arg_0);

  static openCursor_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_openCursor_Callback";
  openCursor_Callback_2_(mthis, __arg_0, __arg_1) => openCursor_Callback_2(mthis, __arg_0, __arg_1);

  static openCursor_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_openCursor_Callback";
  openCursor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => openCursor_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static openCursor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBObjectStore_openCursor_Callback";
  openCursor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => openCursor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static openKeyCursor_Callback_0(mthis) native "IDBObjectStore_openKeyCursor_Callback";
  openKeyCursor_Callback_0_(mthis) => openKeyCursor_Callback_0(mthis);

  static openKeyCursor_Callback_1(mthis, __arg_0) native "IDBObjectStore_openKeyCursor_Callback";
  openKeyCursor_Callback_1_(mthis, __arg_0) => openKeyCursor_Callback_1(mthis, __arg_0);

  static openKeyCursor_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_openKeyCursor_Callback";
  openKeyCursor_Callback_2_(mthis, __arg_0, __arg_1) => openKeyCursor_Callback_2(mthis, __arg_0, __arg_1);

  static openKeyCursor_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_openKeyCursor_Callback";
  openKeyCursor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => openKeyCursor_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static openKeyCursor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBObjectStore_openKeyCursor_Callback";
  openKeyCursor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => openKeyCursor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static put_Callback_0(mthis) native "IDBObjectStore_put_Callback";
  put_Callback_0_(mthis) => put_Callback_0(mthis);

  static put_Callback_1(mthis, __arg_0) native "IDBObjectStore_put_Callback";
  put_Callback_1_(mthis, __arg_0) => put_Callback_1(mthis, __arg_0);

  static put_Callback_2(mthis, __arg_0, __arg_1) native "IDBObjectStore_put_Callback";
  put_Callback_2_(mthis, __arg_0, __arg_1) => put_Callback_2(mthis, __arg_0, __arg_1);

  static put_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBObjectStore_put_Callback";
  put_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => put_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static put_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "IDBObjectStore_put_Callback";
  put_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => put_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static transaction_Getter(mthis) native "IDBObjectStore_transaction_Getter";
  transaction_Getter_(mthis) => transaction_Getter(mthis);

}

class BlinkIDBOpenDBRequest extends BlinkIDBRequest {
  static final instance = new BlinkIDBOpenDBRequest();

  static onblocked_Getter(mthis) native "IDBOpenDBRequest_onblocked_Getter";
  onblocked_Getter_(mthis) => onblocked_Getter(mthis);

  static onblocked_Setter(mthis, __arg_0) native "IDBOpenDBRequest_onblocked_Setter";
  onblocked_Setter_(mthis, __arg_0) => onblocked_Setter(mthis, __arg_0);

  static onupgradeneeded_Getter(mthis) native "IDBOpenDBRequest_onupgradeneeded_Getter";
  onupgradeneeded_Getter_(mthis) => onupgradeneeded_Getter(mthis);

  static onupgradeneeded_Setter(mthis, __arg_0) native "IDBOpenDBRequest_onupgradeneeded_Setter";
  onupgradeneeded_Setter_(mthis, __arg_0) => onupgradeneeded_Setter(mthis, __arg_0);

}

class BlinkIDBRequest extends BlinkEventTarget {
  static final instance = new BlinkIDBRequest();

  static error_Getter(mthis) native "IDBRequest_error_Getter";
  error_Getter_(mthis) => error_Getter(mthis);

  static onerror_Getter(mthis) native "IDBRequest_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "IDBRequest_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onsuccess_Getter(mthis) native "IDBRequest_onsuccess_Getter";
  onsuccess_Getter_(mthis) => onsuccess_Getter(mthis);

  static onsuccess_Setter(mthis, __arg_0) native "IDBRequest_onsuccess_Setter";
  onsuccess_Setter_(mthis, __arg_0) => onsuccess_Setter(mthis, __arg_0);

  static readyState_Getter(mthis) native "IDBRequest_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static result_Getter(mthis) native "IDBRequest_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static source_Getter(mthis) native "IDBRequest_source_Getter";
  source_Getter_(mthis) => source_Getter(mthis);

  static transaction_Getter(mthis) native "IDBRequest_transaction_Getter";
  transaction_Getter_(mthis) => transaction_Getter(mthis);

}

class BlinkIDBTransaction extends BlinkEventTarget {
  static final instance = new BlinkIDBTransaction();

  static abort_Callback_0(mthis) native "IDBTransaction_abort_Callback";
  abort_Callback_0_(mthis) => abort_Callback_0(mthis);

  static abort_Callback_1(mthis, __arg_0) native "IDBTransaction_abort_Callback";
  abort_Callback_1_(mthis, __arg_0) => abort_Callback_1(mthis, __arg_0);

  static abort_Callback_2(mthis, __arg_0, __arg_1) native "IDBTransaction_abort_Callback";
  abort_Callback_2_(mthis, __arg_0, __arg_1) => abort_Callback_2(mthis, __arg_0, __arg_1);

  static db_Getter(mthis) native "IDBTransaction_db_Getter";
  db_Getter_(mthis) => db_Getter(mthis);

  static error_Getter(mthis) native "IDBTransaction_error_Getter";
  error_Getter_(mthis) => error_Getter(mthis);

  static mode_Getter(mthis) native "IDBTransaction_mode_Getter";
  mode_Getter_(mthis) => mode_Getter(mthis);

  static objectStore_Callback_0(mthis) native "IDBTransaction_objectStore_Callback";
  objectStore_Callback_0_(mthis) => objectStore_Callback_0(mthis);

  static objectStore_Callback_1(mthis, __arg_0) native "IDBTransaction_objectStore_Callback";
  objectStore_Callback_1_(mthis, __arg_0) => objectStore_Callback_1(mthis, __arg_0);

  static objectStore_Callback_2(mthis, __arg_0, __arg_1) native "IDBTransaction_objectStore_Callback";
  objectStore_Callback_2_(mthis, __arg_0, __arg_1) => objectStore_Callback_2(mthis, __arg_0, __arg_1);

  static objectStore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "IDBTransaction_objectStore_Callback";
  objectStore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => objectStore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static onabort_Getter(mthis) native "IDBTransaction_onabort_Getter";
  onabort_Getter_(mthis) => onabort_Getter(mthis);

  static onabort_Setter(mthis, __arg_0) native "IDBTransaction_onabort_Setter";
  onabort_Setter_(mthis, __arg_0) => onabort_Setter(mthis, __arg_0);

  static oncomplete_Getter(mthis) native "IDBTransaction_oncomplete_Getter";
  oncomplete_Getter_(mthis) => oncomplete_Getter(mthis);

  static oncomplete_Setter(mthis, __arg_0) native "IDBTransaction_oncomplete_Setter";
  oncomplete_Setter_(mthis, __arg_0) => oncomplete_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "IDBTransaction_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "IDBTransaction_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

}

class BlinkIDBVersionChangeEvent extends BlinkEvent {
  static final instance = new BlinkIDBVersionChangeEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "IDBVersionChangeEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static dataLossMessage_Getter(mthis) native "IDBVersionChangeEvent_dataLossMessage_Getter";
  dataLossMessage_Getter_(mthis) => dataLossMessage_Getter(mthis);

  static dataLoss_Getter(mthis) native "IDBVersionChangeEvent_dataLoss_Getter";
  dataLoss_Getter_(mthis) => dataLoss_Getter(mthis);

  static newVersion_Getter(mthis) native "IDBVersionChangeEvent_newVersion_Getter";
  newVersion_Getter_(mthis) => newVersion_Getter(mthis);

  static oldVersion_Getter(mthis) native "IDBVersionChangeEvent_oldVersion_Getter";
  oldVersion_Getter_(mthis) => oldVersion_Getter(mthis);

}

class BlinkImageBitmap {
  static final instance = new BlinkImageBitmap();

  static height_Getter(mthis) native "ImageBitmap_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static width_Getter(mthis) native "ImageBitmap_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

}

class BlinkImageData {
  static final instance = new BlinkImageData();

  static constructorCallback_0() native "ImageData_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "ImageData_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "ImageData_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "ImageData_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "ImageData_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "ImageData_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static data_Getter(mthis) native "ImageData_data_Getter";
  data_Getter_(mthis) => data_Getter(mthis);

  static height_Getter(mthis) native "ImageData_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static width_Getter(mthis) native "ImageData_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

}

class BlinkInjectedScriptHost {
  static final instance = new BlinkInjectedScriptHost();

  static callFunction_Callback_0(mthis) native "InjectedScriptHost_callFunction_Callback";
  callFunction_Callback_0_(mthis) => callFunction_Callback_0(mthis);

  static callFunction_Callback_1(mthis, __arg_0) native "InjectedScriptHost_callFunction_Callback";
  callFunction_Callback_1_(mthis, __arg_0) => callFunction_Callback_1(mthis, __arg_0);

  static callFunction_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_callFunction_Callback";
  callFunction_Callback_2_(mthis, __arg_0, __arg_1) => callFunction_Callback_2(mthis, __arg_0, __arg_1);

  static callFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_callFunction_Callback";
  callFunction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => callFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static callFunction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InjectedScriptHost_callFunction_Callback";
  callFunction_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => callFunction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static callFunction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "InjectedScriptHost_callFunction_Callback";
  callFunction_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => callFunction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static clearConsoleMessages_Callback_0(mthis) native "InjectedScriptHost_clearConsoleMessages_Callback";
  clearConsoleMessages_Callback_0_(mthis) => clearConsoleMessages_Callback_0(mthis);

  static clearConsoleMessages_Callback_1(mthis, __arg_0) native "InjectedScriptHost_clearConsoleMessages_Callback";
  clearConsoleMessages_Callback_1_(mthis, __arg_0) => clearConsoleMessages_Callback_1(mthis, __arg_0);

  static clearConsoleMessages_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_clearConsoleMessages_Callback";
  clearConsoleMessages_Callback_2_(mthis, __arg_0, __arg_1) => clearConsoleMessages_Callback_2(mthis, __arg_0, __arg_1);

  static collectionEntries_Callback_0(mthis) native "InjectedScriptHost_collectionEntries_Callback";
  collectionEntries_Callback_0_(mthis) => collectionEntries_Callback_0(mthis);

  static collectionEntries_Callback_1(mthis, __arg_0) native "InjectedScriptHost_collectionEntries_Callback";
  collectionEntries_Callback_1_(mthis, __arg_0) => collectionEntries_Callback_1(mthis, __arg_0);

  static collectionEntries_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_collectionEntries_Callback";
  collectionEntries_Callback_2_(mthis, __arg_0, __arg_1) => collectionEntries_Callback_2(mthis, __arg_0, __arg_1);

  static collectionEntries_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_collectionEntries_Callback";
  collectionEntries_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => collectionEntries_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static debugFunction_Callback_0(mthis) native "InjectedScriptHost_debugFunction_Callback";
  debugFunction_Callback_0_(mthis) => debugFunction_Callback_0(mthis);

  static debugFunction_Callback_1(mthis, __arg_0) native "InjectedScriptHost_debugFunction_Callback";
  debugFunction_Callback_1_(mthis, __arg_0) => debugFunction_Callback_1(mthis, __arg_0);

  static debugFunction_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_debugFunction_Callback";
  debugFunction_Callback_2_(mthis, __arg_0, __arg_1) => debugFunction_Callback_2(mthis, __arg_0, __arg_1);

  static debugFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_debugFunction_Callback";
  debugFunction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => debugFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static eval_Callback_0(mthis) native "InjectedScriptHost_eval_Callback";
  eval_Callback_0_(mthis) => eval_Callback_0(mthis);

  static eval_Callback_1(mthis, __arg_0) native "InjectedScriptHost_eval_Callback";
  eval_Callback_1_(mthis, __arg_0) => eval_Callback_1(mthis, __arg_0);

  static eval_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_eval_Callback";
  eval_Callback_2_(mthis, __arg_0, __arg_1) => eval_Callback_2(mthis, __arg_0, __arg_1);

  static eval_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_eval_Callback";
  eval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => eval_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static evaluateWithExceptionDetails_Callback_0(mthis) native "InjectedScriptHost_evaluateWithExceptionDetails_Callback";
  evaluateWithExceptionDetails_Callback_0_(mthis) => evaluateWithExceptionDetails_Callback_0(mthis);

  static evaluateWithExceptionDetails_Callback_1(mthis, __arg_0) native "InjectedScriptHost_evaluateWithExceptionDetails_Callback";
  evaluateWithExceptionDetails_Callback_1_(mthis, __arg_0) => evaluateWithExceptionDetails_Callback_1(mthis, __arg_0);

  static evaluateWithExceptionDetails_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_evaluateWithExceptionDetails_Callback";
  evaluateWithExceptionDetails_Callback_2_(mthis, __arg_0, __arg_1) => evaluateWithExceptionDetails_Callback_2(mthis, __arg_0, __arg_1);

  static evaluateWithExceptionDetails_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_evaluateWithExceptionDetails_Callback";
  evaluateWithExceptionDetails_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => evaluateWithExceptionDetails_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static functionDetails_Callback_0(mthis) native "InjectedScriptHost_functionDetails_Callback";
  functionDetails_Callback_0_(mthis) => functionDetails_Callback_0(mthis);

  static functionDetails_Callback_1(mthis, __arg_0) native "InjectedScriptHost_functionDetails_Callback";
  functionDetails_Callback_1_(mthis, __arg_0) => functionDetails_Callback_1(mthis, __arg_0);

  static functionDetails_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_functionDetails_Callback";
  functionDetails_Callback_2_(mthis, __arg_0, __arg_1) => functionDetails_Callback_2(mthis, __arg_0, __arg_1);

  static functionDetails_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_functionDetails_Callback";
  functionDetails_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => functionDetails_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getEventListeners_Callback_0(mthis) native "InjectedScriptHost_getEventListeners_Callback";
  getEventListeners_Callback_0_(mthis) => getEventListeners_Callback_0(mthis);

  static getEventListeners_Callback_1(mthis, __arg_0) native "InjectedScriptHost_getEventListeners_Callback";
  getEventListeners_Callback_1_(mthis, __arg_0) => getEventListeners_Callback_1(mthis, __arg_0);

  static getEventListeners_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_getEventListeners_Callback";
  getEventListeners_Callback_2_(mthis, __arg_0, __arg_1) => getEventListeners_Callback_2(mthis, __arg_0, __arg_1);

  static getEventListeners_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_getEventListeners_Callback";
  getEventListeners_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getEventListeners_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getInternalProperties_Callback_0(mthis) native "InjectedScriptHost_getInternalProperties_Callback";
  getInternalProperties_Callback_0_(mthis) => getInternalProperties_Callback_0(mthis);

  static getInternalProperties_Callback_1(mthis, __arg_0) native "InjectedScriptHost_getInternalProperties_Callback";
  getInternalProperties_Callback_1_(mthis, __arg_0) => getInternalProperties_Callback_1(mthis, __arg_0);

  static getInternalProperties_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_getInternalProperties_Callback";
  getInternalProperties_Callback_2_(mthis, __arg_0, __arg_1) => getInternalProperties_Callback_2(mthis, __arg_0, __arg_1);

  static getInternalProperties_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_getInternalProperties_Callback";
  getInternalProperties_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getInternalProperties_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static inspect_Callback_0(mthis) native "InjectedScriptHost_inspect_Callback";
  inspect_Callback_0_(mthis) => inspect_Callback_0(mthis);

  static inspect_Callback_1(mthis, __arg_0) native "InjectedScriptHost_inspect_Callback";
  inspect_Callback_1_(mthis, __arg_0) => inspect_Callback_1(mthis, __arg_0);

  static inspect_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_inspect_Callback";
  inspect_Callback_2_(mthis, __arg_0, __arg_1) => inspect_Callback_2(mthis, __arg_0, __arg_1);

  static inspect_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_inspect_Callback";
  inspect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => inspect_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static inspect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InjectedScriptHost_inspect_Callback";
  inspect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => inspect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static inspectedObject_Callback_0(mthis) native "InjectedScriptHost_inspectedObject_Callback";
  inspectedObject_Callback_0_(mthis) => inspectedObject_Callback_0(mthis);

  static inspectedObject_Callback_1(mthis, __arg_0) native "InjectedScriptHost_inspectedObject_Callback";
  inspectedObject_Callback_1_(mthis, __arg_0) => inspectedObject_Callback_1(mthis, __arg_0);

  static inspectedObject_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_inspectedObject_Callback";
  inspectedObject_Callback_2_(mthis, __arg_0, __arg_1) => inspectedObject_Callback_2(mthis, __arg_0, __arg_1);

  static inspectedObject_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_inspectedObject_Callback";
  inspectedObject_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => inspectedObject_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static internalConstructorName_Callback_0(mthis) native "InjectedScriptHost_internalConstructorName_Callback";
  internalConstructorName_Callback_0_(mthis) => internalConstructorName_Callback_0(mthis);

  static internalConstructorName_Callback_1(mthis, __arg_0) native "InjectedScriptHost_internalConstructorName_Callback";
  internalConstructorName_Callback_1_(mthis, __arg_0) => internalConstructorName_Callback_1(mthis, __arg_0);

  static internalConstructorName_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_internalConstructorName_Callback";
  internalConstructorName_Callback_2_(mthis, __arg_0, __arg_1) => internalConstructorName_Callback_2(mthis, __arg_0, __arg_1);

  static internalConstructorName_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_internalConstructorName_Callback";
  internalConstructorName_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => internalConstructorName_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isHTMLAllCollection_Callback_0(mthis) native "InjectedScriptHost_isHTMLAllCollection_Callback";
  isHTMLAllCollection_Callback_0_(mthis) => isHTMLAllCollection_Callback_0(mthis);

  static isHTMLAllCollection_Callback_1(mthis, __arg_0) native "InjectedScriptHost_isHTMLAllCollection_Callback";
  isHTMLAllCollection_Callback_1_(mthis, __arg_0) => isHTMLAllCollection_Callback_1(mthis, __arg_0);

  static isHTMLAllCollection_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_isHTMLAllCollection_Callback";
  isHTMLAllCollection_Callback_2_(mthis, __arg_0, __arg_1) => isHTMLAllCollection_Callback_2(mthis, __arg_0, __arg_1);

  static isHTMLAllCollection_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_isHTMLAllCollection_Callback";
  isHTMLAllCollection_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isHTMLAllCollection_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static monitorFunction_Callback_0(mthis) native "InjectedScriptHost_monitorFunction_Callback";
  monitorFunction_Callback_0_(mthis) => monitorFunction_Callback_0(mthis);

  static monitorFunction_Callback_1(mthis, __arg_0) native "InjectedScriptHost_monitorFunction_Callback";
  monitorFunction_Callback_1_(mthis, __arg_0) => monitorFunction_Callback_1(mthis, __arg_0);

  static monitorFunction_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_monitorFunction_Callback";
  monitorFunction_Callback_2_(mthis, __arg_0, __arg_1) => monitorFunction_Callback_2(mthis, __arg_0, __arg_1);

  static monitorFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_monitorFunction_Callback";
  monitorFunction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => monitorFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setFunctionVariableValue_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_setFunctionVariableValue_Callback";
  setFunctionVariableValue_Callback_2_(mthis, __arg_0, __arg_1) => setFunctionVariableValue_Callback_2(mthis, __arg_0, __arg_1);

  static setFunctionVariableValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_setFunctionVariableValue_Callback";
  setFunctionVariableValue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setFunctionVariableValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setFunctionVariableValue_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InjectedScriptHost_setFunctionVariableValue_Callback";
  setFunctionVariableValue_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setFunctionVariableValue_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setFunctionVariableValue_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "InjectedScriptHost_setFunctionVariableValue_Callback";
  setFunctionVariableValue_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setFunctionVariableValue_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setFunctionVariableValue_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "InjectedScriptHost_setFunctionVariableValue_Callback";
  setFunctionVariableValue_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => setFunctionVariableValue_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static setNonEnumProperty_Callback_1(mthis, __arg_0) native "InjectedScriptHost_setNonEnumProperty_Callback";
  setNonEnumProperty_Callback_1_(mthis, __arg_0) => setNonEnumProperty_Callback_1(mthis, __arg_0);

  static setNonEnumProperty_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_setNonEnumProperty_Callback";
  setNonEnumProperty_Callback_2_(mthis, __arg_0, __arg_1) => setNonEnumProperty_Callback_2(mthis, __arg_0, __arg_1);

  static setNonEnumProperty_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_setNonEnumProperty_Callback";
  setNonEnumProperty_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setNonEnumProperty_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setNonEnumProperty_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InjectedScriptHost_setNonEnumProperty_Callback";
  setNonEnumProperty_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setNonEnumProperty_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setNonEnumProperty_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "InjectedScriptHost_setNonEnumProperty_Callback";
  setNonEnumProperty_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setNonEnumProperty_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static subtype_Callback_0(mthis) native "InjectedScriptHost_subtype_Callback";
  subtype_Callback_0_(mthis) => subtype_Callback_0(mthis);

  static subtype_Callback_1(mthis, __arg_0) native "InjectedScriptHost_subtype_Callback";
  subtype_Callback_1_(mthis, __arg_0) => subtype_Callback_1(mthis, __arg_0);

  static subtype_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_subtype_Callback";
  subtype_Callback_2_(mthis, __arg_0, __arg_1) => subtype_Callback_2(mthis, __arg_0, __arg_1);

  static subtype_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_subtype_Callback";
  subtype_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => subtype_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static suppressWarningsAndCallFunction_Callback_0(mthis) native "InjectedScriptHost_suppressWarningsAndCallFunction_Callback";
  suppressWarningsAndCallFunction_Callback_0_(mthis) => suppressWarningsAndCallFunction_Callback_0(mthis);

  static suppressWarningsAndCallFunction_Callback_1(mthis, __arg_0) native "InjectedScriptHost_suppressWarningsAndCallFunction_Callback";
  suppressWarningsAndCallFunction_Callback_1_(mthis, __arg_0) => suppressWarningsAndCallFunction_Callback_1(mthis, __arg_0);

  static suppressWarningsAndCallFunction_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_suppressWarningsAndCallFunction_Callback";
  suppressWarningsAndCallFunction_Callback_2_(mthis, __arg_0, __arg_1) => suppressWarningsAndCallFunction_Callback_2(mthis, __arg_0, __arg_1);

  static suppressWarningsAndCallFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_suppressWarningsAndCallFunction_Callback";
  suppressWarningsAndCallFunction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => suppressWarningsAndCallFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static suppressWarningsAndCallFunction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InjectedScriptHost_suppressWarningsAndCallFunction_Callback";
  suppressWarningsAndCallFunction_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => suppressWarningsAndCallFunction_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static suppressWarningsAndCallFunction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "InjectedScriptHost_suppressWarningsAndCallFunction_Callback";
  suppressWarningsAndCallFunction_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => suppressWarningsAndCallFunction_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static undebugFunction_Callback_0(mthis) native "InjectedScriptHost_undebugFunction_Callback";
  undebugFunction_Callback_0_(mthis) => undebugFunction_Callback_0(mthis);

  static undebugFunction_Callback_1(mthis, __arg_0) native "InjectedScriptHost_undebugFunction_Callback";
  undebugFunction_Callback_1_(mthis, __arg_0) => undebugFunction_Callback_1(mthis, __arg_0);

  static undebugFunction_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_undebugFunction_Callback";
  undebugFunction_Callback_2_(mthis, __arg_0, __arg_1) => undebugFunction_Callback_2(mthis, __arg_0, __arg_1);

  static undebugFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_undebugFunction_Callback";
  undebugFunction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => undebugFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static unmonitorFunction_Callback_0(mthis) native "InjectedScriptHost_unmonitorFunction_Callback";
  unmonitorFunction_Callback_0_(mthis) => unmonitorFunction_Callback_0(mthis);

  static unmonitorFunction_Callback_1(mthis, __arg_0) native "InjectedScriptHost_unmonitorFunction_Callback";
  unmonitorFunction_Callback_1_(mthis, __arg_0) => unmonitorFunction_Callback_1(mthis, __arg_0);

  static unmonitorFunction_Callback_2(mthis, __arg_0, __arg_1) native "InjectedScriptHost_unmonitorFunction_Callback";
  unmonitorFunction_Callback_2_(mthis, __arg_0, __arg_1) => unmonitorFunction_Callback_2(mthis, __arg_0, __arg_1);

  static unmonitorFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InjectedScriptHost_unmonitorFunction_Callback";
  unmonitorFunction_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => unmonitorFunction_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkInputMethodContext extends BlinkEventTarget {
  static final instance = new BlinkInputMethodContext();

  static compositionEndOffset_Getter(mthis) native "InputMethodContext_compositionEndOffset_Getter";
  compositionEndOffset_Getter_(mthis) => compositionEndOffset_Getter(mthis);

  static compositionStartOffset_Getter(mthis) native "InputMethodContext_compositionStartOffset_Getter";
  compositionStartOffset_Getter_(mthis) => compositionStartOffset_Getter(mthis);

  static confirmComposition_Callback_0(mthis) native "InputMethodContext_confirmComposition_Callback";
  confirmComposition_Callback_0_(mthis) => confirmComposition_Callback_0(mthis);

  static confirmComposition_Callback_1(mthis, __arg_0) native "InputMethodContext_confirmComposition_Callback";
  confirmComposition_Callback_1_(mthis, __arg_0) => confirmComposition_Callback_1(mthis, __arg_0);

  static confirmComposition_Callback_2(mthis, __arg_0, __arg_1) native "InputMethodContext_confirmComposition_Callback";
  confirmComposition_Callback_2_(mthis, __arg_0, __arg_1) => confirmComposition_Callback_2(mthis, __arg_0, __arg_1);

  static locale_Getter(mthis) native "InputMethodContext_locale_Getter";
  locale_Getter_(mthis) => locale_Getter(mthis);

  static oncandidatewindowhide_Getter(mthis) native "InputMethodContext_oncandidatewindowhide_Getter";
  oncandidatewindowhide_Getter_(mthis) => oncandidatewindowhide_Getter(mthis);

  static oncandidatewindowhide_Setter(mthis, __arg_0) native "InputMethodContext_oncandidatewindowhide_Setter";
  oncandidatewindowhide_Setter_(mthis, __arg_0) => oncandidatewindowhide_Setter(mthis, __arg_0);

  static oncandidatewindowshow_Getter(mthis) native "InputMethodContext_oncandidatewindowshow_Getter";
  oncandidatewindowshow_Getter_(mthis) => oncandidatewindowshow_Getter(mthis);

  static oncandidatewindowshow_Setter(mthis, __arg_0) native "InputMethodContext_oncandidatewindowshow_Setter";
  oncandidatewindowshow_Setter_(mthis, __arg_0) => oncandidatewindowshow_Setter(mthis, __arg_0);

  static oncandidatewindowupdate_Getter(mthis) native "InputMethodContext_oncandidatewindowupdate_Getter";
  oncandidatewindowupdate_Getter_(mthis) => oncandidatewindowupdate_Getter(mthis);

  static oncandidatewindowupdate_Setter(mthis, __arg_0) native "InputMethodContext_oncandidatewindowupdate_Setter";
  oncandidatewindowupdate_Setter_(mthis, __arg_0) => oncandidatewindowupdate_Setter(mthis, __arg_0);

  static target_Getter(mthis) native "InputMethodContext_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

}

class BlinkInspectorFrontendHost {
  static final instance = new BlinkInspectorFrontendHost();

  static copyText_Callback_0(mthis) native "InspectorFrontendHost_copyText_Callback";
  copyText_Callback_0_(mthis) => copyText_Callback_0(mthis);

  static copyText_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_copyText_Callback";
  copyText_Callback_1_(mthis, __arg_0) => copyText_Callback_1(mthis, __arg_0);

  static copyText_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_copyText_Callback";
  copyText_Callback_2_(mthis, __arg_0, __arg_1) => copyText_Callback_2(mthis, __arg_0, __arg_1);

  static copyText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_copyText_Callback";
  copyText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => copyText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getSelectionBackgroundColor_Callback_0(mthis) native "InspectorFrontendHost_getSelectionBackgroundColor_Callback";
  getSelectionBackgroundColor_Callback_0_(mthis) => getSelectionBackgroundColor_Callback_0(mthis);

  static getSelectionBackgroundColor_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_getSelectionBackgroundColor_Callback";
  getSelectionBackgroundColor_Callback_1_(mthis, __arg_0) => getSelectionBackgroundColor_Callback_1(mthis, __arg_0);

  static getSelectionBackgroundColor_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_getSelectionBackgroundColor_Callback";
  getSelectionBackgroundColor_Callback_2_(mthis, __arg_0, __arg_1) => getSelectionBackgroundColor_Callback_2(mthis, __arg_0, __arg_1);

  static getSelectionForegroundColor_Callback_0(mthis) native "InspectorFrontendHost_getSelectionForegroundColor_Callback";
  getSelectionForegroundColor_Callback_0_(mthis) => getSelectionForegroundColor_Callback_0(mthis);

  static getSelectionForegroundColor_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_getSelectionForegroundColor_Callback";
  getSelectionForegroundColor_Callback_1_(mthis, __arg_0) => getSelectionForegroundColor_Callback_1(mthis, __arg_0);

  static getSelectionForegroundColor_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_getSelectionForegroundColor_Callback";
  getSelectionForegroundColor_Callback_2_(mthis, __arg_0, __arg_1) => getSelectionForegroundColor_Callback_2(mthis, __arg_0, __arg_1);

  static isHostedMode_Callback_0(mthis) native "InspectorFrontendHost_isHostedMode_Callback";
  isHostedMode_Callback_0_(mthis) => isHostedMode_Callback_0(mthis);

  static isHostedMode_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_isHostedMode_Callback";
  isHostedMode_Callback_1_(mthis, __arg_0) => isHostedMode_Callback_1(mthis, __arg_0);

  static isHostedMode_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_isHostedMode_Callback";
  isHostedMode_Callback_2_(mthis, __arg_0, __arg_1) => isHostedMode_Callback_2(mthis, __arg_0, __arg_1);

  static isUnderTest_Callback_0(mthis) native "InspectorFrontendHost_isUnderTest_Callback";
  isUnderTest_Callback_0_(mthis) => isUnderTest_Callback_0(mthis);

  static isUnderTest_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_isUnderTest_Callback";
  isUnderTest_Callback_1_(mthis, __arg_0) => isUnderTest_Callback_1(mthis, __arg_0);

  static isUnderTest_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_isUnderTest_Callback";
  isUnderTest_Callback_2_(mthis, __arg_0, __arg_1) => isUnderTest_Callback_2(mthis, __arg_0, __arg_1);

  static isolatedFileSystem_Callback_0(mthis) native "InspectorFrontendHost_isolatedFileSystem_Callback";
  isolatedFileSystem_Callback_0_(mthis) => isolatedFileSystem_Callback_0(mthis);

  static isolatedFileSystem_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_isolatedFileSystem_Callback";
  isolatedFileSystem_Callback_1_(mthis, __arg_0) => isolatedFileSystem_Callback_1(mthis, __arg_0);

  static isolatedFileSystem_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_isolatedFileSystem_Callback";
  isolatedFileSystem_Callback_2_(mthis, __arg_0, __arg_1) => isolatedFileSystem_Callback_2(mthis, __arg_0, __arg_1);

  static isolatedFileSystem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_isolatedFileSystem_Callback";
  isolatedFileSystem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isolatedFileSystem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isolatedFileSystem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InspectorFrontendHost_isolatedFileSystem_Callback";
  isolatedFileSystem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => isolatedFileSystem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static platform_Callback_0(mthis) native "InspectorFrontendHost_platform_Callback";
  platform_Callback_0_(mthis) => platform_Callback_0(mthis);

  static platform_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_platform_Callback";
  platform_Callback_1_(mthis, __arg_0) => platform_Callback_1(mthis, __arg_0);

  static platform_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_platform_Callback";
  platform_Callback_2_(mthis, __arg_0, __arg_1) => platform_Callback_2(mthis, __arg_0, __arg_1);

  static port_Callback_0(mthis) native "InspectorFrontendHost_port_Callback";
  port_Callback_0_(mthis) => port_Callback_0(mthis);

  static port_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_port_Callback";
  port_Callback_1_(mthis, __arg_0) => port_Callback_1(mthis, __arg_0);

  static port_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_port_Callback";
  port_Callback_2_(mthis, __arg_0, __arg_1) => port_Callback_2(mthis, __arg_0, __arg_1);

  static recordActionTaken_Callback_0(mthis) native "InspectorFrontendHost_recordActionTaken_Callback";
  recordActionTaken_Callback_0_(mthis) => recordActionTaken_Callback_0(mthis);

  static recordActionTaken_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_recordActionTaken_Callback";
  recordActionTaken_Callback_1_(mthis, __arg_0) => recordActionTaken_Callback_1(mthis, __arg_0);

  static recordActionTaken_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_recordActionTaken_Callback";
  recordActionTaken_Callback_2_(mthis, __arg_0, __arg_1) => recordActionTaken_Callback_2(mthis, __arg_0, __arg_1);

  static recordActionTaken_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_recordActionTaken_Callback";
  recordActionTaken_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => recordActionTaken_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static recordPanelShown_Callback_0(mthis) native "InspectorFrontendHost_recordPanelShown_Callback";
  recordPanelShown_Callback_0_(mthis) => recordPanelShown_Callback_0(mthis);

  static recordPanelShown_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_recordPanelShown_Callback";
  recordPanelShown_Callback_1_(mthis, __arg_0) => recordPanelShown_Callback_1(mthis, __arg_0);

  static recordPanelShown_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_recordPanelShown_Callback";
  recordPanelShown_Callback_2_(mthis, __arg_0, __arg_1) => recordPanelShown_Callback_2(mthis, __arg_0, __arg_1);

  static recordPanelShown_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_recordPanelShown_Callback";
  recordPanelShown_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => recordPanelShown_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static sendMessageToBackend_Callback_0(mthis) native "InspectorFrontendHost_sendMessageToBackend_Callback";
  sendMessageToBackend_Callback_0_(mthis) => sendMessageToBackend_Callback_0(mthis);

  static sendMessageToBackend_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_sendMessageToBackend_Callback";
  sendMessageToBackend_Callback_1_(mthis, __arg_0) => sendMessageToBackend_Callback_1(mthis, __arg_0);

  static sendMessageToBackend_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_sendMessageToBackend_Callback";
  sendMessageToBackend_Callback_2_(mthis, __arg_0, __arg_1) => sendMessageToBackend_Callback_2(mthis, __arg_0, __arg_1);

  static sendMessageToBackend_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_sendMessageToBackend_Callback";
  sendMessageToBackend_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => sendMessageToBackend_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static sendMessageToEmbedder_Callback_0(mthis) native "InspectorFrontendHost_sendMessageToEmbedder_Callback";
  sendMessageToEmbedder_Callback_0_(mthis) => sendMessageToEmbedder_Callback_0(mthis);

  static sendMessageToEmbedder_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_sendMessageToEmbedder_Callback";
  sendMessageToEmbedder_Callback_1_(mthis, __arg_0) => sendMessageToEmbedder_Callback_1(mthis, __arg_0);

  static sendMessageToEmbedder_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_sendMessageToEmbedder_Callback";
  sendMessageToEmbedder_Callback_2_(mthis, __arg_0, __arg_1) => sendMessageToEmbedder_Callback_2(mthis, __arg_0, __arg_1);

  static sendMessageToEmbedder_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_sendMessageToEmbedder_Callback";
  sendMessageToEmbedder_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => sendMessageToEmbedder_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setInjectedScriptForOrigin_Callback_0(mthis) native "InspectorFrontendHost_setInjectedScriptForOrigin_Callback";
  setInjectedScriptForOrigin_Callback_0_(mthis) => setInjectedScriptForOrigin_Callback_0(mthis);

  static setInjectedScriptForOrigin_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_setInjectedScriptForOrigin_Callback";
  setInjectedScriptForOrigin_Callback_1_(mthis, __arg_0) => setInjectedScriptForOrigin_Callback_1(mthis, __arg_0);

  static setInjectedScriptForOrigin_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_setInjectedScriptForOrigin_Callback";
  setInjectedScriptForOrigin_Callback_2_(mthis, __arg_0, __arg_1) => setInjectedScriptForOrigin_Callback_2(mthis, __arg_0, __arg_1);

  static setInjectedScriptForOrigin_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_setInjectedScriptForOrigin_Callback";
  setInjectedScriptForOrigin_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setInjectedScriptForOrigin_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setInjectedScriptForOrigin_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InspectorFrontendHost_setInjectedScriptForOrigin_Callback";
  setInjectedScriptForOrigin_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setInjectedScriptForOrigin_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setZoomFactor_Callback_0(mthis) native "InspectorFrontendHost_setZoomFactor_Callback";
  setZoomFactor_Callback_0_(mthis) => setZoomFactor_Callback_0(mthis);

  static setZoomFactor_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_setZoomFactor_Callback";
  setZoomFactor_Callback_1_(mthis, __arg_0) => setZoomFactor_Callback_1(mthis, __arg_0);

  static setZoomFactor_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_setZoomFactor_Callback";
  setZoomFactor_Callback_2_(mthis, __arg_0, __arg_1) => setZoomFactor_Callback_2(mthis, __arg_0, __arg_1);

  static setZoomFactor_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_setZoomFactor_Callback";
  setZoomFactor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setZoomFactor_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static showContextMenuAtPoint_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_showContextMenuAtPoint_Callback";
  showContextMenuAtPoint_Callback_1_(mthis, __arg_0) => showContextMenuAtPoint_Callback_1(mthis, __arg_0);

  static showContextMenuAtPoint_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_showContextMenuAtPoint_Callback";
  showContextMenuAtPoint_Callback_2_(mthis, __arg_0, __arg_1) => showContextMenuAtPoint_Callback_2(mthis, __arg_0, __arg_1);

  static showContextMenuAtPoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_showContextMenuAtPoint_Callback";
  showContextMenuAtPoint_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => showContextMenuAtPoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static showContextMenuAtPoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InspectorFrontendHost_showContextMenuAtPoint_Callback";
  showContextMenuAtPoint_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => showContextMenuAtPoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static showContextMenuAtPoint_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "InspectorFrontendHost_showContextMenuAtPoint_Callback";
  showContextMenuAtPoint_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => showContextMenuAtPoint_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static showContextMenu_Callback_0(mthis) native "InspectorFrontendHost_showContextMenu_Callback";
  showContextMenu_Callback_0_(mthis) => showContextMenu_Callback_0(mthis);

  static showContextMenu_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_showContextMenu_Callback";
  showContextMenu_Callback_1_(mthis, __arg_0) => showContextMenu_Callback_1(mthis, __arg_0);

  static showContextMenu_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_showContextMenu_Callback";
  showContextMenu_Callback_2_(mthis, __arg_0, __arg_1) => showContextMenu_Callback_2(mthis, __arg_0, __arg_1);

  static showContextMenu_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_showContextMenu_Callback";
  showContextMenu_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => showContextMenu_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static showContextMenu_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "InspectorFrontendHost_showContextMenu_Callback";
  showContextMenu_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => showContextMenu_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static upgradeDraggedFileSystemPermissions_Callback_0(mthis) native "InspectorFrontendHost_upgradeDraggedFileSystemPermissions_Callback";
  upgradeDraggedFileSystemPermissions_Callback_0_(mthis) => upgradeDraggedFileSystemPermissions_Callback_0(mthis);

  static upgradeDraggedFileSystemPermissions_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_upgradeDraggedFileSystemPermissions_Callback";
  upgradeDraggedFileSystemPermissions_Callback_1_(mthis, __arg_0) => upgradeDraggedFileSystemPermissions_Callback_1(mthis, __arg_0);

  static upgradeDraggedFileSystemPermissions_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_upgradeDraggedFileSystemPermissions_Callback";
  upgradeDraggedFileSystemPermissions_Callback_2_(mthis, __arg_0, __arg_1) => upgradeDraggedFileSystemPermissions_Callback_2(mthis, __arg_0, __arg_1);

  static upgradeDraggedFileSystemPermissions_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "InspectorFrontendHost_upgradeDraggedFileSystemPermissions_Callback";
  upgradeDraggedFileSystemPermissions_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => upgradeDraggedFileSystemPermissions_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static zoomFactor_Callback_0(mthis) native "InspectorFrontendHost_zoomFactor_Callback";
  zoomFactor_Callback_0_(mthis) => zoomFactor_Callback_0(mthis);

  static zoomFactor_Callback_1(mthis, __arg_0) native "InspectorFrontendHost_zoomFactor_Callback";
  zoomFactor_Callback_1_(mthis, __arg_0) => zoomFactor_Callback_1(mthis, __arg_0);

  static zoomFactor_Callback_2(mthis, __arg_0, __arg_1) native "InspectorFrontendHost_zoomFactor_Callback";
  zoomFactor_Callback_2_(mthis, __arg_0, __arg_1) => zoomFactor_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkInspectorOverlayHost {
  static final instance = new BlinkInspectorOverlayHost();

  static resume_Callback_0(mthis) native "InspectorOverlayHost_resume_Callback";
  resume_Callback_0_(mthis) => resume_Callback_0(mthis);

  static resume_Callback_1(mthis, __arg_0) native "InspectorOverlayHost_resume_Callback";
  resume_Callback_1_(mthis, __arg_0) => resume_Callback_1(mthis, __arg_0);

  static resume_Callback_2(mthis, __arg_0, __arg_1) native "InspectorOverlayHost_resume_Callback";
  resume_Callback_2_(mthis, __arg_0, __arg_1) => resume_Callback_2(mthis, __arg_0, __arg_1);

  static stepOver_Callback_0(mthis) native "InspectorOverlayHost_stepOver_Callback";
  stepOver_Callback_0_(mthis) => stepOver_Callback_0(mthis);

  static stepOver_Callback_1(mthis, __arg_0) native "InspectorOverlayHost_stepOver_Callback";
  stepOver_Callback_1_(mthis, __arg_0) => stepOver_Callback_1(mthis, __arg_0);

  static stepOver_Callback_2(mthis, __arg_0, __arg_1) native "InspectorOverlayHost_stepOver_Callback";
  stepOver_Callback_2_(mthis, __arg_0, __arg_1) => stepOver_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkInstallEvent extends BlinkExtendableEvent {
  static final instance = new BlinkInstallEvent();

  static reloadAll_Callback_0(mthis) native "InstallEvent_reloadAll_Callback";
  reloadAll_Callback_0_(mthis) => reloadAll_Callback_0(mthis);

  static reloadAll_Callback_1(mthis, __arg_0) native "InstallEvent_reloadAll_Callback";
  reloadAll_Callback_1_(mthis, __arg_0) => reloadAll_Callback_1(mthis, __arg_0);

  static reloadAll_Callback_2(mthis, __arg_0, __arg_1) native "InstallEvent_reloadAll_Callback";
  reloadAll_Callback_2_(mthis, __arg_0, __arg_1) => reloadAll_Callback_2(mthis, __arg_0, __arg_1);

  static replace_Callback_0(mthis) native "InstallEvent_replace_Callback";
  replace_Callback_0_(mthis) => replace_Callback_0(mthis);

  static replace_Callback_1(mthis, __arg_0) native "InstallEvent_replace_Callback";
  replace_Callback_1_(mthis, __arg_0) => replace_Callback_1(mthis, __arg_0);

  static replace_Callback_2(mthis, __arg_0, __arg_1) native "InstallEvent_replace_Callback";
  replace_Callback_2_(mthis, __arg_0, __arg_1) => replace_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkIterator {
  static final instance = new BlinkIterator();

  static next_Callback_0(mthis) native "Iterator_next_Callback";
  next_Callback_0_(mthis) => next_Callback_0(mthis);

  static next_Callback_1(mthis, __arg_0) native "Iterator_next_Callback";
  next_Callback_1_(mthis, __arg_0) => next_Callback_1(mthis, __arg_0);

  static next_Callback_2(mthis, __arg_0, __arg_1) native "Iterator_next_Callback";
  next_Callback_2_(mthis, __arg_0, __arg_1) => next_Callback_2(mthis, __arg_0, __arg_1);

  static next_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Iterator_next_Callback";
  next_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => next_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkJavaScriptCallFrame {
  static final instance = new BlinkJavaScriptCallFrame();

  static caller_Getter(mthis) native "JavaScriptCallFrame_caller_Getter";
  caller_Getter_(mthis) => caller_Getter(mthis);

  static column_Getter(mthis) native "JavaScriptCallFrame_column_Getter";
  column_Getter_(mthis) => column_Getter(mthis);

  static evaluateWithExceptionDetails_Callback_0(mthis) native "JavaScriptCallFrame_evaluateWithExceptionDetails_Callback";
  evaluateWithExceptionDetails_Callback_0_(mthis) => evaluateWithExceptionDetails_Callback_0(mthis);

  static evaluateWithExceptionDetails_Callback_1(mthis, __arg_0) native "JavaScriptCallFrame_evaluateWithExceptionDetails_Callback";
  evaluateWithExceptionDetails_Callback_1_(mthis, __arg_0) => evaluateWithExceptionDetails_Callback_1(mthis, __arg_0);

  static evaluateWithExceptionDetails_Callback_2(mthis, __arg_0, __arg_1) native "JavaScriptCallFrame_evaluateWithExceptionDetails_Callback";
  evaluateWithExceptionDetails_Callback_2_(mthis, __arg_0, __arg_1) => evaluateWithExceptionDetails_Callback_2(mthis, __arg_0, __arg_1);

  static evaluateWithExceptionDetails_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "JavaScriptCallFrame_evaluateWithExceptionDetails_Callback";
  evaluateWithExceptionDetails_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => evaluateWithExceptionDetails_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static functionName_Getter(mthis) native "JavaScriptCallFrame_functionName_Getter";
  functionName_Getter_(mthis) => functionName_Getter(mthis);

  static isAtReturn_Getter(mthis) native "JavaScriptCallFrame_isAtReturn_Getter";
  isAtReturn_Getter_(mthis) => isAtReturn_Getter(mthis);

  static line_Getter(mthis) native "JavaScriptCallFrame_line_Getter";
  line_Getter_(mthis) => line_Getter(mthis);

  static restart_Callback_0(mthis) native "JavaScriptCallFrame_restart_Callback";
  restart_Callback_0_(mthis) => restart_Callback_0(mthis);

  static restart_Callback_1(mthis, __arg_0) native "JavaScriptCallFrame_restart_Callback";
  restart_Callback_1_(mthis, __arg_0) => restart_Callback_1(mthis, __arg_0);

  static restart_Callback_2(mthis, __arg_0, __arg_1) native "JavaScriptCallFrame_restart_Callback";
  restart_Callback_2_(mthis, __arg_0, __arg_1) => restart_Callback_2(mthis, __arg_0, __arg_1);

  static returnValue_Getter(mthis) native "JavaScriptCallFrame_returnValue_Getter";
  returnValue_Getter_(mthis) => returnValue_Getter(mthis);

  static scopeChain_Getter(mthis) native "JavaScriptCallFrame_scopeChain_Getter";
  scopeChain_Getter_(mthis) => scopeChain_Getter(mthis);

  static scopeType_Callback_0(mthis) native "JavaScriptCallFrame_scopeType_Callback";
  scopeType_Callback_0_(mthis) => scopeType_Callback_0(mthis);

  static scopeType_Callback_1(mthis, __arg_0) native "JavaScriptCallFrame_scopeType_Callback";
  scopeType_Callback_1_(mthis, __arg_0) => scopeType_Callback_1(mthis, __arg_0);

  static scopeType_Callback_2(mthis, __arg_0, __arg_1) native "JavaScriptCallFrame_scopeType_Callback";
  scopeType_Callback_2_(mthis, __arg_0, __arg_1) => scopeType_Callback_2(mthis, __arg_0, __arg_1);

  static scopeType_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "JavaScriptCallFrame_scopeType_Callback";
  scopeType_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scopeType_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setVariableValue_Callback_0(mthis) native "JavaScriptCallFrame_setVariableValue_Callback";
  setVariableValue_Callback_0_(mthis) => setVariableValue_Callback_0(mthis);

  static setVariableValue_Callback_1(mthis, __arg_0) native "JavaScriptCallFrame_setVariableValue_Callback";
  setVariableValue_Callback_1_(mthis, __arg_0) => setVariableValue_Callback_1(mthis, __arg_0);

  static setVariableValue_Callback_2(mthis, __arg_0, __arg_1) native "JavaScriptCallFrame_setVariableValue_Callback";
  setVariableValue_Callback_2_(mthis, __arg_0, __arg_1) => setVariableValue_Callback_2(mthis, __arg_0, __arg_1);

  static setVariableValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "JavaScriptCallFrame_setVariableValue_Callback";
  setVariableValue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setVariableValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setVariableValue_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "JavaScriptCallFrame_setVariableValue_Callback";
  setVariableValue_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setVariableValue_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setVariableValue_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "JavaScriptCallFrame_setVariableValue_Callback";
  setVariableValue_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setVariableValue_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static sourceID_Getter(mthis) native "JavaScriptCallFrame_sourceID_Getter";
  sourceID_Getter_(mthis) => sourceID_Getter(mthis);

  static stepInPositions_Getter(mthis) native "JavaScriptCallFrame_stepInPositions_Getter";
  stepInPositions_Getter_(mthis) => stepInPositions_Getter(mthis);

  static thisObject_Getter(mthis) native "JavaScriptCallFrame_thisObject_Getter";
  thisObject_Getter_(mthis) => thisObject_Getter(mthis);

  static type_Getter(mthis) native "JavaScriptCallFrame_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkKeyboardEvent extends BlinkUIEvent {
  static final instance = new BlinkKeyboardEvent();

  static altKey_Getter(mthis) native "KeyboardEvent_altKey_Getter";
  altKey_Getter_(mthis) => altKey_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "KeyboardEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static ctrlKey_Getter(mthis) native "KeyboardEvent_ctrlKey_Getter";
  ctrlKey_Getter_(mthis) => ctrlKey_Getter(mthis);

  static getModifierState_Callback_0(mthis) native "KeyboardEvent_getModifierState_Callback";
  getModifierState_Callback_0_(mthis) => getModifierState_Callback_0(mthis);

  static getModifierState_Callback_1(mthis, __arg_0) native "KeyboardEvent_getModifierState_Callback";
  getModifierState_Callback_1_(mthis, __arg_0) => getModifierState_Callback_1(mthis, __arg_0);

  static getModifierState_Callback_2(mthis, __arg_0, __arg_1) native "KeyboardEvent_getModifierState_Callback";
  getModifierState_Callback_2_(mthis, __arg_0, __arg_1) => getModifierState_Callback_2(mthis, __arg_0, __arg_1);

  static getModifierState_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "KeyboardEvent_getModifierState_Callback";
  getModifierState_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getModifierState_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initKeyboardEvent_Callback_0(mthis) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_0_(mthis) => initKeyboardEvent_Callback_0(mthis);

  static initKeyboardEvent_Callback_1(mthis, __arg_0) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_1_(mthis, __arg_0) => initKeyboardEvent_Callback_1(mthis, __arg_0);

  static initKeyboardEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => initKeyboardEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static initKeyboardEvent_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => initKeyboardEvent_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10);

  static initKeyboardEvent_Callback_12(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_12_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) => initKeyboardEvent_Callback_12(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11);

  static initKeyboardEvent_Callback_2(mthis, __arg_0, __arg_1) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_2_(mthis, __arg_0, __arg_1) => initKeyboardEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initKeyboardEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initKeyboardEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initKeyboardEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initKeyboardEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initKeyboardEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initKeyboardEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initKeyboardEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initKeyboardEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initKeyboardEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initKeyboardEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static initKeyboardEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => initKeyboardEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static initKeyboardEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "KeyboardEvent_initKeyboardEvent_Callback";
  initKeyboardEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => initKeyboardEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static keyIdentifier_Getter(mthis) native "KeyboardEvent_keyIdentifier_Getter";
  keyIdentifier_Getter_(mthis) => keyIdentifier_Getter(mthis);

  static keyLocation_Getter(mthis) native "KeyboardEvent_keyLocation_Getter";
  keyLocation_Getter_(mthis) => keyLocation_Getter(mthis);

  static location_Getter(mthis) native "KeyboardEvent_location_Getter";
  location_Getter_(mthis) => location_Getter(mthis);

  static metaKey_Getter(mthis) native "KeyboardEvent_metaKey_Getter";
  metaKey_Getter_(mthis) => metaKey_Getter(mthis);

  static repeat_Getter(mthis) native "KeyboardEvent_repeat_Getter";
  repeat_Getter_(mthis) => repeat_Getter(mthis);

  static shiftKey_Getter(mthis) native "KeyboardEvent_shiftKey_Getter";
  shiftKey_Getter_(mthis) => shiftKey_Getter(mthis);

}

class BlinkLocalCredential extends BlinkCredential {
  static final instance = new BlinkLocalCredential();

  static constructorCallback_2(__arg_0, __arg_1) native "LocalCredential_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "LocalCredential_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "LocalCredential_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "LocalCredential_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "LocalCredential_constructorCallback";
  constructorCallback_6_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => constructorCallback_6(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static password_Getter(mthis) native "LocalCredential_password_Getter";
  password_Getter_(mthis) => password_Getter(mthis);

}

class BlinkLocation {
  static final instance = new BlinkLocation();

  static ancestorOrigins_Getter(mthis) native "Location_ancestorOrigins_Getter";
  ancestorOrigins_Getter_(mthis) => ancestorOrigins_Getter(mthis);

  static assign_Callback_0(mthis) native "Location_assign_Callback";
  assign_Callback_0_(mthis) => assign_Callback_0(mthis);

  static assign_Callback_1(mthis, __arg_0) native "Location_assign_Callback";
  assign_Callback_1_(mthis, __arg_0) => assign_Callback_1(mthis, __arg_0);

  static assign_Callback_2(mthis, __arg_0, __arg_1) native "Location_assign_Callback";
  assign_Callback_2_(mthis, __arg_0, __arg_1) => assign_Callback_2(mthis, __arg_0, __arg_1);

  static assign_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Location_assign_Callback";
  assign_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => assign_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static hash_Getter(mthis) native "Location_hash_Getter";
  hash_Getter_(mthis) => hash_Getter(mthis);

  static hash_Setter(mthis, __arg_0) native "Location_hash_Setter";
  hash_Setter_(mthis, __arg_0) => hash_Setter(mthis, __arg_0);

  static host_Getter(mthis) native "Location_host_Getter";
  host_Getter_(mthis) => host_Getter(mthis);

  static host_Setter(mthis, __arg_0) native "Location_host_Setter";
  host_Setter_(mthis, __arg_0) => host_Setter(mthis, __arg_0);

  static hostname_Getter(mthis) native "Location_hostname_Getter";
  hostname_Getter_(mthis) => hostname_Getter(mthis);

  static hostname_Setter(mthis, __arg_0) native "Location_hostname_Setter";
  hostname_Setter_(mthis, __arg_0) => hostname_Setter(mthis, __arg_0);

  static href_Getter(mthis) native "Location_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static href_Setter(mthis, __arg_0) native "Location_href_Setter";
  href_Setter_(mthis, __arg_0) => href_Setter(mthis, __arg_0);

  static origin_Getter(mthis) native "Location_origin_Getter";
  origin_Getter_(mthis) => origin_Getter(mthis);

  static pathname_Getter(mthis) native "Location_pathname_Getter";
  pathname_Getter_(mthis) => pathname_Getter(mthis);

  static pathname_Setter(mthis, __arg_0) native "Location_pathname_Setter";
  pathname_Setter_(mthis, __arg_0) => pathname_Setter(mthis, __arg_0);

  static port_Getter(mthis) native "Location_port_Getter";
  port_Getter_(mthis) => port_Getter(mthis);

  static port_Setter(mthis, __arg_0) native "Location_port_Setter";
  port_Setter_(mthis, __arg_0) => port_Setter(mthis, __arg_0);

  static protocol_Getter(mthis) native "Location_protocol_Getter";
  protocol_Getter_(mthis) => protocol_Getter(mthis);

  static protocol_Setter(mthis, __arg_0) native "Location_protocol_Setter";
  protocol_Setter_(mthis, __arg_0) => protocol_Setter(mthis, __arg_0);

  static reload_Callback_0(mthis) native "Location_reload_Callback";
  reload_Callback_0_(mthis) => reload_Callback_0(mthis);

  static reload_Callback_1(mthis, __arg_0) native "Location_reload_Callback";
  reload_Callback_1_(mthis, __arg_0) => reload_Callback_1(mthis, __arg_0);

  static reload_Callback_2(mthis, __arg_0, __arg_1) native "Location_reload_Callback";
  reload_Callback_2_(mthis, __arg_0, __arg_1) => reload_Callback_2(mthis, __arg_0, __arg_1);

  static replace_Callback_0(mthis) native "Location_replace_Callback";
  replace_Callback_0_(mthis) => replace_Callback_0(mthis);

  static replace_Callback_1(mthis, __arg_0) native "Location_replace_Callback";
  replace_Callback_1_(mthis, __arg_0) => replace_Callback_1(mthis, __arg_0);

  static replace_Callback_2(mthis, __arg_0, __arg_1) native "Location_replace_Callback";
  replace_Callback_2_(mthis, __arg_0, __arg_1) => replace_Callback_2(mthis, __arg_0, __arg_1);

  static replace_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Location_replace_Callback";
  replace_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replace_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static search_Getter(mthis) native "Location_search_Getter";
  search_Getter_(mthis) => search_Getter(mthis);

  static search_Setter(mthis, __arg_0) native "Location_search_Setter";
  search_Setter_(mthis, __arg_0) => search_Setter(mthis, __arg_0);

  static toString_Callback_0(mthis) native "Location_toString_Callback";
  toString_Callback_0_(mthis) => toString_Callback_0(mthis);

  static toString_Callback_1(mthis, __arg_0) native "Location_toString_Callback";
  toString_Callback_1_(mthis, __arg_0) => toString_Callback_1(mthis, __arg_0);

  static toString_Callback_2(mthis, __arg_0, __arg_1) native "Location_toString_Callback";
  toString_Callback_2_(mthis, __arg_0, __arg_1) => toString_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkMIDIAccess extends BlinkEventTarget {
  static final instance = new BlinkMIDIAccess();

  static inputs_Getter(mthis) native "MIDIAccess_inputs_Getter";
  inputs_Getter_(mthis) => inputs_Getter(mthis);

  static onconnect_Getter(mthis) native "MIDIAccess_onconnect_Getter";
  onconnect_Getter_(mthis) => onconnect_Getter(mthis);

  static onconnect_Setter(mthis, __arg_0) native "MIDIAccess_onconnect_Setter";
  onconnect_Setter_(mthis, __arg_0) => onconnect_Setter(mthis, __arg_0);

  static ondisconnect_Getter(mthis) native "MIDIAccess_ondisconnect_Getter";
  ondisconnect_Getter_(mthis) => ondisconnect_Getter(mthis);

  static ondisconnect_Setter(mthis, __arg_0) native "MIDIAccess_ondisconnect_Setter";
  ondisconnect_Setter_(mthis, __arg_0) => ondisconnect_Setter(mthis, __arg_0);

  static outputs_Getter(mthis) native "MIDIAccess_outputs_Getter";
  outputs_Getter_(mthis) => outputs_Getter(mthis);

  static sysexEnabled_Getter(mthis) native "MIDIAccess_sysexEnabled_Getter";
  sysexEnabled_Getter_(mthis) => sysexEnabled_Getter(mthis);

}

class BlinkMIDIConnectionEvent extends BlinkEvent {
  static final instance = new BlinkMIDIConnectionEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "MIDIConnectionEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static port_Getter(mthis) native "MIDIConnectionEvent_port_Getter";
  port_Getter_(mthis) => port_Getter(mthis);

}

class BlinkMIDIInput extends BlinkMIDIPort {
  static final instance = new BlinkMIDIInput();

  static onmidimessage_Getter(mthis) native "MIDIInput_onmidimessage_Getter";
  onmidimessage_Getter_(mthis) => onmidimessage_Getter(mthis);

  static onmidimessage_Setter(mthis, __arg_0) native "MIDIInput_onmidimessage_Setter";
  onmidimessage_Setter_(mthis, __arg_0) => onmidimessage_Setter(mthis, __arg_0);

}

class BlinkMIDIInputMap {
  static final instance = new BlinkMIDIInputMap();

  static entries_Callback_0(mthis) native "MIDIInputMap_entries_Callback";
  entries_Callback_0_(mthis) => entries_Callback_0(mthis);

  static entries_Callback_1(mthis, __arg_0) native "MIDIInputMap_entries_Callback";
  entries_Callback_1_(mthis, __arg_0) => entries_Callback_1(mthis, __arg_0);

  static entries_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_entries_Callback";
  entries_Callback_2_(mthis, __arg_0, __arg_1) => entries_Callback_2(mthis, __arg_0, __arg_1);

  static get_Callback_0(mthis) native "MIDIInputMap_get_Callback";
  get_Callback_0_(mthis) => get_Callback_0(mthis);

  static get_Callback_1(mthis, __arg_0) native "MIDIInputMap_get_Callback";
  get_Callback_1_(mthis, __arg_0) => get_Callback_1(mthis, __arg_0);

  static get_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_get_Callback";
  get_Callback_2_(mthis, __arg_0, __arg_1) => get_Callback_2(mthis, __arg_0, __arg_1);

  static get_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MIDIInputMap_get_Callback";
  get_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => get_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static has_Callback_0(mthis) native "MIDIInputMap_has_Callback";
  has_Callback_0_(mthis) => has_Callback_0(mthis);

  static has_Callback_1(mthis, __arg_0) native "MIDIInputMap_has_Callback";
  has_Callback_1_(mthis, __arg_0) => has_Callback_1(mthis, __arg_0);

  static has_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_has_Callback";
  has_Callback_2_(mthis, __arg_0, __arg_1) => has_Callback_2(mthis, __arg_0, __arg_1);

  static has_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MIDIInputMap_has_Callback";
  has_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => has_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static keys_Callback_0(mthis) native "MIDIInputMap_keys_Callback";
  keys_Callback_0_(mthis) => keys_Callback_0(mthis);

  static keys_Callback_1(mthis, __arg_0) native "MIDIInputMap_keys_Callback";
  keys_Callback_1_(mthis, __arg_0) => keys_Callback_1(mthis, __arg_0);

  static keys_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_keys_Callback";
  keys_Callback_2_(mthis, __arg_0, __arg_1) => keys_Callback_2(mthis, __arg_0, __arg_1);

  static size_Getter(mthis) native "MIDIInputMap_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

  static values_Callback_0(mthis) native "MIDIInputMap_values_Callback";
  values_Callback_0_(mthis) => values_Callback_0(mthis);

  static values_Callback_1(mthis, __arg_0) native "MIDIInputMap_values_Callback";
  values_Callback_1_(mthis, __arg_0) => values_Callback_1(mthis, __arg_0);

  static values_Callback_2(mthis, __arg_0, __arg_1) native "MIDIInputMap_values_Callback";
  values_Callback_2_(mthis, __arg_0, __arg_1) => values_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkMIDIMessageEvent extends BlinkEvent {
  static final instance = new BlinkMIDIMessageEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "MIDIMessageEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static data_Getter(mthis) native "MIDIMessageEvent_data_Getter";
  data_Getter_(mthis) => data_Getter(mthis);

  static receivedTime_Getter(mthis) native "MIDIMessageEvent_receivedTime_Getter";
  receivedTime_Getter_(mthis) => receivedTime_Getter(mthis);

}

class BlinkMIDIOutput extends BlinkMIDIPort {
  static final instance = new BlinkMIDIOutput();

  static send_Callback_0(mthis) native "MIDIOutput_send_Callback";
  send_Callback_0_(mthis) => send_Callback_0(mthis);

  static send_Callback_1(mthis, __arg_0) native "MIDIOutput_send_Callback";
  send_Callback_1_(mthis, __arg_0) => send_Callback_1(mthis, __arg_0);

  static send_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutput_send_Callback";
  send_Callback_2_(mthis, __arg_0, __arg_1) => send_Callback_2(mthis, __arg_0, __arg_1);

  static send_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MIDIOutput_send_Callback";
  send_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => send_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static send_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "MIDIOutput_send_Callback";
  send_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => send_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkMIDIOutputMap {
  static final instance = new BlinkMIDIOutputMap();

  static entries_Callback_0(mthis) native "MIDIOutputMap_entries_Callback";
  entries_Callback_0_(mthis) => entries_Callback_0(mthis);

  static entries_Callback_1(mthis, __arg_0) native "MIDIOutputMap_entries_Callback";
  entries_Callback_1_(mthis, __arg_0) => entries_Callback_1(mthis, __arg_0);

  static entries_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_entries_Callback";
  entries_Callback_2_(mthis, __arg_0, __arg_1) => entries_Callback_2(mthis, __arg_0, __arg_1);

  static get_Callback_0(mthis) native "MIDIOutputMap_get_Callback";
  get_Callback_0_(mthis) => get_Callback_0(mthis);

  static get_Callback_1(mthis, __arg_0) native "MIDIOutputMap_get_Callback";
  get_Callback_1_(mthis, __arg_0) => get_Callback_1(mthis, __arg_0);

  static get_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_get_Callback";
  get_Callback_2_(mthis, __arg_0, __arg_1) => get_Callback_2(mthis, __arg_0, __arg_1);

  static get_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MIDIOutputMap_get_Callback";
  get_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => get_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static has_Callback_0(mthis) native "MIDIOutputMap_has_Callback";
  has_Callback_0_(mthis) => has_Callback_0(mthis);

  static has_Callback_1(mthis, __arg_0) native "MIDIOutputMap_has_Callback";
  has_Callback_1_(mthis, __arg_0) => has_Callback_1(mthis, __arg_0);

  static has_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_has_Callback";
  has_Callback_2_(mthis, __arg_0, __arg_1) => has_Callback_2(mthis, __arg_0, __arg_1);

  static has_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MIDIOutputMap_has_Callback";
  has_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => has_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static keys_Callback_0(mthis) native "MIDIOutputMap_keys_Callback";
  keys_Callback_0_(mthis) => keys_Callback_0(mthis);

  static keys_Callback_1(mthis, __arg_0) native "MIDIOutputMap_keys_Callback";
  keys_Callback_1_(mthis, __arg_0) => keys_Callback_1(mthis, __arg_0);

  static keys_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_keys_Callback";
  keys_Callback_2_(mthis, __arg_0, __arg_1) => keys_Callback_2(mthis, __arg_0, __arg_1);

  static size_Getter(mthis) native "MIDIOutputMap_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

  static values_Callback_0(mthis) native "MIDIOutputMap_values_Callback";
  values_Callback_0_(mthis) => values_Callback_0(mthis);

  static values_Callback_1(mthis, __arg_0) native "MIDIOutputMap_values_Callback";
  values_Callback_1_(mthis, __arg_0) => values_Callback_1(mthis, __arg_0);

  static values_Callback_2(mthis, __arg_0, __arg_1) native "MIDIOutputMap_values_Callback";
  values_Callback_2_(mthis, __arg_0, __arg_1) => values_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkMIDIPort extends BlinkEventTarget {
  static final instance = new BlinkMIDIPort();

  static id_Getter(mthis) native "MIDIPort_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static manufacturer_Getter(mthis) native "MIDIPort_manufacturer_Getter";
  manufacturer_Getter_(mthis) => manufacturer_Getter(mthis);

  static name_Getter(mthis) native "MIDIPort_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static ondisconnect_Getter(mthis) native "MIDIPort_ondisconnect_Getter";
  ondisconnect_Getter_(mthis) => ondisconnect_Getter(mthis);

  static ondisconnect_Setter(mthis, __arg_0) native "MIDIPort_ondisconnect_Setter";
  ondisconnect_Setter_(mthis, __arg_0) => ondisconnect_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "MIDIPort_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static version_Getter(mthis) native "MIDIPort_version_Getter";
  version_Getter_(mthis) => version_Getter(mthis);

}

class BlinkMediaController extends BlinkEventTarget {
  static final instance = new BlinkMediaController();

  static buffered_Getter(mthis) native "MediaController_buffered_Getter";
  buffered_Getter_(mthis) => buffered_Getter(mthis);

  static constructorCallback_0() native "MediaController_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "MediaController_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "MediaController_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static currentTime_Getter(mthis) native "MediaController_currentTime_Getter";
  currentTime_Getter_(mthis) => currentTime_Getter(mthis);

  static currentTime_Setter(mthis, __arg_0) native "MediaController_currentTime_Setter";
  currentTime_Setter_(mthis, __arg_0) => currentTime_Setter(mthis, __arg_0);

  static defaultPlaybackRate_Getter(mthis) native "MediaController_defaultPlaybackRate_Getter";
  defaultPlaybackRate_Getter_(mthis) => defaultPlaybackRate_Getter(mthis);

  static defaultPlaybackRate_Setter(mthis, __arg_0) native "MediaController_defaultPlaybackRate_Setter";
  defaultPlaybackRate_Setter_(mthis, __arg_0) => defaultPlaybackRate_Setter(mthis, __arg_0);

  static duration_Getter(mthis) native "MediaController_duration_Getter";
  duration_Getter_(mthis) => duration_Getter(mthis);

  static muted_Getter(mthis) native "MediaController_muted_Getter";
  muted_Getter_(mthis) => muted_Getter(mthis);

  static muted_Setter(mthis, __arg_0) native "MediaController_muted_Setter";
  muted_Setter_(mthis, __arg_0) => muted_Setter(mthis, __arg_0);

  static pause_Callback_0(mthis) native "MediaController_pause_Callback";
  pause_Callback_0_(mthis) => pause_Callback_0(mthis);

  static pause_Callback_1(mthis, __arg_0) native "MediaController_pause_Callback";
  pause_Callback_1_(mthis, __arg_0) => pause_Callback_1(mthis, __arg_0);

  static pause_Callback_2(mthis, __arg_0, __arg_1) native "MediaController_pause_Callback";
  pause_Callback_2_(mthis, __arg_0, __arg_1) => pause_Callback_2(mthis, __arg_0, __arg_1);

  static paused_Getter(mthis) native "MediaController_paused_Getter";
  paused_Getter_(mthis) => paused_Getter(mthis);

  static play_Callback_0(mthis) native "MediaController_play_Callback";
  play_Callback_0_(mthis) => play_Callback_0(mthis);

  static play_Callback_1(mthis, __arg_0) native "MediaController_play_Callback";
  play_Callback_1_(mthis, __arg_0) => play_Callback_1(mthis, __arg_0);

  static play_Callback_2(mthis, __arg_0, __arg_1) native "MediaController_play_Callback";
  play_Callback_2_(mthis, __arg_0, __arg_1) => play_Callback_2(mthis, __arg_0, __arg_1);

  static playbackRate_Getter(mthis) native "MediaController_playbackRate_Getter";
  playbackRate_Getter_(mthis) => playbackRate_Getter(mthis);

  static playbackRate_Setter(mthis, __arg_0) native "MediaController_playbackRate_Setter";
  playbackRate_Setter_(mthis, __arg_0) => playbackRate_Setter(mthis, __arg_0);

  static playbackState_Getter(mthis) native "MediaController_playbackState_Getter";
  playbackState_Getter_(mthis) => playbackState_Getter(mthis);

  static played_Getter(mthis) native "MediaController_played_Getter";
  played_Getter_(mthis) => played_Getter(mthis);

  static seekable_Getter(mthis) native "MediaController_seekable_Getter";
  seekable_Getter_(mthis) => seekable_Getter(mthis);

  static unpause_Callback_0(mthis) native "MediaController_unpause_Callback";
  unpause_Callback_0_(mthis) => unpause_Callback_0(mthis);

  static unpause_Callback_1(mthis, __arg_0) native "MediaController_unpause_Callback";
  unpause_Callback_1_(mthis, __arg_0) => unpause_Callback_1(mthis, __arg_0);

  static unpause_Callback_2(mthis, __arg_0, __arg_1) native "MediaController_unpause_Callback";
  unpause_Callback_2_(mthis, __arg_0, __arg_1) => unpause_Callback_2(mthis, __arg_0, __arg_1);

  static volume_Getter(mthis) native "MediaController_volume_Getter";
  volume_Getter_(mthis) => volume_Getter(mthis);

  static volume_Setter(mthis, __arg_0) native "MediaController_volume_Setter";
  volume_Setter_(mthis, __arg_0) => volume_Setter(mthis, __arg_0);

}

class BlinkMediaDeviceInfo {
  static final instance = new BlinkMediaDeviceInfo();

  static deviceId_Getter(mthis) native "MediaDeviceInfo_deviceId_Getter";
  deviceId_Getter_(mthis) => deviceId_Getter(mthis);

  static groupId_Getter(mthis) native "MediaDeviceInfo_groupId_Getter";
  groupId_Getter_(mthis) => groupId_Getter(mthis);

  static kind_Getter(mthis) native "MediaDeviceInfo_kind_Getter";
  kind_Getter_(mthis) => kind_Getter(mthis);

  static label_Getter(mthis) native "MediaDeviceInfo_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

}

class BlinkMediaElementAudioSourceNode extends BlinkAudioSourceNode {
  static final instance = new BlinkMediaElementAudioSourceNode();

  static mediaElement_Getter(mthis) native "MediaElementAudioSourceNode_mediaElement_Getter";
  mediaElement_Getter_(mthis) => mediaElement_Getter(mthis);

}

class BlinkMediaError {
  static final instance = new BlinkMediaError();

  static code_Getter(mthis) native "MediaError_code_Getter";
  code_Getter_(mthis) => code_Getter(mthis);

}

class BlinkMediaKeyError {
  static final instance = new BlinkMediaKeyError();

  static code_Getter(mthis) native "MediaKeyError_code_Getter";
  code_Getter_(mthis) => code_Getter(mthis);

  static systemCode_Getter(mthis) native "MediaKeyError_systemCode_Getter";
  systemCode_Getter_(mthis) => systemCode_Getter(mthis);

}

class BlinkMediaKeyEvent extends BlinkEvent {
  static final instance = new BlinkMediaKeyEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "MediaKeyEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static defaultURL_Getter(mthis) native "MediaKeyEvent_defaultURL_Getter";
  defaultURL_Getter_(mthis) => defaultURL_Getter(mthis);

  static errorCode_Getter(mthis) native "MediaKeyEvent_errorCode_Getter";
  errorCode_Getter_(mthis) => errorCode_Getter(mthis);

  static initData_Getter(mthis) native "MediaKeyEvent_initData_Getter";
  initData_Getter_(mthis) => initData_Getter(mthis);

  static keySystem_Getter(mthis) native "MediaKeyEvent_keySystem_Getter";
  keySystem_Getter_(mthis) => keySystem_Getter(mthis);

  static message_Getter(mthis) native "MediaKeyEvent_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

  static sessionId_Getter(mthis) native "MediaKeyEvent_sessionId_Getter";
  sessionId_Getter_(mthis) => sessionId_Getter(mthis);

  static systemCode_Getter(mthis) native "MediaKeyEvent_systemCode_Getter";
  systemCode_Getter_(mthis) => systemCode_Getter(mthis);

}

class BlinkMediaKeyMessageEvent extends BlinkEvent {
  static final instance = new BlinkMediaKeyMessageEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "MediaKeyMessageEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static destinationURL_Getter(mthis) native "MediaKeyMessageEvent_destinationURL_Getter";
  destinationURL_Getter_(mthis) => destinationURL_Getter(mthis);

  static message_Getter(mthis) native "MediaKeyMessageEvent_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

}

class BlinkMediaKeyNeededEvent extends BlinkEvent {
  static final instance = new BlinkMediaKeyNeededEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "MediaKeyNeededEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static contentType_Getter(mthis) native "MediaKeyNeededEvent_contentType_Getter";
  contentType_Getter_(mthis) => contentType_Getter(mthis);

  static initData_Getter(mthis) native "MediaKeyNeededEvent_initData_Getter";
  initData_Getter_(mthis) => initData_Getter(mthis);

}

class BlinkMediaKeySession extends BlinkEventTarget {
  static final instance = new BlinkMediaKeySession();

  static closed_Getter(mthis) native "MediaKeySession_closed_Getter";
  closed_Getter_(mthis) => closed_Getter(mthis);

  static error_Getter(mthis) native "MediaKeySession_error_Getter";
  error_Getter_(mthis) => error_Getter(mthis);

  static generateRequest_Callback_0(mthis) native "MediaKeySession_generateRequest_Callback";
  generateRequest_Callback_0_(mthis) => generateRequest_Callback_0(mthis);

  static generateRequest_Callback_1(mthis, __arg_0) native "MediaKeySession_generateRequest_Callback";
  generateRequest_Callback_1_(mthis, __arg_0) => generateRequest_Callback_1(mthis, __arg_0);

  static generateRequest_Callback_2(mthis, __arg_0, __arg_1) native "MediaKeySession_generateRequest_Callback";
  generateRequest_Callback_2_(mthis, __arg_0, __arg_1) => generateRequest_Callback_2(mthis, __arg_0, __arg_1);

  static generateRequest_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaKeySession_generateRequest_Callback";
  generateRequest_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => generateRequest_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static generateRequest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "MediaKeySession_generateRequest_Callback";
  generateRequest_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => generateRequest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static keySystem_Getter(mthis) native "MediaKeySession_keySystem_Getter";
  keySystem_Getter_(mthis) => keySystem_Getter(mthis);

  static release_Callback_0(mthis) native "MediaKeySession_release_Callback";
  release_Callback_0_(mthis) => release_Callback_0(mthis);

  static release_Callback_1(mthis, __arg_0) native "MediaKeySession_release_Callback";
  release_Callback_1_(mthis, __arg_0) => release_Callback_1(mthis, __arg_0);

  static release_Callback_2(mthis, __arg_0, __arg_1) native "MediaKeySession_release_Callback";
  release_Callback_2_(mthis, __arg_0, __arg_1) => release_Callback_2(mthis, __arg_0, __arg_1);

  static sessionId_Getter(mthis) native "MediaKeySession_sessionId_Getter";
  sessionId_Getter_(mthis) => sessionId_Getter(mthis);

  static update_Callback_0(mthis) native "MediaKeySession_update_Callback";
  update_Callback_0_(mthis) => update_Callback_0(mthis);

  static update_Callback_1(mthis, __arg_0) native "MediaKeySession_update_Callback";
  update_Callback_1_(mthis, __arg_0) => update_Callback_1(mthis, __arg_0);

  static update_Callback_2(mthis, __arg_0, __arg_1) native "MediaKeySession_update_Callback";
  update_Callback_2_(mthis, __arg_0, __arg_1) => update_Callback_2(mthis, __arg_0, __arg_1);

  static update_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaKeySession_update_Callback";
  update_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => update_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkMediaKeys {
  static final instance = new BlinkMediaKeys();

  static createSession_Callback_0(mthis) native "MediaKeys_createSession_Callback";
  createSession_Callback_0_(mthis) => createSession_Callback_0(mthis);

  static createSession_Callback_1(mthis, __arg_0) native "MediaKeys_createSession_Callback";
  createSession_Callback_1_(mthis, __arg_0) => createSession_Callback_1(mthis, __arg_0);

  static createSession_Callback_2(mthis, __arg_0, __arg_1) native "MediaKeys_createSession_Callback";
  createSession_Callback_2_(mthis, __arg_0, __arg_1) => createSession_Callback_2(mthis, __arg_0, __arg_1);

  static createSession_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaKeys_createSession_Callback";
  createSession_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSession_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static create_Callback_0() native "MediaKeys_create_Callback";
  create_Callback_0_() => create_Callback_0();

  static create_Callback_1(__arg_0) native "MediaKeys_create_Callback";
  create_Callback_1_(__arg_0) => create_Callback_1(__arg_0);

  static create_Callback_2(__arg_0, __arg_1) native "MediaKeys_create_Callback";
  create_Callback_2_(__arg_0, __arg_1) => create_Callback_2(__arg_0, __arg_1);

  static create_Callback_3(__arg_0, __arg_1, __arg_2) native "MediaKeys_create_Callback";
  create_Callback_3_(__arg_0, __arg_1, __arg_2) => create_Callback_3(__arg_0, __arg_1, __arg_2);

  static isTypeSupported_Callback_0() native "MediaKeys_isTypeSupported_Callback";
  isTypeSupported_Callback_0_() => isTypeSupported_Callback_0();

  static isTypeSupported_Callback_1(__arg_0) native "MediaKeys_isTypeSupported_Callback";
  isTypeSupported_Callback_1_(__arg_0) => isTypeSupported_Callback_1(__arg_0);

  static isTypeSupported_Callback_2(__arg_0, __arg_1) native "MediaKeys_isTypeSupported_Callback";
  isTypeSupported_Callback_2_(__arg_0, __arg_1) => isTypeSupported_Callback_2(__arg_0, __arg_1);

  static isTypeSupported_Callback_3(__arg_0, __arg_1, __arg_2) native "MediaKeys_isTypeSupported_Callback";
  isTypeSupported_Callback_3_(__arg_0, __arg_1, __arg_2) => isTypeSupported_Callback_3(__arg_0, __arg_1, __arg_2);

  static isTypeSupported_Callback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "MediaKeys_isTypeSupported_Callback";
  isTypeSupported_Callback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => isTypeSupported_Callback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static keySystem_Getter(mthis) native "MediaKeys_keySystem_Getter";
  keySystem_Getter_(mthis) => keySystem_Getter(mthis);

}

class BlinkMediaList {
  static final instance = new BlinkMediaList();

  static $__getter___Callback_1(mthis, __arg_0) native "MediaList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static appendMedium_Callback_0(mthis) native "MediaList_appendMedium_Callback";
  appendMedium_Callback_0_(mthis) => appendMedium_Callback_0(mthis);

  static appendMedium_Callback_1(mthis, __arg_0) native "MediaList_appendMedium_Callback";
  appendMedium_Callback_1_(mthis, __arg_0) => appendMedium_Callback_1(mthis, __arg_0);

  static appendMedium_Callback_2(mthis, __arg_0, __arg_1) native "MediaList_appendMedium_Callback";
  appendMedium_Callback_2_(mthis, __arg_0, __arg_1) => appendMedium_Callback_2(mthis, __arg_0, __arg_1);

  static appendMedium_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaList_appendMedium_Callback";
  appendMedium_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendMedium_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteMedium_Callback_0(mthis) native "MediaList_deleteMedium_Callback";
  deleteMedium_Callback_0_(mthis) => deleteMedium_Callback_0(mthis);

  static deleteMedium_Callback_1(mthis, __arg_0) native "MediaList_deleteMedium_Callback";
  deleteMedium_Callback_1_(mthis, __arg_0) => deleteMedium_Callback_1(mthis, __arg_0);

  static deleteMedium_Callback_2(mthis, __arg_0, __arg_1) native "MediaList_deleteMedium_Callback";
  deleteMedium_Callback_2_(mthis, __arg_0, __arg_1) => deleteMedium_Callback_2(mthis, __arg_0, __arg_1);

  static deleteMedium_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaList_deleteMedium_Callback";
  deleteMedium_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteMedium_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static item_Callback_0(mthis) native "MediaList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "MediaList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "MediaList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "MediaList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static mediaText_Getter(mthis) native "MediaList_mediaText_Getter";
  mediaText_Getter_(mthis) => mediaText_Getter(mthis);

  static mediaText_Setter(mthis, __arg_0) native "MediaList_mediaText_Setter";
  mediaText_Setter_(mthis, __arg_0) => mediaText_Setter(mthis, __arg_0);

}

class BlinkMediaQueryList extends BlinkEventTarget {
  static final instance = new BlinkMediaQueryList();

  static addListener_Callback_0(mthis) native "MediaQueryList_addListener_Callback";
  addListener_Callback_0_(mthis) => addListener_Callback_0(mthis);

  static addListener_Callback_1(mthis, __arg_0) native "MediaQueryList_addListener_Callback";
  addListener_Callback_1_(mthis, __arg_0) => addListener_Callback_1(mthis, __arg_0);

  static addListener_Callback_2(mthis, __arg_0, __arg_1) native "MediaQueryList_addListener_Callback";
  addListener_Callback_2_(mthis, __arg_0, __arg_1) => addListener_Callback_2(mthis, __arg_0, __arg_1);

  static addListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaQueryList_addListener_Callback";
  addListener_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static matches_Getter(mthis) native "MediaQueryList_matches_Getter";
  matches_Getter_(mthis) => matches_Getter(mthis);

  static media_Getter(mthis) native "MediaQueryList_media_Getter";
  media_Getter_(mthis) => media_Getter(mthis);

  static onchange_Getter(mthis) native "MediaQueryList_onchange_Getter";
  onchange_Getter_(mthis) => onchange_Getter(mthis);

  static onchange_Setter(mthis, __arg_0) native "MediaQueryList_onchange_Setter";
  onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);

  static removeListener_Callback_0(mthis) native "MediaQueryList_removeListener_Callback";
  removeListener_Callback_0_(mthis) => removeListener_Callback_0(mthis);

  static removeListener_Callback_1(mthis, __arg_0) native "MediaQueryList_removeListener_Callback";
  removeListener_Callback_1_(mthis, __arg_0) => removeListener_Callback_1(mthis, __arg_0);

  static removeListener_Callback_2(mthis, __arg_0, __arg_1) native "MediaQueryList_removeListener_Callback";
  removeListener_Callback_2_(mthis, __arg_0, __arg_1) => removeListener_Callback_2(mthis, __arg_0, __arg_1);

  static removeListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaQueryList_removeListener_Callback";
  removeListener_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkMediaQueryListEvent extends BlinkEvent {
  static final instance = new BlinkMediaQueryListEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "MediaQueryListEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static matches_Getter(mthis) native "MediaQueryListEvent_matches_Getter";
  matches_Getter_(mthis) => matches_Getter(mthis);

  static media_Getter(mthis) native "MediaQueryListEvent_media_Getter";
  media_Getter_(mthis) => media_Getter(mthis);

}

class BlinkMediaSource extends BlinkEventTarget {
  static final instance = new BlinkMediaSource();

  static activeSourceBuffers_Getter(mthis) native "MediaSource_activeSourceBuffers_Getter";
  activeSourceBuffers_Getter_(mthis) => activeSourceBuffers_Getter(mthis);

  static addSourceBuffer_Callback_0(mthis) native "MediaSource_addSourceBuffer_Callback";
  addSourceBuffer_Callback_0_(mthis) => addSourceBuffer_Callback_0(mthis);

  static addSourceBuffer_Callback_1(mthis, __arg_0) native "MediaSource_addSourceBuffer_Callback";
  addSourceBuffer_Callback_1_(mthis, __arg_0) => addSourceBuffer_Callback_1(mthis, __arg_0);

  static addSourceBuffer_Callback_2(mthis, __arg_0, __arg_1) native "MediaSource_addSourceBuffer_Callback";
  addSourceBuffer_Callback_2_(mthis, __arg_0, __arg_1) => addSourceBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static addSourceBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaSource_addSourceBuffer_Callback";
  addSourceBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addSourceBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static constructorCallback_0() native "MediaSource_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "MediaSource_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "MediaSource_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static duration_Getter(mthis) native "MediaSource_duration_Getter";
  duration_Getter_(mthis) => duration_Getter(mthis);

  static duration_Setter(mthis, __arg_0) native "MediaSource_duration_Setter";
  duration_Setter_(mthis, __arg_0) => duration_Setter(mthis, __arg_0);

  static endOfStream_Callback_0(mthis) native "MediaSource_endOfStream_Callback";
  endOfStream_Callback_0_(mthis) => endOfStream_Callback_0(mthis);

  static endOfStream_Callback_1(mthis, __arg_0) native "MediaSource_endOfStream_Callback";
  endOfStream_Callback_1_(mthis, __arg_0) => endOfStream_Callback_1(mthis, __arg_0);

  static endOfStream_Callback_2(mthis, __arg_0, __arg_1) native "MediaSource_endOfStream_Callback";
  endOfStream_Callback_2_(mthis, __arg_0, __arg_1) => endOfStream_Callback_2(mthis, __arg_0, __arg_1);

  static endOfStream_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaSource_endOfStream_Callback";
  endOfStream_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => endOfStream_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isTypeSupported_Callback_0() native "MediaSource_isTypeSupported_Callback";
  isTypeSupported_Callback_0_() => isTypeSupported_Callback_0();

  static isTypeSupported_Callback_1(__arg_0) native "MediaSource_isTypeSupported_Callback";
  isTypeSupported_Callback_1_(__arg_0) => isTypeSupported_Callback_1(__arg_0);

  static isTypeSupported_Callback_2(__arg_0, __arg_1) native "MediaSource_isTypeSupported_Callback";
  isTypeSupported_Callback_2_(__arg_0, __arg_1) => isTypeSupported_Callback_2(__arg_0, __arg_1);

  static isTypeSupported_Callback_3(__arg_0, __arg_1, __arg_2) native "MediaSource_isTypeSupported_Callback";
  isTypeSupported_Callback_3_(__arg_0, __arg_1, __arg_2) => isTypeSupported_Callback_3(__arg_0, __arg_1, __arg_2);

  static readyState_Getter(mthis) native "MediaSource_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static removeSourceBuffer_Callback_0(mthis) native "MediaSource_removeSourceBuffer_Callback";
  removeSourceBuffer_Callback_0_(mthis) => removeSourceBuffer_Callback_0(mthis);

  static removeSourceBuffer_Callback_1(mthis, __arg_0) native "MediaSource_removeSourceBuffer_Callback";
  removeSourceBuffer_Callback_1_(mthis, __arg_0) => removeSourceBuffer_Callback_1(mthis, __arg_0);

  static removeSourceBuffer_Callback_2(mthis, __arg_0, __arg_1) native "MediaSource_removeSourceBuffer_Callback";
  removeSourceBuffer_Callback_2_(mthis, __arg_0, __arg_1) => removeSourceBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static removeSourceBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaSource_removeSourceBuffer_Callback";
  removeSourceBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeSourceBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static sourceBuffers_Getter(mthis) native "MediaSource_sourceBuffers_Getter";
  sourceBuffers_Getter_(mthis) => sourceBuffers_Getter(mthis);

}

class BlinkMediaStream extends BlinkEventTarget {
  static final instance = new BlinkMediaStream();

  static addTrack_Callback_0(mthis) native "MediaStream_addTrack_Callback";
  addTrack_Callback_0_(mthis) => addTrack_Callback_0(mthis);

  static addTrack_Callback_1(mthis, __arg_0) native "MediaStream_addTrack_Callback";
  addTrack_Callback_1_(mthis, __arg_0) => addTrack_Callback_1(mthis, __arg_0);

  static addTrack_Callback_2(mthis, __arg_0, __arg_1) native "MediaStream_addTrack_Callback";
  addTrack_Callback_2_(mthis, __arg_0, __arg_1) => addTrack_Callback_2(mthis, __arg_0, __arg_1);

  static addTrack_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaStream_addTrack_Callback";
  addTrack_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addTrack_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clone_Callback_0(mthis) native "MediaStream_clone_Callback";
  clone_Callback_0_(mthis) => clone_Callback_0(mthis);

  static clone_Callback_1(mthis, __arg_0) native "MediaStream_clone_Callback";
  clone_Callback_1_(mthis, __arg_0) => clone_Callback_1(mthis, __arg_0);

  static clone_Callback_2(mthis, __arg_0, __arg_1) native "MediaStream_clone_Callback";
  clone_Callback_2_(mthis, __arg_0, __arg_1) => clone_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "MediaStream_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "MediaStream_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "MediaStream_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "MediaStream_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static ended_Getter(mthis) native "MediaStream_ended_Getter";
  ended_Getter_(mthis) => ended_Getter(mthis);

  static getAudioTracks_Callback_0(mthis) native "MediaStream_getAudioTracks_Callback";
  getAudioTracks_Callback_0_(mthis) => getAudioTracks_Callback_0(mthis);

  static getAudioTracks_Callback_1(mthis, __arg_0) native "MediaStream_getAudioTracks_Callback";
  getAudioTracks_Callback_1_(mthis, __arg_0) => getAudioTracks_Callback_1(mthis, __arg_0);

  static getAudioTracks_Callback_2(mthis, __arg_0, __arg_1) native "MediaStream_getAudioTracks_Callback";
  getAudioTracks_Callback_2_(mthis, __arg_0, __arg_1) => getAudioTracks_Callback_2(mthis, __arg_0, __arg_1);

  static getTrackById_Callback_0(mthis) native "MediaStream_getTrackById_Callback";
  getTrackById_Callback_0_(mthis) => getTrackById_Callback_0(mthis);

  static getTrackById_Callback_1(mthis, __arg_0) native "MediaStream_getTrackById_Callback";
  getTrackById_Callback_1_(mthis, __arg_0) => getTrackById_Callback_1(mthis, __arg_0);

  static getTrackById_Callback_2(mthis, __arg_0, __arg_1) native "MediaStream_getTrackById_Callback";
  getTrackById_Callback_2_(mthis, __arg_0, __arg_1) => getTrackById_Callback_2(mthis, __arg_0, __arg_1);

  static getTrackById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaStream_getTrackById_Callback";
  getTrackById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getTrackById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getTracks_Callback_0(mthis) native "MediaStream_getTracks_Callback";
  getTracks_Callback_0_(mthis) => getTracks_Callback_0(mthis);

  static getTracks_Callback_1(mthis, __arg_0) native "MediaStream_getTracks_Callback";
  getTracks_Callback_1_(mthis, __arg_0) => getTracks_Callback_1(mthis, __arg_0);

  static getTracks_Callback_2(mthis, __arg_0, __arg_1) native "MediaStream_getTracks_Callback";
  getTracks_Callback_2_(mthis, __arg_0, __arg_1) => getTracks_Callback_2(mthis, __arg_0, __arg_1);

  static getVideoTracks_Callback_0(mthis) native "MediaStream_getVideoTracks_Callback";
  getVideoTracks_Callback_0_(mthis) => getVideoTracks_Callback_0(mthis);

  static getVideoTracks_Callback_1(mthis, __arg_0) native "MediaStream_getVideoTracks_Callback";
  getVideoTracks_Callback_1_(mthis, __arg_0) => getVideoTracks_Callback_1(mthis, __arg_0);

  static getVideoTracks_Callback_2(mthis, __arg_0, __arg_1) native "MediaStream_getVideoTracks_Callback";
  getVideoTracks_Callback_2_(mthis, __arg_0, __arg_1) => getVideoTracks_Callback_2(mthis, __arg_0, __arg_1);

  static id_Getter(mthis) native "MediaStream_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static label_Getter(mthis) native "MediaStream_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static onaddtrack_Getter(mthis) native "MediaStream_onaddtrack_Getter";
  onaddtrack_Getter_(mthis) => onaddtrack_Getter(mthis);

  static onaddtrack_Setter(mthis, __arg_0) native "MediaStream_onaddtrack_Setter";
  onaddtrack_Setter_(mthis, __arg_0) => onaddtrack_Setter(mthis, __arg_0);

  static onended_Getter(mthis) native "MediaStream_onended_Getter";
  onended_Getter_(mthis) => onended_Getter(mthis);

  static onended_Setter(mthis, __arg_0) native "MediaStream_onended_Setter";
  onended_Setter_(mthis, __arg_0) => onended_Setter(mthis, __arg_0);

  static onremovetrack_Getter(mthis) native "MediaStream_onremovetrack_Getter";
  onremovetrack_Getter_(mthis) => onremovetrack_Getter(mthis);

  static onremovetrack_Setter(mthis, __arg_0) native "MediaStream_onremovetrack_Setter";
  onremovetrack_Setter_(mthis, __arg_0) => onremovetrack_Setter(mthis, __arg_0);

  static removeTrack_Callback_0(mthis) native "MediaStream_removeTrack_Callback";
  removeTrack_Callback_0_(mthis) => removeTrack_Callback_0(mthis);

  static removeTrack_Callback_1(mthis, __arg_0) native "MediaStream_removeTrack_Callback";
  removeTrack_Callback_1_(mthis, __arg_0) => removeTrack_Callback_1(mthis, __arg_0);

  static removeTrack_Callback_2(mthis, __arg_0, __arg_1) native "MediaStream_removeTrack_Callback";
  removeTrack_Callback_2_(mthis, __arg_0, __arg_1) => removeTrack_Callback_2(mthis, __arg_0, __arg_1);

  static removeTrack_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MediaStream_removeTrack_Callback";
  removeTrack_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeTrack_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static stop_Callback_0(mthis) native "MediaStream_stop_Callback";
  stop_Callback_0_(mthis) => stop_Callback_0(mthis);

  static stop_Callback_1(mthis, __arg_0) native "MediaStream_stop_Callback";
  stop_Callback_1_(mthis, __arg_0) => stop_Callback_1(mthis, __arg_0);

  static stop_Callback_2(mthis, __arg_0, __arg_1) native "MediaStream_stop_Callback";
  stop_Callback_2_(mthis, __arg_0, __arg_1) => stop_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkMediaStreamAudioDestinationNode extends BlinkAudioNode {
  static final instance = new BlinkMediaStreamAudioDestinationNode();

  static stream_Getter(mthis) native "MediaStreamAudioDestinationNode_stream_Getter";
  stream_Getter_(mthis) => stream_Getter(mthis);

}

class BlinkMediaStreamAudioSourceNode extends BlinkAudioSourceNode {
  static final instance = new BlinkMediaStreamAudioSourceNode();

  static mediaStream_Getter(mthis) native "MediaStreamAudioSourceNode_mediaStream_Getter";
  mediaStream_Getter_(mthis) => mediaStream_Getter(mthis);

}

class BlinkMediaStreamEvent extends BlinkEvent {
  static final instance = new BlinkMediaStreamEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "MediaStreamEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static stream_Getter(mthis) native "MediaStreamEvent_stream_Getter";
  stream_Getter_(mthis) => stream_Getter(mthis);

}

class BlinkMediaStreamTrack extends BlinkEventTarget {
  static final instance = new BlinkMediaStreamTrack();

  static clone_Callback_0(mthis) native "MediaStreamTrack_clone_Callback";
  clone_Callback_0_(mthis) => clone_Callback_0(mthis);

  static clone_Callback_1(mthis, __arg_0) native "MediaStreamTrack_clone_Callback";
  clone_Callback_1_(mthis, __arg_0) => clone_Callback_1(mthis, __arg_0);

  static clone_Callback_2(mthis, __arg_0, __arg_1) native "MediaStreamTrack_clone_Callback";
  clone_Callback_2_(mthis, __arg_0, __arg_1) => clone_Callback_2(mthis, __arg_0, __arg_1);

  static enabled_Getter(mthis) native "MediaStreamTrack_enabled_Getter";
  enabled_Getter_(mthis) => enabled_Getter(mthis);

  static enabled_Setter(mthis, __arg_0) native "MediaStreamTrack_enabled_Setter";
  enabled_Setter_(mthis, __arg_0) => enabled_Setter(mthis, __arg_0);

  static getSources_Callback_0() native "MediaStreamTrack_getSources_Callback";
  getSources_Callback_0_() => getSources_Callback_0();

  static getSources_Callback_1(__arg_0) native "MediaStreamTrack_getSources_Callback";
  getSources_Callback_1_(__arg_0) => getSources_Callback_1(__arg_0);

  static getSources_Callback_2(__arg_0, __arg_1) native "MediaStreamTrack_getSources_Callback";
  getSources_Callback_2_(__arg_0, __arg_1) => getSources_Callback_2(__arg_0, __arg_1);

  static getSources_Callback_3(__arg_0, __arg_1, __arg_2) native "MediaStreamTrack_getSources_Callback";
  getSources_Callback_3_(__arg_0, __arg_1, __arg_2) => getSources_Callback_3(__arg_0, __arg_1, __arg_2);

  static id_Getter(mthis) native "MediaStreamTrack_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static kind_Getter(mthis) native "MediaStreamTrack_kind_Getter";
  kind_Getter_(mthis) => kind_Getter(mthis);

  static label_Getter(mthis) native "MediaStreamTrack_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static muted_Getter(mthis) native "MediaStreamTrack_muted_Getter";
  muted_Getter_(mthis) => muted_Getter(mthis);

  static onended_Getter(mthis) native "MediaStreamTrack_onended_Getter";
  onended_Getter_(mthis) => onended_Getter(mthis);

  static onended_Setter(mthis, __arg_0) native "MediaStreamTrack_onended_Setter";
  onended_Setter_(mthis, __arg_0) => onended_Setter(mthis, __arg_0);

  static onmute_Getter(mthis) native "MediaStreamTrack_onmute_Getter";
  onmute_Getter_(mthis) => onmute_Getter(mthis);

  static onmute_Setter(mthis, __arg_0) native "MediaStreamTrack_onmute_Setter";
  onmute_Setter_(mthis, __arg_0) => onmute_Setter(mthis, __arg_0);

  static onunmute_Getter(mthis) native "MediaStreamTrack_onunmute_Getter";
  onunmute_Getter_(mthis) => onunmute_Getter(mthis);

  static onunmute_Setter(mthis, __arg_0) native "MediaStreamTrack_onunmute_Setter";
  onunmute_Setter_(mthis, __arg_0) => onunmute_Setter(mthis, __arg_0);

  static readyState_Getter(mthis) native "MediaStreamTrack_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static stop_Callback_0(mthis) native "MediaStreamTrack_stop_Callback";
  stop_Callback_0_(mthis) => stop_Callback_0(mthis);

  static stop_Callback_1(mthis, __arg_0) native "MediaStreamTrack_stop_Callback";
  stop_Callback_1_(mthis, __arg_0) => stop_Callback_1(mthis, __arg_0);

  static stop_Callback_2(mthis, __arg_0, __arg_1) native "MediaStreamTrack_stop_Callback";
  stop_Callback_2_(mthis, __arg_0, __arg_1) => stop_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkMediaStreamTrackEvent extends BlinkEvent {
  static final instance = new BlinkMediaStreamTrackEvent();

  static track_Getter(mthis) native "MediaStreamTrackEvent_track_Getter";
  track_Getter_(mthis) => track_Getter(mthis);

}

class BlinkMemoryInfo {
  static final instance = new BlinkMemoryInfo();

  static jsHeapSizeLimit_Getter(mthis) native "MemoryInfo_jsHeapSizeLimit_Getter";
  jsHeapSizeLimit_Getter_(mthis) => jsHeapSizeLimit_Getter(mthis);

  static totalJSHeapSize_Getter(mthis) native "MemoryInfo_totalJSHeapSize_Getter";
  totalJSHeapSize_Getter_(mthis) => totalJSHeapSize_Getter(mthis);

  static usedJSHeapSize_Getter(mthis) native "MemoryInfo_usedJSHeapSize_Getter";
  usedJSHeapSize_Getter_(mthis) => usedJSHeapSize_Getter(mthis);

}

class BlinkMessageChannel {
  static final instance = new BlinkMessageChannel();

  static constructorCallback_0() native "MessageChannel_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "MessageChannel_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "MessageChannel_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static port1_Getter(mthis) native "MessageChannel_port1_Getter";
  port1_Getter_(mthis) => port1_Getter(mthis);

  static port2_Getter(mthis) native "MessageChannel_port2_Getter";
  port2_Getter_(mthis) => port2_Getter(mthis);

}

class BlinkMessageEvent extends BlinkEvent {
  static final instance = new BlinkMessageEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "MessageEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static data_Getter(mthis) native "MessageEvent_data_Getter";
  data_Getter_(mthis) => data_Getter(mthis);

  static initMessageEvent_Callback_0(mthis) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_0_(mthis) => initMessageEvent_Callback_0(mthis);

  static initMessageEvent_Callback_1(mthis, __arg_0) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_1_(mthis, __arg_0) => initMessageEvent_Callback_1(mthis, __arg_0);

  static initMessageEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => initMessageEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static initMessageEvent_Callback_2(mthis, __arg_0, __arg_1) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_2_(mthis, __arg_0, __arg_1) => initMessageEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initMessageEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initMessageEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initMessageEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initMessageEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initMessageEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initMessageEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initMessageEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initMessageEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initMessageEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initMessageEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static initMessageEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => initMessageEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static initMessageEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "MessageEvent_initMessageEvent_Callback";
  initMessageEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => initMessageEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static lastEventId_Getter(mthis) native "MessageEvent_lastEventId_Getter";
  lastEventId_Getter_(mthis) => lastEventId_Getter(mthis);

  static origin_Getter(mthis) native "MessageEvent_origin_Getter";
  origin_Getter_(mthis) => origin_Getter(mthis);

  static source_Getter(mthis) native "MessageEvent_source_Getter";
  source_Getter_(mthis) => source_Getter(mthis);

}

class BlinkMessagePort extends BlinkEventTarget {
  static final instance = new BlinkMessagePort();

  static close_Callback_0(mthis) native "MessagePort_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "MessagePort_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "MessagePort_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static onmessage_Getter(mthis) native "MessagePort_onmessage_Getter";
  onmessage_Getter_(mthis) => onmessage_Getter(mthis);

  static onmessage_Setter(mthis, __arg_0) native "MessagePort_onmessage_Setter";
  onmessage_Setter_(mthis, __arg_0) => onmessage_Setter(mthis, __arg_0);

  static postMessage_Callback_0(mthis) native "MessagePort_postMessage_Callback";
  postMessage_Callback_0_(mthis) => postMessage_Callback_0(mthis);

  static postMessage_Callback_1(mthis, __arg_0) native "MessagePort_postMessage_Callback";
  postMessage_Callback_1_(mthis, __arg_0) => postMessage_Callback_1(mthis, __arg_0);

  static postMessage_Callback_2(mthis, __arg_0, __arg_1) native "MessagePort_postMessage_Callback";
  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => postMessage_Callback_2(mthis, __arg_0, __arg_1);

  static postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MessagePort_postMessage_Callback";
  postMessage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "MessagePort_postMessage_Callback";
  postMessage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static start_Callback_0(mthis) native "MessagePort_start_Callback";
  start_Callback_0_(mthis) => start_Callback_0(mthis);

  static start_Callback_1(mthis, __arg_0) native "MessagePort_start_Callback";
  start_Callback_1_(mthis, __arg_0) => start_Callback_1(mthis, __arg_0);

  static start_Callback_2(mthis, __arg_0, __arg_1) native "MessagePort_start_Callback";
  start_Callback_2_(mthis, __arg_0, __arg_1) => start_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkMetadata {
  static final instance = new BlinkMetadata();

  static modificationTime_Getter(mthis) native "Metadata_modificationTime_Getter";
  modificationTime_Getter_(mthis) => modificationTime_Getter(mthis);

  static size_Getter(mthis) native "Metadata_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

}

class BlinkMimeType {
  static final instance = new BlinkMimeType();

  static description_Getter(mthis) native "MimeType_description_Getter";
  description_Getter_(mthis) => description_Getter(mthis);

  static enabledPlugin_Getter(mthis) native "MimeType_enabledPlugin_Getter";
  enabledPlugin_Getter_(mthis) => enabledPlugin_Getter(mthis);

  static suffixes_Getter(mthis) native "MimeType_suffixes_Getter";
  suffixes_Getter_(mthis) => suffixes_Getter(mthis);

  static type_Getter(mthis) native "MimeType_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkMimeTypeArray {
  static final instance = new BlinkMimeTypeArray();

  static $__getter___Callback_1(mthis, __arg_0) native "MimeTypeArray___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "MimeTypeArray_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "MimeTypeArray_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "MimeTypeArray_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MimeTypeArray_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "MimeTypeArray_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static namedItem_Callback_0(mthis) native "MimeTypeArray_namedItem_Callback";
  namedItem_Callback_0_(mthis) => namedItem_Callback_0(mthis);

  static namedItem_Callback_1(mthis, __arg_0) native "MimeTypeArray_namedItem_Callback";
  namedItem_Callback_1_(mthis, __arg_0) => namedItem_Callback_1(mthis, __arg_0);

  static namedItem_Callback_2(mthis, __arg_0, __arg_1) native "MimeTypeArray_namedItem_Callback";
  namedItem_Callback_2_(mthis, __arg_0, __arg_1) => namedItem_Callback_2(mthis, __arg_0, __arg_1);

  static namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MimeTypeArray_namedItem_Callback";
  namedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkMouseEvent extends BlinkUIEvent {
  static final instance = new BlinkMouseEvent();

  static altKey_Getter(mthis) native "MouseEvent_altKey_Getter";
  altKey_Getter_(mthis) => altKey_Getter(mthis);

  static button_Getter(mthis) native "MouseEvent_button_Getter";
  button_Getter_(mthis) => button_Getter(mthis);

  static clientX_Getter(mthis) native "MouseEvent_clientX_Getter";
  clientX_Getter_(mthis) => clientX_Getter(mthis);

  static clientY_Getter(mthis) native "MouseEvent_clientY_Getter";
  clientY_Getter_(mthis) => clientY_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "MouseEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static ctrlKey_Getter(mthis) native "MouseEvent_ctrlKey_Getter";
  ctrlKey_Getter_(mthis) => ctrlKey_Getter(mthis);

  static dataTransfer_Getter(mthis) native "MouseEvent_dataTransfer_Getter";
  dataTransfer_Getter_(mthis) => dataTransfer_Getter(mthis);

  static fromElement_Getter(mthis) native "MouseEvent_fromElement_Getter";
  fromElement_Getter_(mthis) => fromElement_Getter(mthis);

  static initMouseEvent_Callback_0(mthis) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_0_(mthis) => initMouseEvent_Callback_0(mthis);

  static initMouseEvent_Callback_1(mthis, __arg_0) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_1_(mthis, __arg_0) => initMouseEvent_Callback_1(mthis, __arg_0);

  static initMouseEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => initMouseEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static initMouseEvent_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => initMouseEvent_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10);

  static initMouseEvent_Callback_12(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_12_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) => initMouseEvent_Callback_12(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11);

  static initMouseEvent_Callback_13(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_13_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12) => initMouseEvent_Callback_13(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12);

  static initMouseEvent_Callback_14(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_14_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13) => initMouseEvent_Callback_14(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13);

  static initMouseEvent_Callback_15(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_15_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14) => initMouseEvent_Callback_15(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14);

  static initMouseEvent_Callback_16(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14, __arg_15) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_16_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14, __arg_15) => initMouseEvent_Callback_16(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14, __arg_15);

  static initMouseEvent_Callback_17(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14, __arg_15, __arg_16) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_17_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14, __arg_15, __arg_16) => initMouseEvent_Callback_17(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14, __arg_15, __arg_16);

  static initMouseEvent_Callback_2(mthis, __arg_0, __arg_1) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_2_(mthis, __arg_0, __arg_1) => initMouseEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initMouseEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initMouseEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initMouseEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initMouseEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initMouseEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initMouseEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initMouseEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initMouseEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initMouseEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initMouseEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static initMouseEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => initMouseEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static initMouseEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "MouseEvent_initMouseEvent_Callback";
  initMouseEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => initMouseEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static metaKey_Getter(mthis) native "MouseEvent_metaKey_Getter";
  metaKey_Getter_(mthis) => metaKey_Getter(mthis);

  static movementX_Getter(mthis) native "MouseEvent_movementX_Getter";
  movementX_Getter_(mthis) => movementX_Getter(mthis);

  static movementY_Getter(mthis) native "MouseEvent_movementY_Getter";
  movementY_Getter_(mthis) => movementY_Getter(mthis);

  static offsetX_Getter(mthis) native "MouseEvent_offsetX_Getter";
  offsetX_Getter_(mthis) => offsetX_Getter(mthis);

  static offsetY_Getter(mthis) native "MouseEvent_offsetY_Getter";
  offsetY_Getter_(mthis) => offsetY_Getter(mthis);

  static region_Getter(mthis) native "MouseEvent_region_Getter";
  region_Getter_(mthis) => region_Getter(mthis);

  static relatedTarget_Getter(mthis) native "MouseEvent_relatedTarget_Getter";
  relatedTarget_Getter_(mthis) => relatedTarget_Getter(mthis);

  static screenX_Getter(mthis) native "MouseEvent_screenX_Getter";
  screenX_Getter_(mthis) => screenX_Getter(mthis);

  static screenY_Getter(mthis) native "MouseEvent_screenY_Getter";
  screenY_Getter_(mthis) => screenY_Getter(mthis);

  static shiftKey_Getter(mthis) native "MouseEvent_shiftKey_Getter";
  shiftKey_Getter_(mthis) => shiftKey_Getter(mthis);

  static toElement_Getter(mthis) native "MouseEvent_toElement_Getter";
  toElement_Getter_(mthis) => toElement_Getter(mthis);

  static webkitMovementX_Getter(mthis) native "MouseEvent_webkitMovementX_Getter";
  webkitMovementX_Getter_(mthis) => webkitMovementX_Getter(mthis);

  static webkitMovementY_Getter(mthis) native "MouseEvent_webkitMovementY_Getter";
  webkitMovementY_Getter_(mthis) => webkitMovementY_Getter(mthis);

}

class BlinkMutationEvent extends BlinkEvent {
  static final instance = new BlinkMutationEvent();

  static attrChange_Getter(mthis) native "MutationEvent_attrChange_Getter";
  attrChange_Getter_(mthis) => attrChange_Getter(mthis);

  static attrName_Getter(mthis) native "MutationEvent_attrName_Getter";
  attrName_Getter_(mthis) => attrName_Getter(mthis);

  static initMutationEvent_Callback_0(mthis) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_0_(mthis) => initMutationEvent_Callback_0(mthis);

  static initMutationEvent_Callback_1(mthis, __arg_0) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_1_(mthis, __arg_0) => initMutationEvent_Callback_1(mthis, __arg_0);

  static initMutationEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => initMutationEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static initMutationEvent_Callback_2(mthis, __arg_0, __arg_1) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_2_(mthis, __arg_0, __arg_1) => initMutationEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initMutationEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initMutationEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initMutationEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initMutationEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initMutationEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initMutationEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initMutationEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initMutationEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initMutationEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initMutationEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static initMutationEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => initMutationEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static initMutationEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "MutationEvent_initMutationEvent_Callback";
  initMutationEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => initMutationEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static newValue_Getter(mthis) native "MutationEvent_newValue_Getter";
  newValue_Getter_(mthis) => newValue_Getter(mthis);

  static prevValue_Getter(mthis) native "MutationEvent_prevValue_Getter";
  prevValue_Getter_(mthis) => prevValue_Getter(mthis);

  static relatedNode_Getter(mthis) native "MutationEvent_relatedNode_Getter";
  relatedNode_Getter_(mthis) => relatedNode_Getter(mthis);

}

class BlinkMutationObserver {
  static final instance = new BlinkMutationObserver();

  static constructorCallback_0() native "MutationObserver_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "MutationObserver_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "MutationObserver_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "MutationObserver_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static disconnect_Callback_0(mthis) native "MutationObserver_disconnect_Callback";
  disconnect_Callback_0_(mthis) => disconnect_Callback_0(mthis);

  static disconnect_Callback_1(mthis, __arg_0) native "MutationObserver_disconnect_Callback";
  disconnect_Callback_1_(mthis, __arg_0) => disconnect_Callback_1(mthis, __arg_0);

  static disconnect_Callback_2(mthis, __arg_0, __arg_1) native "MutationObserver_disconnect_Callback";
  disconnect_Callback_2_(mthis, __arg_0, __arg_1) => disconnect_Callback_2(mthis, __arg_0, __arg_1);

  static observe_Callback_0(mthis) native "MutationObserver_observe_Callback";
  observe_Callback_0_(mthis) => observe_Callback_0(mthis);

  static observe_Callback_1(mthis, __arg_0) native "MutationObserver_observe_Callback";
  observe_Callback_1_(mthis, __arg_0) => observe_Callback_1(mthis, __arg_0);

  static observe_Callback_2(mthis, __arg_0, __arg_1) native "MutationObserver_observe_Callback";
  observe_Callback_2_(mthis, __arg_0, __arg_1) => observe_Callback_2(mthis, __arg_0, __arg_1);

  static observe_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "MutationObserver_observe_Callback";
  observe_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => observe_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static observe_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "MutationObserver_observe_Callback";
  observe_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => observe_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static takeRecords_Callback_0(mthis) native "MutationObserver_takeRecords_Callback";
  takeRecords_Callback_0_(mthis) => takeRecords_Callback_0(mthis);

  static takeRecords_Callback_1(mthis, __arg_0) native "MutationObserver_takeRecords_Callback";
  takeRecords_Callback_1_(mthis, __arg_0) => takeRecords_Callback_1(mthis, __arg_0);

  static takeRecords_Callback_2(mthis, __arg_0, __arg_1) native "MutationObserver_takeRecords_Callback";
  takeRecords_Callback_2_(mthis, __arg_0, __arg_1) => takeRecords_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkMutationRecord {
  static final instance = new BlinkMutationRecord();

  static addedNodes_Getter(mthis) native "MutationRecord_addedNodes_Getter";
  addedNodes_Getter_(mthis) => addedNodes_Getter(mthis);

  static attributeName_Getter(mthis) native "MutationRecord_attributeName_Getter";
  attributeName_Getter_(mthis) => attributeName_Getter(mthis);

  static attributeNamespace_Getter(mthis) native "MutationRecord_attributeNamespace_Getter";
  attributeNamespace_Getter_(mthis) => attributeNamespace_Getter(mthis);

  static nextSibling_Getter(mthis) native "MutationRecord_nextSibling_Getter";
  nextSibling_Getter_(mthis) => nextSibling_Getter(mthis);

  static oldValue_Getter(mthis) native "MutationRecord_oldValue_Getter";
  oldValue_Getter_(mthis) => oldValue_Getter(mthis);

  static previousSibling_Getter(mthis) native "MutationRecord_previousSibling_Getter";
  previousSibling_Getter_(mthis) => previousSibling_Getter(mthis);

  static removedNodes_Getter(mthis) native "MutationRecord_removedNodes_Getter";
  removedNodes_Getter_(mthis) => removedNodes_Getter(mthis);

  static target_Getter(mthis) native "MutationRecord_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

  static type_Getter(mthis) native "MutationRecord_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkNamedNodeMap {
  static final instance = new BlinkNamedNodeMap();

  static $__getter___Callback_1(mthis, __arg_0) native "NamedNodeMap___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static getNamedItemNS_Callback_0(mthis) native "NamedNodeMap_getNamedItemNS_Callback";
  getNamedItemNS_Callback_0_(mthis) => getNamedItemNS_Callback_0(mthis);

  static getNamedItemNS_Callback_1(mthis, __arg_0) native "NamedNodeMap_getNamedItemNS_Callback";
  getNamedItemNS_Callback_1_(mthis, __arg_0) => getNamedItemNS_Callback_1(mthis, __arg_0);

  static getNamedItemNS_Callback_2(mthis, __arg_0, __arg_1) native "NamedNodeMap_getNamedItemNS_Callback";
  getNamedItemNS_Callback_2_(mthis, __arg_0, __arg_1) => getNamedItemNS_Callback_2(mthis, __arg_0, __arg_1);

  static getNamedItemNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "NamedNodeMap_getNamedItemNS_Callback";
  getNamedItemNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getNamedItemNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getNamedItemNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "NamedNodeMap_getNamedItemNS_Callback";
  getNamedItemNS_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getNamedItemNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getNamedItem_Callback_0(mthis) native "NamedNodeMap_getNamedItem_Callback";
  getNamedItem_Callback_0_(mthis) => getNamedItem_Callback_0(mthis);

  static getNamedItem_Callback_1(mthis, __arg_0) native "NamedNodeMap_getNamedItem_Callback";
  getNamedItem_Callback_1_(mthis, __arg_0) => getNamedItem_Callback_1(mthis, __arg_0);

  static getNamedItem_Callback_2(mthis, __arg_0, __arg_1) native "NamedNodeMap_getNamedItem_Callback";
  getNamedItem_Callback_2_(mthis, __arg_0, __arg_1) => getNamedItem_Callback_2(mthis, __arg_0, __arg_1);

  static getNamedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "NamedNodeMap_getNamedItem_Callback";
  getNamedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getNamedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static item_Callback_0(mthis) native "NamedNodeMap_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "NamedNodeMap_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "NamedNodeMap_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "NamedNodeMap_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "NamedNodeMap_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static removeNamedItemNS_Callback_0(mthis) native "NamedNodeMap_removeNamedItemNS_Callback";
  removeNamedItemNS_Callback_0_(mthis) => removeNamedItemNS_Callback_0(mthis);

  static removeNamedItemNS_Callback_1(mthis, __arg_0) native "NamedNodeMap_removeNamedItemNS_Callback";
  removeNamedItemNS_Callback_1_(mthis, __arg_0) => removeNamedItemNS_Callback_1(mthis, __arg_0);

  static removeNamedItemNS_Callback_2(mthis, __arg_0, __arg_1) native "NamedNodeMap_removeNamedItemNS_Callback";
  removeNamedItemNS_Callback_2_(mthis, __arg_0, __arg_1) => removeNamedItemNS_Callback_2(mthis, __arg_0, __arg_1);

  static removeNamedItemNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "NamedNodeMap_removeNamedItemNS_Callback";
  removeNamedItemNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeNamedItemNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static removeNamedItemNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "NamedNodeMap_removeNamedItemNS_Callback";
  removeNamedItemNS_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => removeNamedItemNS_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static removeNamedItem_Callback_0(mthis) native "NamedNodeMap_removeNamedItem_Callback";
  removeNamedItem_Callback_0_(mthis) => removeNamedItem_Callback_0(mthis);

  static removeNamedItem_Callback_1(mthis, __arg_0) native "NamedNodeMap_removeNamedItem_Callback";
  removeNamedItem_Callback_1_(mthis, __arg_0) => removeNamedItem_Callback_1(mthis, __arg_0);

  static removeNamedItem_Callback_2(mthis, __arg_0, __arg_1) native "NamedNodeMap_removeNamedItem_Callback";
  removeNamedItem_Callback_2_(mthis, __arg_0, __arg_1) => removeNamedItem_Callback_2(mthis, __arg_0, __arg_1);

  static removeNamedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "NamedNodeMap_removeNamedItem_Callback";
  removeNamedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeNamedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setNamedItemNS_Callback_0(mthis) native "NamedNodeMap_setNamedItemNS_Callback";
  setNamedItemNS_Callback_0_(mthis) => setNamedItemNS_Callback_0(mthis);

  static setNamedItemNS_Callback_1(mthis, __arg_0) native "NamedNodeMap_setNamedItemNS_Callback";
  setNamedItemNS_Callback_1_(mthis, __arg_0) => setNamedItemNS_Callback_1(mthis, __arg_0);

  static setNamedItemNS_Callback_2(mthis, __arg_0, __arg_1) native "NamedNodeMap_setNamedItemNS_Callback";
  setNamedItemNS_Callback_2_(mthis, __arg_0, __arg_1) => setNamedItemNS_Callback_2(mthis, __arg_0, __arg_1);

  static setNamedItemNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "NamedNodeMap_setNamedItemNS_Callback";
  setNamedItemNS_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setNamedItemNS_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setNamedItem_Callback_0(mthis) native "NamedNodeMap_setNamedItem_Callback";
  setNamedItem_Callback_0_(mthis) => setNamedItem_Callback_0(mthis);

  static setNamedItem_Callback_1(mthis, __arg_0) native "NamedNodeMap_setNamedItem_Callback";
  setNamedItem_Callback_1_(mthis, __arg_0) => setNamedItem_Callback_1(mthis, __arg_0);

  static setNamedItem_Callback_2(mthis, __arg_0, __arg_1) native "NamedNodeMap_setNamedItem_Callback";
  setNamedItem_Callback_2_(mthis, __arg_0, __arg_1) => setNamedItem_Callback_2(mthis, __arg_0, __arg_1);

  static setNamedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "NamedNodeMap_setNamedItem_Callback";
  setNamedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setNamedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkNavigator {
  static final instance = new BlinkNavigator();

  static appCodeName_Getter(mthis) native "Navigator_appCodeName_Getter";
  appCodeName_Getter_(mthis) => appCodeName_Getter(mthis);

  static appName_Getter(mthis) native "Navigator_appName_Getter";
  appName_Getter_(mthis) => appName_Getter(mthis);

  static appVersion_Getter(mthis) native "Navigator_appVersion_Getter";
  appVersion_Getter_(mthis) => appVersion_Getter(mthis);

  static connection_Getter(mthis) native "Navigator_connection_Getter";
  connection_Getter_(mthis) => connection_Getter(mthis);

  static cookieEnabled_Getter(mthis) native "Navigator_cookieEnabled_Getter";
  cookieEnabled_Getter_(mthis) => cookieEnabled_Getter(mthis);

  static credentials_Getter(mthis) native "Navigator_credentials_Getter";
  credentials_Getter_(mthis) => credentials_Getter(mthis);

  static dartEnabled_Getter(mthis) native "Navigator_dartEnabled_Getter";
  dartEnabled_Getter_(mthis) => dartEnabled_Getter(mthis);

  static doNotTrack_Getter(mthis) native "Navigator_doNotTrack_Getter";
  doNotTrack_Getter_(mthis) => doNotTrack_Getter(mthis);

  static geofencing_Getter(mthis) native "Navigator_geofencing_Getter";
  geofencing_Getter_(mthis) => geofencing_Getter(mthis);

  static geolocation_Getter(mthis) native "Navigator_geolocation_Getter";
  geolocation_Getter_(mthis) => geolocation_Getter(mthis);

  static getBattery_Callback_0(mthis) native "Navigator_getBattery_Callback";
  getBattery_Callback_0_(mthis) => getBattery_Callback_0(mthis);

  static getBattery_Callback_1(mthis, __arg_0) native "Navigator_getBattery_Callback";
  getBattery_Callback_1_(mthis, __arg_0) => getBattery_Callback_1(mthis, __arg_0);

  static getBattery_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_getBattery_Callback";
  getBattery_Callback_2_(mthis, __arg_0, __arg_1) => getBattery_Callback_2(mthis, __arg_0, __arg_1);

  static getGamepads_Callback_0(mthis) native "Navigator_getGamepads_Callback";
  getGamepads_Callback_0_(mthis) => getGamepads_Callback_0(mthis);

  static getGamepads_Callback_1(mthis, __arg_0) native "Navigator_getGamepads_Callback";
  getGamepads_Callback_1_(mthis, __arg_0) => getGamepads_Callback_1(mthis, __arg_0);

  static getGamepads_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_getGamepads_Callback";
  getGamepads_Callback_2_(mthis, __arg_0, __arg_1) => getGamepads_Callback_2(mthis, __arg_0, __arg_1);

  static getStorageUpdates_Callback_0(mthis) native "Navigator_getStorageUpdates_Callback";
  getStorageUpdates_Callback_0_(mthis) => getStorageUpdates_Callback_0(mthis);

  static getStorageUpdates_Callback_1(mthis, __arg_0) native "Navigator_getStorageUpdates_Callback";
  getStorageUpdates_Callback_1_(mthis, __arg_0) => getStorageUpdates_Callback_1(mthis, __arg_0);

  static getStorageUpdates_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_getStorageUpdates_Callback";
  getStorageUpdates_Callback_2_(mthis, __arg_0, __arg_1) => getStorageUpdates_Callback_2(mthis, __arg_0, __arg_1);

  static hardwareConcurrency_Getter(mthis) native "Navigator_hardwareConcurrency_Getter";
  hardwareConcurrency_Getter_(mthis) => hardwareConcurrency_Getter(mthis);

  static isProtocolHandlerRegistered_Callback_0(mthis) native "Navigator_isProtocolHandlerRegistered_Callback";
  isProtocolHandlerRegistered_Callback_0_(mthis) => isProtocolHandlerRegistered_Callback_0(mthis);

  static isProtocolHandlerRegistered_Callback_1(mthis, __arg_0) native "Navigator_isProtocolHandlerRegistered_Callback";
  isProtocolHandlerRegistered_Callback_1_(mthis, __arg_0) => isProtocolHandlerRegistered_Callback_1(mthis, __arg_0);

  static isProtocolHandlerRegistered_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_isProtocolHandlerRegistered_Callback";
  isProtocolHandlerRegistered_Callback_2_(mthis, __arg_0, __arg_1) => isProtocolHandlerRegistered_Callback_2(mthis, __arg_0, __arg_1);

  static isProtocolHandlerRegistered_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Navigator_isProtocolHandlerRegistered_Callback";
  isProtocolHandlerRegistered_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isProtocolHandlerRegistered_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isProtocolHandlerRegistered_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Navigator_isProtocolHandlerRegistered_Callback";
  isProtocolHandlerRegistered_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => isProtocolHandlerRegistered_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static javaEnabled_Callback_0(mthis) native "Navigator_javaEnabled_Callback";
  javaEnabled_Callback_0_(mthis) => javaEnabled_Callback_0(mthis);

  static javaEnabled_Callback_1(mthis, __arg_0) native "Navigator_javaEnabled_Callback";
  javaEnabled_Callback_1_(mthis, __arg_0) => javaEnabled_Callback_1(mthis, __arg_0);

  static javaEnabled_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_javaEnabled_Callback";
  javaEnabled_Callback_2_(mthis, __arg_0, __arg_1) => javaEnabled_Callback_2(mthis, __arg_0, __arg_1);

  static language_Getter(mthis) native "Navigator_language_Getter";
  language_Getter_(mthis) => language_Getter(mthis);

  static languages_Getter(mthis) native "Navigator_languages_Getter";
  languages_Getter_(mthis) => languages_Getter(mthis);

  static maxTouchPoints_Getter(mthis) native "Navigator_maxTouchPoints_Getter";
  maxTouchPoints_Getter_(mthis) => maxTouchPoints_Getter(mthis);

  static mimeTypes_Getter(mthis) native "Navigator_mimeTypes_Getter";
  mimeTypes_Getter_(mthis) => mimeTypes_Getter(mthis);

  static onLine_Getter(mthis) native "Navigator_onLine_Getter";
  onLine_Getter_(mthis) => onLine_Getter(mthis);

  static platform_Getter(mthis) native "Navigator_platform_Getter";
  platform_Getter_(mthis) => platform_Getter(mthis);

  static plugins_Getter(mthis) native "Navigator_plugins_Getter";
  plugins_Getter_(mthis) => plugins_Getter(mthis);

  static presentation_Getter(mthis) native "Navigator_presentation_Getter";
  presentation_Getter_(mthis) => presentation_Getter(mthis);

  static productSub_Getter(mthis) native "Navigator_productSub_Getter";
  productSub_Getter_(mthis) => productSub_Getter(mthis);

  static product_Getter(mthis) native "Navigator_product_Getter";
  product_Getter_(mthis) => product_Getter(mthis);

  static push_Getter(mthis) native "Navigator_push_Getter";
  push_Getter_(mthis) => push_Getter(mthis);

  static registerProtocolHandler_Callback_1(mthis, __arg_0) native "Navigator_registerProtocolHandler_Callback";
  registerProtocolHandler_Callback_1_(mthis, __arg_0) => registerProtocolHandler_Callback_1(mthis, __arg_0);

  static registerProtocolHandler_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_registerProtocolHandler_Callback";
  registerProtocolHandler_Callback_2_(mthis, __arg_0, __arg_1) => registerProtocolHandler_Callback_2(mthis, __arg_0, __arg_1);

  static registerProtocolHandler_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Navigator_registerProtocolHandler_Callback";
  registerProtocolHandler_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => registerProtocolHandler_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static registerProtocolHandler_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Navigator_registerProtocolHandler_Callback";
  registerProtocolHandler_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => registerProtocolHandler_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static registerProtocolHandler_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Navigator_registerProtocolHandler_Callback";
  registerProtocolHandler_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => registerProtocolHandler_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static sendBeacon_Callback_0(mthis) native "Navigator_sendBeacon_Callback";
  sendBeacon_Callback_0_(mthis) => sendBeacon_Callback_0(mthis);

  static sendBeacon_Callback_1(mthis, __arg_0) native "Navigator_sendBeacon_Callback";
  sendBeacon_Callback_1_(mthis, __arg_0) => sendBeacon_Callback_1(mthis, __arg_0);

  static sendBeacon_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_sendBeacon_Callback";
  sendBeacon_Callback_2_(mthis, __arg_0, __arg_1) => sendBeacon_Callback_2(mthis, __arg_0, __arg_1);

  static sendBeacon_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Navigator_sendBeacon_Callback";
  sendBeacon_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => sendBeacon_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static sendBeacon_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Navigator_sendBeacon_Callback";
  sendBeacon_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => sendBeacon_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static serviceWorker_Getter(mthis) native "Navigator_serviceWorker_Getter";
  serviceWorker_Getter_(mthis) => serviceWorker_Getter(mthis);

  static storageQuota_Getter(mthis) native "Navigator_storageQuota_Getter";
  storageQuota_Getter_(mthis) => storageQuota_Getter(mthis);

  static unregisterProtocolHandler_Callback_0(mthis) native "Navigator_unregisterProtocolHandler_Callback";
  unregisterProtocolHandler_Callback_0_(mthis) => unregisterProtocolHandler_Callback_0(mthis);

  static unregisterProtocolHandler_Callback_1(mthis, __arg_0) native "Navigator_unregisterProtocolHandler_Callback";
  unregisterProtocolHandler_Callback_1_(mthis, __arg_0) => unregisterProtocolHandler_Callback_1(mthis, __arg_0);

  static unregisterProtocolHandler_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_unregisterProtocolHandler_Callback";
  unregisterProtocolHandler_Callback_2_(mthis, __arg_0, __arg_1) => unregisterProtocolHandler_Callback_2(mthis, __arg_0, __arg_1);

  static unregisterProtocolHandler_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Navigator_unregisterProtocolHandler_Callback";
  unregisterProtocolHandler_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => unregisterProtocolHandler_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static unregisterProtocolHandler_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Navigator_unregisterProtocolHandler_Callback";
  unregisterProtocolHandler_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => unregisterProtocolHandler_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static userAgent_Getter(mthis) native "Navigator_userAgent_Getter";
  userAgent_Getter_(mthis) => userAgent_Getter(mthis);

  static vendorSub_Getter(mthis) native "Navigator_vendorSub_Getter";
  vendorSub_Getter_(mthis) => vendorSub_Getter(mthis);

  static vendor_Getter(mthis) native "Navigator_vendor_Getter";
  vendor_Getter_(mthis) => vendor_Getter(mthis);

  static vibrate_Callback_0(mthis) native "Navigator_vibrate_Callback";
  vibrate_Callback_0_(mthis) => vibrate_Callback_0(mthis);

  static vibrate_Callback_1(mthis, __arg_0) native "Navigator_vibrate_Callback";
  vibrate_Callback_1_(mthis, __arg_0) => vibrate_Callback_1(mthis, __arg_0);

  static vibrate_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_vibrate_Callback";
  vibrate_Callback_2_(mthis, __arg_0, __arg_1) => vibrate_Callback_2(mthis, __arg_0, __arg_1);

  static vibrate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Navigator_vibrate_Callback";
  vibrate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vibrate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitGetGamepads_Callback_0(mthis) native "Navigator_webkitGetGamepads_Callback";
  webkitGetGamepads_Callback_0_(mthis) => webkitGetGamepads_Callback_0(mthis);

  static webkitGetGamepads_Callback_1(mthis, __arg_0) native "Navigator_webkitGetGamepads_Callback";
  webkitGetGamepads_Callback_1_(mthis, __arg_0) => webkitGetGamepads_Callback_1(mthis, __arg_0);

  static webkitGetGamepads_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_webkitGetGamepads_Callback";
  webkitGetGamepads_Callback_2_(mthis, __arg_0, __arg_1) => webkitGetGamepads_Callback_2(mthis, __arg_0, __arg_1);

  static webkitGetUserMedia_Callback_1(mthis, __arg_0) native "Navigator_webkitGetUserMedia_Callback";
  webkitGetUserMedia_Callback_1_(mthis, __arg_0) => webkitGetUserMedia_Callback_1(mthis, __arg_0);

  static webkitGetUserMedia_Callback_2(mthis, __arg_0, __arg_1) native "Navigator_webkitGetUserMedia_Callback";
  webkitGetUserMedia_Callback_2_(mthis, __arg_0, __arg_1) => webkitGetUserMedia_Callback_2(mthis, __arg_0, __arg_1);

  static webkitGetUserMedia_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Navigator_webkitGetUserMedia_Callback";
  webkitGetUserMedia_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitGetUserMedia_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitGetUserMedia_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Navigator_webkitGetUserMedia_Callback";
  webkitGetUserMedia_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => webkitGetUserMedia_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitGetUserMedia_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Navigator_webkitGetUserMedia_Callback";
  webkitGetUserMedia_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => webkitGetUserMedia_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static webkitPersistentStorage_Getter(mthis) native "Navigator_webkitPersistentStorage_Getter";
  webkitPersistentStorage_Getter_(mthis) => webkitPersistentStorage_Getter(mthis);

  static webkitTemporaryStorage_Getter(mthis) native "Navigator_webkitTemporaryStorage_Getter";
  webkitTemporaryStorage_Getter_(mthis) => webkitTemporaryStorage_Getter(mthis);

}

class BlinkNavigatorUserMediaError {
  static final instance = new BlinkNavigatorUserMediaError();

  static constraintName_Getter(mthis) native "NavigatorUserMediaError_constraintName_Getter";
  constraintName_Getter_(mthis) => constraintName_Getter(mthis);

  static message_Getter(mthis) native "NavigatorUserMediaError_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

  static name_Getter(mthis) native "NavigatorUserMediaError_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

}

class BlinkNetworkInformation extends BlinkEventTarget {
  static final instance = new BlinkNetworkInformation();

  static ontypechange_Getter(mthis) native "NetworkInformation_ontypechange_Getter";
  ontypechange_Getter_(mthis) => ontypechange_Getter(mthis);

  static ontypechange_Setter(mthis, __arg_0) native "NetworkInformation_ontypechange_Setter";
  ontypechange_Setter_(mthis, __arg_0) => ontypechange_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "NetworkInformation_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkNode extends BlinkEventTarget {
  static final instance = new BlinkNode();

  static appendChild_Callback_0(mthis) native "Node_appendChild_Callback";
  appendChild_Callback_0_(mthis) => appendChild_Callback_0(mthis);

  static appendChild_Callback_1(mthis, __arg_0) native "Node_appendChild_Callback";
  appendChild_Callback_1_(mthis, __arg_0) => appendChild_Callback_1(mthis, __arg_0);

  static appendChild_Callback_2(mthis, __arg_0, __arg_1) native "Node_appendChild_Callback";
  appendChild_Callback_2_(mthis, __arg_0, __arg_1) => appendChild_Callback_2(mthis, __arg_0, __arg_1);

  static appendChild_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Node_appendChild_Callback";
  appendChild_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendChild_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static baseURI_Getter(mthis) native "Node_baseURI_Getter";
  baseURI_Getter_(mthis) => baseURI_Getter(mthis);

  static childNodes_Getter(mthis) native "Node_childNodes_Getter";
  childNodes_Getter_(mthis) => childNodes_Getter(mthis);

  static cloneNode_Callback_0(mthis) native "Node_cloneNode_Callback";
  cloneNode_Callback_0_(mthis) => cloneNode_Callback_0(mthis);

  static cloneNode_Callback_1(mthis, __arg_0) native "Node_cloneNode_Callback";
  cloneNode_Callback_1_(mthis, __arg_0) => cloneNode_Callback_1(mthis, __arg_0);

  static cloneNode_Callback_2(mthis, __arg_0, __arg_1) native "Node_cloneNode_Callback";
  cloneNode_Callback_2_(mthis, __arg_0, __arg_1) => cloneNode_Callback_2(mthis, __arg_0, __arg_1);

  static cloneNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Node_cloneNode_Callback";
  cloneNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => cloneNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static contains_Callback_0(mthis) native "Node_contains_Callback";
  contains_Callback_0_(mthis) => contains_Callback_0(mthis);

  static contains_Callback_1(mthis, __arg_0) native "Node_contains_Callback";
  contains_Callback_1_(mthis, __arg_0) => contains_Callback_1(mthis, __arg_0);

  static contains_Callback_2(mthis, __arg_0, __arg_1) native "Node_contains_Callback";
  contains_Callback_2_(mthis, __arg_0, __arg_1) => contains_Callback_2(mthis, __arg_0, __arg_1);

  static contains_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Node_contains_Callback";
  contains_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => contains_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static firstChild_Getter(mthis) native "Node_firstChild_Getter";
  firstChild_Getter_(mthis) => firstChild_Getter(mthis);

  static hasChildNodes_Callback_0(mthis) native "Node_hasChildNodes_Callback";
  hasChildNodes_Callback_0_(mthis) => hasChildNodes_Callback_0(mthis);

  static hasChildNodes_Callback_1(mthis, __arg_0) native "Node_hasChildNodes_Callback";
  hasChildNodes_Callback_1_(mthis, __arg_0) => hasChildNodes_Callback_1(mthis, __arg_0);

  static hasChildNodes_Callback_2(mthis, __arg_0, __arg_1) native "Node_hasChildNodes_Callback";
  hasChildNodes_Callback_2_(mthis, __arg_0, __arg_1) => hasChildNodes_Callback_2(mthis, __arg_0, __arg_1);

  static insertBefore_Callback_0(mthis) native "Node_insertBefore_Callback";
  insertBefore_Callback_0_(mthis) => insertBefore_Callback_0(mthis);

  static insertBefore_Callback_1(mthis, __arg_0) native "Node_insertBefore_Callback";
  insertBefore_Callback_1_(mthis, __arg_0) => insertBefore_Callback_1(mthis, __arg_0);

  static insertBefore_Callback_2(mthis, __arg_0, __arg_1) native "Node_insertBefore_Callback";
  insertBefore_Callback_2_(mthis, __arg_0, __arg_1) => insertBefore_Callback_2(mthis, __arg_0, __arg_1);

  static insertBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Node_insertBefore_Callback";
  insertBefore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Node_insertBefore_Callback";
  insertBefore_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static lastChild_Getter(mthis) native "Node_lastChild_Getter";
  lastChild_Getter_(mthis) => lastChild_Getter(mthis);

  static localName_Getter(mthis) native "Node_localName_Getter";
  localName_Getter_(mthis) => localName_Getter(mthis);

  static namespaceURI_Getter(mthis) native "Node_namespaceURI_Getter";
  namespaceURI_Getter_(mthis) => namespaceURI_Getter(mthis);

  static nextSibling_Getter(mthis) native "Node_nextSibling_Getter";
  nextSibling_Getter_(mthis) => nextSibling_Getter(mthis);

  static nodeName_Getter(mthis) native "Node_nodeName_Getter";
  nodeName_Getter_(mthis) => nodeName_Getter(mthis);

  static nodeType_Getter(mthis) native "Node_nodeType_Getter";
  nodeType_Getter_(mthis) => nodeType_Getter(mthis);

  static nodeValue_Getter(mthis) native "Node_nodeValue_Getter";
  nodeValue_Getter_(mthis) => nodeValue_Getter(mthis);

  static nodeValue_Setter(mthis, __arg_0) native "Node_nodeValue_Setter";
  nodeValue_Setter_(mthis, __arg_0) => nodeValue_Setter(mthis, __arg_0);

  static ownerDocument_Getter(mthis) native "Node_ownerDocument_Getter";
  ownerDocument_Getter_(mthis) => ownerDocument_Getter(mthis);

  static parentElement_Getter(mthis) native "Node_parentElement_Getter";
  parentElement_Getter_(mthis) => parentElement_Getter(mthis);

  static parentNode_Getter(mthis) native "Node_parentNode_Getter";
  parentNode_Getter_(mthis) => parentNode_Getter(mthis);

  static previousSibling_Getter(mthis) native "Node_previousSibling_Getter";
  previousSibling_Getter_(mthis) => previousSibling_Getter(mthis);

  static removeChild_Callback_0(mthis) native "Node_removeChild_Callback";
  removeChild_Callback_0_(mthis) => removeChild_Callback_0(mthis);

  static removeChild_Callback_1(mthis, __arg_0) native "Node_removeChild_Callback";
  removeChild_Callback_1_(mthis, __arg_0) => removeChild_Callback_1(mthis, __arg_0);

  static removeChild_Callback_2(mthis, __arg_0, __arg_1) native "Node_removeChild_Callback";
  removeChild_Callback_2_(mthis, __arg_0, __arg_1) => removeChild_Callback_2(mthis, __arg_0, __arg_1);

  static removeChild_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Node_removeChild_Callback";
  removeChild_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeChild_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceChild_Callback_0(mthis) native "Node_replaceChild_Callback";
  replaceChild_Callback_0_(mthis) => replaceChild_Callback_0(mthis);

  static replaceChild_Callback_1(mthis, __arg_0) native "Node_replaceChild_Callback";
  replaceChild_Callback_1_(mthis, __arg_0) => replaceChild_Callback_1(mthis, __arg_0);

  static replaceChild_Callback_2(mthis, __arg_0, __arg_1) native "Node_replaceChild_Callback";
  replaceChild_Callback_2_(mthis, __arg_0, __arg_1) => replaceChild_Callback_2(mthis, __arg_0, __arg_1);

  static replaceChild_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Node_replaceChild_Callback";
  replaceChild_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceChild_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceChild_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Node_replaceChild_Callback";
  replaceChild_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => replaceChild_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static textContent_Getter(mthis) native "Node_textContent_Getter";
  textContent_Getter_(mthis) => textContent_Getter(mthis);

  static textContent_Setter(mthis, __arg_0) native "Node_textContent_Setter";
  textContent_Setter_(mthis, __arg_0) => textContent_Setter(mthis, __arg_0);

}

class BlinkNodeFilter {
  static final instance = new BlinkNodeFilter();

}

class BlinkNodeIterator {
  static final instance = new BlinkNodeIterator();

  static detach_Callback_0(mthis) native "NodeIterator_detach_Callback";
  detach_Callback_0_(mthis) => detach_Callback_0(mthis);

  static detach_Callback_1(mthis, __arg_0) native "NodeIterator_detach_Callback";
  detach_Callback_1_(mthis, __arg_0) => detach_Callback_1(mthis, __arg_0);

  static detach_Callback_2(mthis, __arg_0, __arg_1) native "NodeIterator_detach_Callback";
  detach_Callback_2_(mthis, __arg_0, __arg_1) => detach_Callback_2(mthis, __arg_0, __arg_1);

  static nextNode_Callback_0(mthis) native "NodeIterator_nextNode_Callback";
  nextNode_Callback_0_(mthis) => nextNode_Callback_0(mthis);

  static nextNode_Callback_1(mthis, __arg_0) native "NodeIterator_nextNode_Callback";
  nextNode_Callback_1_(mthis, __arg_0) => nextNode_Callback_1(mthis, __arg_0);

  static nextNode_Callback_2(mthis, __arg_0, __arg_1) native "NodeIterator_nextNode_Callback";
  nextNode_Callback_2_(mthis, __arg_0, __arg_1) => nextNode_Callback_2(mthis, __arg_0, __arg_1);

  static pointerBeforeReferenceNode_Getter(mthis) native "NodeIterator_pointerBeforeReferenceNode_Getter";
  pointerBeforeReferenceNode_Getter_(mthis) => pointerBeforeReferenceNode_Getter(mthis);

  static previousNode_Callback_0(mthis) native "NodeIterator_previousNode_Callback";
  previousNode_Callback_0_(mthis) => previousNode_Callback_0(mthis);

  static previousNode_Callback_1(mthis, __arg_0) native "NodeIterator_previousNode_Callback";
  previousNode_Callback_1_(mthis, __arg_0) => previousNode_Callback_1(mthis, __arg_0);

  static previousNode_Callback_2(mthis, __arg_0, __arg_1) native "NodeIterator_previousNode_Callback";
  previousNode_Callback_2_(mthis, __arg_0, __arg_1) => previousNode_Callback_2(mthis, __arg_0, __arg_1);

  static referenceNode_Getter(mthis) native "NodeIterator_referenceNode_Getter";
  referenceNode_Getter_(mthis) => referenceNode_Getter(mthis);

  static root_Getter(mthis) native "NodeIterator_root_Getter";
  root_Getter_(mthis) => root_Getter(mthis);

  static whatToShow_Getter(mthis) native "NodeIterator_whatToShow_Getter";
  whatToShow_Getter_(mthis) => whatToShow_Getter(mthis);

}

class BlinkNodeList {
  static final instance = new BlinkNodeList();

  static $__getter___Callback_1(mthis, __arg_0) native "NodeList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "NodeList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "NodeList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "NodeList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "NodeList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "NodeList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkNotification extends BlinkEventTarget {
  static final instance = new BlinkNotification();

  static body_Getter(mthis) native "Notification_body_Getter";
  body_Getter_(mthis) => body_Getter(mthis);

  static close_Callback_0(mthis) native "Notification_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "Notification_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "Notification_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "Notification_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Notification_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Notification_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Notification_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "Notification_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static dir_Getter(mthis) native "Notification_dir_Getter";
  dir_Getter_(mthis) => dir_Getter(mthis);

  static icon_Getter(mthis) native "Notification_icon_Getter";
  icon_Getter_(mthis) => icon_Getter(mthis);

  static lang_Getter(mthis) native "Notification_lang_Getter";
  lang_Getter_(mthis) => lang_Getter(mthis);

  static onclick_Getter(mthis) native "Notification_onclick_Getter";
  onclick_Getter_(mthis) => onclick_Getter(mthis);

  static onclick_Setter(mthis, __arg_0) native "Notification_onclick_Setter";
  onclick_Setter_(mthis, __arg_0) => onclick_Setter(mthis, __arg_0);

  static onclose_Getter(mthis) native "Notification_onclose_Getter";
  onclose_Getter_(mthis) => onclose_Getter(mthis);

  static onclose_Setter(mthis, __arg_0) native "Notification_onclose_Setter";
  onclose_Setter_(mthis, __arg_0) => onclose_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "Notification_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "Notification_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onshow_Getter(mthis) native "Notification_onshow_Getter";
  onshow_Getter_(mthis) => onshow_Getter(mthis);

  static onshow_Setter(mthis, __arg_0) native "Notification_onshow_Setter";
  onshow_Setter_(mthis, __arg_0) => onshow_Setter(mthis, __arg_0);

  static permission_Getter() native "Notification_permission_Getter";
  permission_Getter_() => permission_Getter();

  static requestPermission_Callback_0() native "Notification_requestPermission_Callback";
  requestPermission_Callback_0_() => requestPermission_Callback_0();

  static requestPermission_Callback_1(__arg_0) native "Notification_requestPermission_Callback";
  requestPermission_Callback_1_(__arg_0) => requestPermission_Callback_1(__arg_0);

  static requestPermission_Callback_2(__arg_0, __arg_1) native "Notification_requestPermission_Callback";
  requestPermission_Callback_2_(__arg_0, __arg_1) => requestPermission_Callback_2(__arg_0, __arg_1);

  static requestPermission_Callback_3(__arg_0, __arg_1, __arg_2) native "Notification_requestPermission_Callback";
  requestPermission_Callback_3_(__arg_0, __arg_1, __arg_2) => requestPermission_Callback_3(__arg_0, __arg_1, __arg_2);

  static tag_Getter(mthis) native "Notification_tag_Getter";
  tag_Getter_(mthis) => tag_Getter(mthis);

  static title_Getter(mthis) native "Notification_title_Getter";
  title_Getter_(mthis) => title_Getter(mthis);

}

class BlinkOESElementIndexUint {
  static final instance = new BlinkOESElementIndexUint();

}

class BlinkOESStandardDerivatives {
  static final instance = new BlinkOESStandardDerivatives();

}

class BlinkOESTextureFloat {
  static final instance = new BlinkOESTextureFloat();

}

class BlinkOESTextureFloatLinear {
  static final instance = new BlinkOESTextureFloatLinear();

}

class BlinkOESTextureHalfFloat {
  static final instance = new BlinkOESTextureHalfFloat();

}

class BlinkOESTextureHalfFloatLinear {
  static final instance = new BlinkOESTextureHalfFloatLinear();

}

class BlinkOESVertexArrayObject {
  static final instance = new BlinkOESVertexArrayObject();

  static bindVertexArrayOES_Callback_0(mthis) native "OESVertexArrayObject_bindVertexArrayOES_Callback";
  bindVertexArrayOES_Callback_0_(mthis) => bindVertexArrayOES_Callback_0(mthis);

  static bindVertexArrayOES_Callback_1(mthis, __arg_0) native "OESVertexArrayObject_bindVertexArrayOES_Callback";
  bindVertexArrayOES_Callback_1_(mthis, __arg_0) => bindVertexArrayOES_Callback_1(mthis, __arg_0);

  static bindVertexArrayOES_Callback_2(mthis, __arg_0, __arg_1) native "OESVertexArrayObject_bindVertexArrayOES_Callback";
  bindVertexArrayOES_Callback_2_(mthis, __arg_0, __arg_1) => bindVertexArrayOES_Callback_2(mthis, __arg_0, __arg_1);

  static bindVertexArrayOES_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "OESVertexArrayObject_bindVertexArrayOES_Callback";
  bindVertexArrayOES_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => bindVertexArrayOES_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createVertexArrayOES_Callback_0(mthis) native "OESVertexArrayObject_createVertexArrayOES_Callback";
  createVertexArrayOES_Callback_0_(mthis) => createVertexArrayOES_Callback_0(mthis);

  static createVertexArrayOES_Callback_1(mthis, __arg_0) native "OESVertexArrayObject_createVertexArrayOES_Callback";
  createVertexArrayOES_Callback_1_(mthis, __arg_0) => createVertexArrayOES_Callback_1(mthis, __arg_0);

  static createVertexArrayOES_Callback_2(mthis, __arg_0, __arg_1) native "OESVertexArrayObject_createVertexArrayOES_Callback";
  createVertexArrayOES_Callback_2_(mthis, __arg_0, __arg_1) => createVertexArrayOES_Callback_2(mthis, __arg_0, __arg_1);

  static deleteVertexArrayOES_Callback_0(mthis) native "OESVertexArrayObject_deleteVertexArrayOES_Callback";
  deleteVertexArrayOES_Callback_0_(mthis) => deleteVertexArrayOES_Callback_0(mthis);

  static deleteVertexArrayOES_Callback_1(mthis, __arg_0) native "OESVertexArrayObject_deleteVertexArrayOES_Callback";
  deleteVertexArrayOES_Callback_1_(mthis, __arg_0) => deleteVertexArrayOES_Callback_1(mthis, __arg_0);

  static deleteVertexArrayOES_Callback_2(mthis, __arg_0, __arg_1) native "OESVertexArrayObject_deleteVertexArrayOES_Callback";
  deleteVertexArrayOES_Callback_2_(mthis, __arg_0, __arg_1) => deleteVertexArrayOES_Callback_2(mthis, __arg_0, __arg_1);

  static deleteVertexArrayOES_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "OESVertexArrayObject_deleteVertexArrayOES_Callback";
  deleteVertexArrayOES_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteVertexArrayOES_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isVertexArrayOES_Callback_0(mthis) native "OESVertexArrayObject_isVertexArrayOES_Callback";
  isVertexArrayOES_Callback_0_(mthis) => isVertexArrayOES_Callback_0(mthis);

  static isVertexArrayOES_Callback_1(mthis, __arg_0) native "OESVertexArrayObject_isVertexArrayOES_Callback";
  isVertexArrayOES_Callback_1_(mthis, __arg_0) => isVertexArrayOES_Callback_1(mthis, __arg_0);

  static isVertexArrayOES_Callback_2(mthis, __arg_0, __arg_1) native "OESVertexArrayObject_isVertexArrayOES_Callback";
  isVertexArrayOES_Callback_2_(mthis, __arg_0, __arg_1) => isVertexArrayOES_Callback_2(mthis, __arg_0, __arg_1);

  static isVertexArrayOES_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "OESVertexArrayObject_isVertexArrayOES_Callback";
  isVertexArrayOES_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isVertexArrayOES_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkOfflineAudioCompletionEvent extends BlinkEvent {
  static final instance = new BlinkOfflineAudioCompletionEvent();

  static renderedBuffer_Getter(mthis) native "OfflineAudioCompletionEvent_renderedBuffer_Getter";
  renderedBuffer_Getter_(mthis) => renderedBuffer_Getter(mthis);

}

class BlinkOfflineAudioContext extends BlinkAudioContext {
  static final instance = new BlinkOfflineAudioContext();

  static constructorCallback_1(__arg_0) native "OfflineAudioContext_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "OfflineAudioContext_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "OfflineAudioContext_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "OfflineAudioContext_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "OfflineAudioContext_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkOscillatorNode extends BlinkAudioSourceNode {
  static final instance = new BlinkOscillatorNode();

  static detune_Getter(mthis) native "OscillatorNode_detune_Getter";
  detune_Getter_(mthis) => detune_Getter(mthis);

  static frequency_Getter(mthis) native "OscillatorNode_frequency_Getter";
  frequency_Getter_(mthis) => frequency_Getter(mthis);

  static noteOff_Callback_0(mthis) native "OscillatorNode_noteOff_Callback";
  noteOff_Callback_0_(mthis) => noteOff_Callback_0(mthis);

  static noteOff_Callback_1(mthis, __arg_0) native "OscillatorNode_noteOff_Callback";
  noteOff_Callback_1_(mthis, __arg_0) => noteOff_Callback_1(mthis, __arg_0);

  static noteOff_Callback_2(mthis, __arg_0, __arg_1) native "OscillatorNode_noteOff_Callback";
  noteOff_Callback_2_(mthis, __arg_0, __arg_1) => noteOff_Callback_2(mthis, __arg_0, __arg_1);

  static noteOff_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "OscillatorNode_noteOff_Callback";
  noteOff_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => noteOff_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static noteOn_Callback_0(mthis) native "OscillatorNode_noteOn_Callback";
  noteOn_Callback_0_(mthis) => noteOn_Callback_0(mthis);

  static noteOn_Callback_1(mthis, __arg_0) native "OscillatorNode_noteOn_Callback";
  noteOn_Callback_1_(mthis, __arg_0) => noteOn_Callback_1(mthis, __arg_0);

  static noteOn_Callback_2(mthis, __arg_0, __arg_1) native "OscillatorNode_noteOn_Callback";
  noteOn_Callback_2_(mthis, __arg_0, __arg_1) => noteOn_Callback_2(mthis, __arg_0, __arg_1);

  static noteOn_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "OscillatorNode_noteOn_Callback";
  noteOn_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => noteOn_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static onended_Getter(mthis) native "OscillatorNode_onended_Getter";
  onended_Getter_(mthis) => onended_Getter(mthis);

  static onended_Setter(mthis, __arg_0) native "OscillatorNode_onended_Setter";
  onended_Setter_(mthis, __arg_0) => onended_Setter(mthis, __arg_0);

  static setPeriodicWave_Callback_0(mthis) native "OscillatorNode_setPeriodicWave_Callback";
  setPeriodicWave_Callback_0_(mthis) => setPeriodicWave_Callback_0(mthis);

  static setPeriodicWave_Callback_1(mthis, __arg_0) native "OscillatorNode_setPeriodicWave_Callback";
  setPeriodicWave_Callback_1_(mthis, __arg_0) => setPeriodicWave_Callback_1(mthis, __arg_0);

  static setPeriodicWave_Callback_2(mthis, __arg_0, __arg_1) native "OscillatorNode_setPeriodicWave_Callback";
  setPeriodicWave_Callback_2_(mthis, __arg_0, __arg_1) => setPeriodicWave_Callback_2(mthis, __arg_0, __arg_1);

  static setPeriodicWave_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "OscillatorNode_setPeriodicWave_Callback";
  setPeriodicWave_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setPeriodicWave_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static start_Callback_0(mthis) native "OscillatorNode_start_Callback";
  start_Callback_0_(mthis) => start_Callback_0(mthis);

  static start_Callback_1(mthis, __arg_0) native "OscillatorNode_start_Callback";
  start_Callback_1_(mthis, __arg_0) => start_Callback_1(mthis, __arg_0);

  static start_Callback_2(mthis, __arg_0, __arg_1) native "OscillatorNode_start_Callback";
  start_Callback_2_(mthis, __arg_0, __arg_1) => start_Callback_2(mthis, __arg_0, __arg_1);

  static start_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "OscillatorNode_start_Callback";
  start_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => start_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static stop_Callback_0(mthis) native "OscillatorNode_stop_Callback";
  stop_Callback_0_(mthis) => stop_Callback_0(mthis);

  static stop_Callback_1(mthis, __arg_0) native "OscillatorNode_stop_Callback";
  stop_Callback_1_(mthis, __arg_0) => stop_Callback_1(mthis, __arg_0);

  static stop_Callback_2(mthis, __arg_0, __arg_1) native "OscillatorNode_stop_Callback";
  stop_Callback_2_(mthis, __arg_0, __arg_1) => stop_Callback_2(mthis, __arg_0, __arg_1);

  static stop_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "OscillatorNode_stop_Callback";
  stop_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stop_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static type_Getter(mthis) native "OscillatorNode_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "OscillatorNode_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkOverflowEvent extends BlinkEvent {
  static final instance = new BlinkOverflowEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "OverflowEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static horizontalOverflow_Getter(mthis) native "OverflowEvent_horizontalOverflow_Getter";
  horizontalOverflow_Getter_(mthis) => horizontalOverflow_Getter(mthis);

  static orient_Getter(mthis) native "OverflowEvent_orient_Getter";
  orient_Getter_(mthis) => orient_Getter(mthis);

  static verticalOverflow_Getter(mthis) native "OverflowEvent_verticalOverflow_Getter";
  verticalOverflow_Getter_(mthis) => verticalOverflow_Getter(mthis);

}

class BlinkPagePopupController {
  static final instance = new BlinkPagePopupController();

  static closePopup_Callback_0(mthis) native "PagePopupController_closePopup_Callback";
  closePopup_Callback_0_(mthis) => closePopup_Callback_0(mthis);

  static closePopup_Callback_1(mthis, __arg_0) native "PagePopupController_closePopup_Callback";
  closePopup_Callback_1_(mthis, __arg_0) => closePopup_Callback_1(mthis, __arg_0);

  static closePopup_Callback_2(mthis, __arg_0, __arg_1) native "PagePopupController_closePopup_Callback";
  closePopup_Callback_2_(mthis, __arg_0, __arg_1) => closePopup_Callback_2(mthis, __arg_0, __arg_1);

  static formatMonth_Callback_0(mthis) native "PagePopupController_formatMonth_Callback";
  formatMonth_Callback_0_(mthis) => formatMonth_Callback_0(mthis);

  static formatMonth_Callback_1(mthis, __arg_0) native "PagePopupController_formatMonth_Callback";
  formatMonth_Callback_1_(mthis, __arg_0) => formatMonth_Callback_1(mthis, __arg_0);

  static formatMonth_Callback_2(mthis, __arg_0, __arg_1) native "PagePopupController_formatMonth_Callback";
  formatMonth_Callback_2_(mthis, __arg_0, __arg_1) => formatMonth_Callback_2(mthis, __arg_0, __arg_1);

  static formatMonth_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PagePopupController_formatMonth_Callback";
  formatMonth_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => formatMonth_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static formatMonth_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PagePopupController_formatMonth_Callback";
  formatMonth_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => formatMonth_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static formatShortMonth_Callback_0(mthis) native "PagePopupController_formatShortMonth_Callback";
  formatShortMonth_Callback_0_(mthis) => formatShortMonth_Callback_0(mthis);

  static formatShortMonth_Callback_1(mthis, __arg_0) native "PagePopupController_formatShortMonth_Callback";
  formatShortMonth_Callback_1_(mthis, __arg_0) => formatShortMonth_Callback_1(mthis, __arg_0);

  static formatShortMonth_Callback_2(mthis, __arg_0, __arg_1) native "PagePopupController_formatShortMonth_Callback";
  formatShortMonth_Callback_2_(mthis, __arg_0, __arg_1) => formatShortMonth_Callback_2(mthis, __arg_0, __arg_1);

  static formatShortMonth_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PagePopupController_formatShortMonth_Callback";
  formatShortMonth_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => formatShortMonth_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static formatShortMonth_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PagePopupController_formatShortMonth_Callback";
  formatShortMonth_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => formatShortMonth_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static formatWeek_Callback_1(mthis, __arg_0) native "PagePopupController_formatWeek_Callback";
  formatWeek_Callback_1_(mthis, __arg_0) => formatWeek_Callback_1(mthis, __arg_0);

  static formatWeek_Callback_2(mthis, __arg_0, __arg_1) native "PagePopupController_formatWeek_Callback";
  formatWeek_Callback_2_(mthis, __arg_0, __arg_1) => formatWeek_Callback_2(mthis, __arg_0, __arg_1);

  static formatWeek_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PagePopupController_formatWeek_Callback";
  formatWeek_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => formatWeek_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static formatWeek_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PagePopupController_formatWeek_Callback";
  formatWeek_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => formatWeek_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static formatWeek_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "PagePopupController_formatWeek_Callback";
  formatWeek_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => formatWeek_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static histogramEnumeration_Callback_1(mthis, __arg_0) native "PagePopupController_histogramEnumeration_Callback";
  histogramEnumeration_Callback_1_(mthis, __arg_0) => histogramEnumeration_Callback_1(mthis, __arg_0);

  static histogramEnumeration_Callback_2(mthis, __arg_0, __arg_1) native "PagePopupController_histogramEnumeration_Callback";
  histogramEnumeration_Callback_2_(mthis, __arg_0, __arg_1) => histogramEnumeration_Callback_2(mthis, __arg_0, __arg_1);

  static histogramEnumeration_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PagePopupController_histogramEnumeration_Callback";
  histogramEnumeration_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => histogramEnumeration_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static histogramEnumeration_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PagePopupController_histogramEnumeration_Callback";
  histogramEnumeration_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => histogramEnumeration_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static histogramEnumeration_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "PagePopupController_histogramEnumeration_Callback";
  histogramEnumeration_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => histogramEnumeration_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static localizeNumberString_Callback_0(mthis) native "PagePopupController_localizeNumberString_Callback";
  localizeNumberString_Callback_0_(mthis) => localizeNumberString_Callback_0(mthis);

  static localizeNumberString_Callback_1(mthis, __arg_0) native "PagePopupController_localizeNumberString_Callback";
  localizeNumberString_Callback_1_(mthis, __arg_0) => localizeNumberString_Callback_1(mthis, __arg_0);

  static localizeNumberString_Callback_2(mthis, __arg_0, __arg_1) native "PagePopupController_localizeNumberString_Callback";
  localizeNumberString_Callback_2_(mthis, __arg_0, __arg_1) => localizeNumberString_Callback_2(mthis, __arg_0, __arg_1);

  static localizeNumberString_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PagePopupController_localizeNumberString_Callback";
  localizeNumberString_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => localizeNumberString_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setValueAndClosePopup_Callback_0(mthis) native "PagePopupController_setValueAndClosePopup_Callback";
  setValueAndClosePopup_Callback_0_(mthis) => setValueAndClosePopup_Callback_0(mthis);

  static setValueAndClosePopup_Callback_1(mthis, __arg_0) native "PagePopupController_setValueAndClosePopup_Callback";
  setValueAndClosePopup_Callback_1_(mthis, __arg_0) => setValueAndClosePopup_Callback_1(mthis, __arg_0);

  static setValueAndClosePopup_Callback_2(mthis, __arg_0, __arg_1) native "PagePopupController_setValueAndClosePopup_Callback";
  setValueAndClosePopup_Callback_2_(mthis, __arg_0, __arg_1) => setValueAndClosePopup_Callback_2(mthis, __arg_0, __arg_1);

  static setValueAndClosePopup_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PagePopupController_setValueAndClosePopup_Callback";
  setValueAndClosePopup_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setValueAndClosePopup_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setValueAndClosePopup_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PagePopupController_setValueAndClosePopup_Callback";
  setValueAndClosePopup_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setValueAndClosePopup_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setValue_Callback_0(mthis) native "PagePopupController_setValue_Callback";
  setValue_Callback_0_(mthis) => setValue_Callback_0(mthis);

  static setValue_Callback_1(mthis, __arg_0) native "PagePopupController_setValue_Callback";
  setValue_Callback_1_(mthis, __arg_0) => setValue_Callback_1(mthis, __arg_0);

  static setValue_Callback_2(mthis, __arg_0, __arg_1) native "PagePopupController_setValue_Callback";
  setValue_Callback_2_(mthis, __arg_0, __arg_1) => setValue_Callback_2(mthis, __arg_0, __arg_1);

  static setValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PagePopupController_setValue_Callback";
  setValue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkPageTransitionEvent extends BlinkEvent {
  static final instance = new BlinkPageTransitionEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "PageTransitionEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static persisted_Getter(mthis) native "PageTransitionEvent_persisted_Getter";
  persisted_Getter_(mthis) => persisted_Getter(mthis);

}

class BlinkPannerNode extends BlinkAudioNode {
  static final instance = new BlinkPannerNode();

  static coneInnerAngle_Getter(mthis) native "PannerNode_coneInnerAngle_Getter";
  coneInnerAngle_Getter_(mthis) => coneInnerAngle_Getter(mthis);

  static coneInnerAngle_Setter(mthis, __arg_0) native "PannerNode_coneInnerAngle_Setter";
  coneInnerAngle_Setter_(mthis, __arg_0) => coneInnerAngle_Setter(mthis, __arg_0);

  static coneOuterAngle_Getter(mthis) native "PannerNode_coneOuterAngle_Getter";
  coneOuterAngle_Getter_(mthis) => coneOuterAngle_Getter(mthis);

  static coneOuterAngle_Setter(mthis, __arg_0) native "PannerNode_coneOuterAngle_Setter";
  coneOuterAngle_Setter_(mthis, __arg_0) => coneOuterAngle_Setter(mthis, __arg_0);

  static coneOuterGain_Getter(mthis) native "PannerNode_coneOuterGain_Getter";
  coneOuterGain_Getter_(mthis) => coneOuterGain_Getter(mthis);

  static coneOuterGain_Setter(mthis, __arg_0) native "PannerNode_coneOuterGain_Setter";
  coneOuterGain_Setter_(mthis, __arg_0) => coneOuterGain_Setter(mthis, __arg_0);

  static distanceModel_Getter(mthis) native "PannerNode_distanceModel_Getter";
  distanceModel_Getter_(mthis) => distanceModel_Getter(mthis);

  static distanceModel_Setter(mthis, __arg_0) native "PannerNode_distanceModel_Setter";
  distanceModel_Setter_(mthis, __arg_0) => distanceModel_Setter(mthis, __arg_0);

  static maxDistance_Getter(mthis) native "PannerNode_maxDistance_Getter";
  maxDistance_Getter_(mthis) => maxDistance_Getter(mthis);

  static maxDistance_Setter(mthis, __arg_0) native "PannerNode_maxDistance_Setter";
  maxDistance_Setter_(mthis, __arg_0) => maxDistance_Setter(mthis, __arg_0);

  static panningModel_Getter(mthis) native "PannerNode_panningModel_Getter";
  panningModel_Getter_(mthis) => panningModel_Getter(mthis);

  static panningModel_Setter(mthis, __arg_0) native "PannerNode_panningModel_Setter";
  panningModel_Setter_(mthis, __arg_0) => panningModel_Setter(mthis, __arg_0);

  static refDistance_Getter(mthis) native "PannerNode_refDistance_Getter";
  refDistance_Getter_(mthis) => refDistance_Getter(mthis);

  static refDistance_Setter(mthis, __arg_0) native "PannerNode_refDistance_Setter";
  refDistance_Setter_(mthis, __arg_0) => refDistance_Setter(mthis, __arg_0);

  static rolloffFactor_Getter(mthis) native "PannerNode_rolloffFactor_Getter";
  rolloffFactor_Getter_(mthis) => rolloffFactor_Getter(mthis);

  static rolloffFactor_Setter(mthis, __arg_0) native "PannerNode_rolloffFactor_Setter";
  rolloffFactor_Setter_(mthis, __arg_0) => rolloffFactor_Setter(mthis, __arg_0);

  static setOrientation_Callback_1(mthis, __arg_0) native "PannerNode_setOrientation_Callback";
  setOrientation_Callback_1_(mthis, __arg_0) => setOrientation_Callback_1(mthis, __arg_0);

  static setOrientation_Callback_2(mthis, __arg_0, __arg_1) native "PannerNode_setOrientation_Callback";
  setOrientation_Callback_2_(mthis, __arg_0, __arg_1) => setOrientation_Callback_2(mthis, __arg_0, __arg_1);

  static setOrientation_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PannerNode_setOrientation_Callback";
  setOrientation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setOrientation_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setOrientation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PannerNode_setOrientation_Callback";
  setOrientation_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setOrientation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setOrientation_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "PannerNode_setOrientation_Callback";
  setOrientation_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setOrientation_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setPosition_Callback_1(mthis, __arg_0) native "PannerNode_setPosition_Callback";
  setPosition_Callback_1_(mthis, __arg_0) => setPosition_Callback_1(mthis, __arg_0);

  static setPosition_Callback_2(mthis, __arg_0, __arg_1) native "PannerNode_setPosition_Callback";
  setPosition_Callback_2_(mthis, __arg_0, __arg_1) => setPosition_Callback_2(mthis, __arg_0, __arg_1);

  static setPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PannerNode_setPosition_Callback";
  setPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PannerNode_setPosition_Callback";
  setPosition_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setPosition_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "PannerNode_setPosition_Callback";
  setPosition_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setPosition_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setVelocity_Callback_1(mthis, __arg_0) native "PannerNode_setVelocity_Callback";
  setVelocity_Callback_1_(mthis, __arg_0) => setVelocity_Callback_1(mthis, __arg_0);

  static setVelocity_Callback_2(mthis, __arg_0, __arg_1) native "PannerNode_setVelocity_Callback";
  setVelocity_Callback_2_(mthis, __arg_0, __arg_1) => setVelocity_Callback_2(mthis, __arg_0, __arg_1);

  static setVelocity_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PannerNode_setVelocity_Callback";
  setVelocity_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setVelocity_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setVelocity_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "PannerNode_setVelocity_Callback";
  setVelocity_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setVelocity_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setVelocity_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "PannerNode_setVelocity_Callback";
  setVelocity_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setVelocity_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkPath2D {
  static final instance = new BlinkPath2D();

  static addPath_Callback_0(mthis) native "Path2D_addPath_Callback";
  addPath_Callback_0_(mthis) => addPath_Callback_0(mthis);

  static addPath_Callback_1(mthis, __arg_0) native "Path2D_addPath_Callback";
  addPath_Callback_1_(mthis, __arg_0) => addPath_Callback_1(mthis, __arg_0);

  static addPath_Callback_2(mthis, __arg_0, __arg_1) native "Path2D_addPath_Callback";
  addPath_Callback_2_(mthis, __arg_0, __arg_1) => addPath_Callback_2(mthis, __arg_0, __arg_1);

  static addPath_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Path2D_addPath_Callback";
  addPath_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addPath_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addPath_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Path2D_addPath_Callback";
  addPath_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => addPath_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static arcTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Path2D_arcTo_Callback";
  arcTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => arcTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static arcTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Path2D_arcTo_Callback";
  arcTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => arcTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static arcTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Path2D_arcTo_Callback";
  arcTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => arcTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static arcTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Path2D_arcTo_Callback";
  arcTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => arcTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static arcTo_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "Path2D_arcTo_Callback";
  arcTo_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => arcTo_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static arc_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Path2D_arc_Callback";
  arc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => arc_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static arc_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Path2D_arc_Callback";
  arc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => arc_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static arc_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Path2D_arc_Callback";
  arc_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => arc_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static arc_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Path2D_arc_Callback";
  arc_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => arc_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static arc_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "Path2D_arc_Callback";
  arc_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => arc_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static arc_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "Path2D_arc_Callback";
  arc_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => arc_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static bezierCurveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Path2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => bezierCurveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bezierCurveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Path2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => bezierCurveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static bezierCurveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Path2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => bezierCurveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static bezierCurveTo_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "Path2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => bezierCurveTo_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static bezierCurveTo_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "Path2D_bezierCurveTo_Callback";
  bezierCurveTo_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => bezierCurveTo_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static closePath_Callback_0(mthis) native "Path2D_closePath_Callback";
  closePath_Callback_0_(mthis) => closePath_Callback_0(mthis);

  static closePath_Callback_1(mthis, __arg_0) native "Path2D_closePath_Callback";
  closePath_Callback_1_(mthis, __arg_0) => closePath_Callback_1(mthis, __arg_0);

  static closePath_Callback_2(mthis, __arg_0, __arg_1) native "Path2D_closePath_Callback";
  closePath_Callback_2_(mthis, __arg_0, __arg_1) => closePath_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "Path2D_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Path2D_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Path2D_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Path2D_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static ellipse_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "Path2D_ellipse_Callback";
  ellipse_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => ellipse_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static ellipse_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Path2D_ellipse_Callback";
  ellipse_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => ellipse_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static ellipse_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Path2D_ellipse_Callback";
  ellipse_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => ellipse_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static ellipse_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "Path2D_ellipse_Callback";
  ellipse_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => ellipse_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static ellipse_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "Path2D_ellipse_Callback";
  ellipse_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => ellipse_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static ellipse_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "Path2D_ellipse_Callback";
  ellipse_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => ellipse_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static lineTo_Callback_0(mthis) native "Path2D_lineTo_Callback";
  lineTo_Callback_0_(mthis) => lineTo_Callback_0(mthis);

  static lineTo_Callback_1(mthis, __arg_0) native "Path2D_lineTo_Callback";
  lineTo_Callback_1_(mthis, __arg_0) => lineTo_Callback_1(mthis, __arg_0);

  static lineTo_Callback_2(mthis, __arg_0, __arg_1) native "Path2D_lineTo_Callback";
  lineTo_Callback_2_(mthis, __arg_0, __arg_1) => lineTo_Callback_2(mthis, __arg_0, __arg_1);

  static lineTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Path2D_lineTo_Callback";
  lineTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => lineTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static lineTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Path2D_lineTo_Callback";
  lineTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => lineTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static moveTo_Callback_0(mthis) native "Path2D_moveTo_Callback";
  moveTo_Callback_0_(mthis) => moveTo_Callback_0(mthis);

  static moveTo_Callback_1(mthis, __arg_0) native "Path2D_moveTo_Callback";
  moveTo_Callback_1_(mthis, __arg_0) => moveTo_Callback_1(mthis, __arg_0);

  static moveTo_Callback_2(mthis, __arg_0, __arg_1) native "Path2D_moveTo_Callback";
  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => moveTo_Callback_2(mthis, __arg_0, __arg_1);

  static moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Path2D_moveTo_Callback";
  moveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Path2D_moveTo_Callback";
  moveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static quadraticCurveTo_Callback_2(mthis, __arg_0, __arg_1) native "Path2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_2_(mthis, __arg_0, __arg_1) => quadraticCurveTo_Callback_2(mthis, __arg_0, __arg_1);

  static quadraticCurveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Path2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => quadraticCurveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static quadraticCurveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Path2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => quadraticCurveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static quadraticCurveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Path2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => quadraticCurveTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static quadraticCurveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Path2D_quadraticCurveTo_Callback";
  quadraticCurveTo_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => quadraticCurveTo_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static rect_Callback_2(mthis, __arg_0, __arg_1) native "Path2D_rect_Callback";
  rect_Callback_2_(mthis, __arg_0, __arg_1) => rect_Callback_2(mthis, __arg_0, __arg_1);

  static rect_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Path2D_rect_Callback";
  rect_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => rect_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Path2D_rect_Callback";
  rect_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => rect_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static rect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Path2D_rect_Callback";
  rect_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => rect_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static rect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Path2D_rect_Callback";
  rect_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => rect_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

}

class BlinkPerformance extends BlinkEventTarget {
  static final instance = new BlinkPerformance();

  static clearMarks_Callback_0(mthis) native "Performance_clearMarks_Callback";
  clearMarks_Callback_0_(mthis) => clearMarks_Callback_0(mthis);

  static clearMarks_Callback_1(mthis, __arg_0) native "Performance_clearMarks_Callback";
  clearMarks_Callback_1_(mthis, __arg_0) => clearMarks_Callback_1(mthis, __arg_0);

  static clearMarks_Callback_2(mthis, __arg_0, __arg_1) native "Performance_clearMarks_Callback";
  clearMarks_Callback_2_(mthis, __arg_0, __arg_1) => clearMarks_Callback_2(mthis, __arg_0, __arg_1);

  static clearMarks_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Performance_clearMarks_Callback";
  clearMarks_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearMarks_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clearMeasures_Callback_0(mthis) native "Performance_clearMeasures_Callback";
  clearMeasures_Callback_0_(mthis) => clearMeasures_Callback_0(mthis);

  static clearMeasures_Callback_1(mthis, __arg_0) native "Performance_clearMeasures_Callback";
  clearMeasures_Callback_1_(mthis, __arg_0) => clearMeasures_Callback_1(mthis, __arg_0);

  static clearMeasures_Callback_2(mthis, __arg_0, __arg_1) native "Performance_clearMeasures_Callback";
  clearMeasures_Callback_2_(mthis, __arg_0, __arg_1) => clearMeasures_Callback_2(mthis, __arg_0, __arg_1);

  static clearMeasures_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Performance_clearMeasures_Callback";
  clearMeasures_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearMeasures_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getEntriesByName_Callback_0(mthis) native "Performance_getEntriesByName_Callback";
  getEntriesByName_Callback_0_(mthis) => getEntriesByName_Callback_0(mthis);

  static getEntriesByName_Callback_1(mthis, __arg_0) native "Performance_getEntriesByName_Callback";
  getEntriesByName_Callback_1_(mthis, __arg_0) => getEntriesByName_Callback_1(mthis, __arg_0);

  static getEntriesByName_Callback_2(mthis, __arg_0, __arg_1) native "Performance_getEntriesByName_Callback";
  getEntriesByName_Callback_2_(mthis, __arg_0, __arg_1) => getEntriesByName_Callback_2(mthis, __arg_0, __arg_1);

  static getEntriesByName_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Performance_getEntriesByName_Callback";
  getEntriesByName_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getEntriesByName_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getEntriesByName_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Performance_getEntriesByName_Callback";
  getEntriesByName_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getEntriesByName_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getEntriesByType_Callback_0(mthis) native "Performance_getEntriesByType_Callback";
  getEntriesByType_Callback_0_(mthis) => getEntriesByType_Callback_0(mthis);

  static getEntriesByType_Callback_1(mthis, __arg_0) native "Performance_getEntriesByType_Callback";
  getEntriesByType_Callback_1_(mthis, __arg_0) => getEntriesByType_Callback_1(mthis, __arg_0);

  static getEntriesByType_Callback_2(mthis, __arg_0, __arg_1) native "Performance_getEntriesByType_Callback";
  getEntriesByType_Callback_2_(mthis, __arg_0, __arg_1) => getEntriesByType_Callback_2(mthis, __arg_0, __arg_1);

  static getEntriesByType_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Performance_getEntriesByType_Callback";
  getEntriesByType_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getEntriesByType_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getEntries_Callback_0(mthis) native "Performance_getEntries_Callback";
  getEntries_Callback_0_(mthis) => getEntries_Callback_0(mthis);

  static getEntries_Callback_1(mthis, __arg_0) native "Performance_getEntries_Callback";
  getEntries_Callback_1_(mthis, __arg_0) => getEntries_Callback_1(mthis, __arg_0);

  static getEntries_Callback_2(mthis, __arg_0, __arg_1) native "Performance_getEntries_Callback";
  getEntries_Callback_2_(mthis, __arg_0, __arg_1) => getEntries_Callback_2(mthis, __arg_0, __arg_1);

  static mark_Callback_0(mthis) native "Performance_mark_Callback";
  mark_Callback_0_(mthis) => mark_Callback_0(mthis);

  static mark_Callback_1(mthis, __arg_0) native "Performance_mark_Callback";
  mark_Callback_1_(mthis, __arg_0) => mark_Callback_1(mthis, __arg_0);

  static mark_Callback_2(mthis, __arg_0, __arg_1) native "Performance_mark_Callback";
  mark_Callback_2_(mthis, __arg_0, __arg_1) => mark_Callback_2(mthis, __arg_0, __arg_1);

  static mark_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Performance_mark_Callback";
  mark_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => mark_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static measure_Callback_0(mthis) native "Performance_measure_Callback";
  measure_Callback_0_(mthis) => measure_Callback_0(mthis);

  static measure_Callback_1(mthis, __arg_0) native "Performance_measure_Callback";
  measure_Callback_1_(mthis, __arg_0) => measure_Callback_1(mthis, __arg_0);

  static measure_Callback_2(mthis, __arg_0, __arg_1) native "Performance_measure_Callback";
  measure_Callback_2_(mthis, __arg_0, __arg_1) => measure_Callback_2(mthis, __arg_0, __arg_1);

  static measure_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Performance_measure_Callback";
  measure_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => measure_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static measure_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Performance_measure_Callback";
  measure_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => measure_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static measure_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Performance_measure_Callback";
  measure_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => measure_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static memory_Getter(mthis) native "Performance_memory_Getter";
  memory_Getter_(mthis) => memory_Getter(mthis);

  static navigation_Getter(mthis) native "Performance_navigation_Getter";
  navigation_Getter_(mthis) => navigation_Getter(mthis);

  static now_Callback_0(mthis) native "Performance_now_Callback";
  now_Callback_0_(mthis) => now_Callback_0(mthis);

  static now_Callback_1(mthis, __arg_0) native "Performance_now_Callback";
  now_Callback_1_(mthis, __arg_0) => now_Callback_1(mthis, __arg_0);

  static now_Callback_2(mthis, __arg_0, __arg_1) native "Performance_now_Callback";
  now_Callback_2_(mthis, __arg_0, __arg_1) => now_Callback_2(mthis, __arg_0, __arg_1);

  static onwebkitresourcetimingbufferfull_Getter(mthis) native "Performance_onwebkitresourcetimingbufferfull_Getter";
  onwebkitresourcetimingbufferfull_Getter_(mthis) => onwebkitresourcetimingbufferfull_Getter(mthis);

  static onwebkitresourcetimingbufferfull_Setter(mthis, __arg_0) native "Performance_onwebkitresourcetimingbufferfull_Setter";
  onwebkitresourcetimingbufferfull_Setter_(mthis, __arg_0) => onwebkitresourcetimingbufferfull_Setter(mthis, __arg_0);

  static timing_Getter(mthis) native "Performance_timing_Getter";
  timing_Getter_(mthis) => timing_Getter(mthis);

  static webkitClearResourceTimings_Callback_0(mthis) native "Performance_webkitClearResourceTimings_Callback";
  webkitClearResourceTimings_Callback_0_(mthis) => webkitClearResourceTimings_Callback_0(mthis);

  static webkitClearResourceTimings_Callback_1(mthis, __arg_0) native "Performance_webkitClearResourceTimings_Callback";
  webkitClearResourceTimings_Callback_1_(mthis, __arg_0) => webkitClearResourceTimings_Callback_1(mthis, __arg_0);

  static webkitClearResourceTimings_Callback_2(mthis, __arg_0, __arg_1) native "Performance_webkitClearResourceTimings_Callback";
  webkitClearResourceTimings_Callback_2_(mthis, __arg_0, __arg_1) => webkitClearResourceTimings_Callback_2(mthis, __arg_0, __arg_1);

  static webkitSetResourceTimingBufferSize_Callback_0(mthis) native "Performance_webkitSetResourceTimingBufferSize_Callback";
  webkitSetResourceTimingBufferSize_Callback_0_(mthis) => webkitSetResourceTimingBufferSize_Callback_0(mthis);

  static webkitSetResourceTimingBufferSize_Callback_1(mthis, __arg_0) native "Performance_webkitSetResourceTimingBufferSize_Callback";
  webkitSetResourceTimingBufferSize_Callback_1_(mthis, __arg_0) => webkitSetResourceTimingBufferSize_Callback_1(mthis, __arg_0);

  static webkitSetResourceTimingBufferSize_Callback_2(mthis, __arg_0, __arg_1) native "Performance_webkitSetResourceTimingBufferSize_Callback";
  webkitSetResourceTimingBufferSize_Callback_2_(mthis, __arg_0, __arg_1) => webkitSetResourceTimingBufferSize_Callback_2(mthis, __arg_0, __arg_1);

  static webkitSetResourceTimingBufferSize_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Performance_webkitSetResourceTimingBufferSize_Callback";
  webkitSetResourceTimingBufferSize_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitSetResourceTimingBufferSize_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceEntry();

  static duration_Getter(mthis) native "PerformanceEntry_duration_Getter";
  duration_Getter_(mthis) => duration_Getter(mthis);

  static entryType_Getter(mthis) native "PerformanceEntry_entryType_Getter";
  entryType_Getter_(mthis) => entryType_Getter(mthis);

  static name_Getter(mthis) native "PerformanceEntry_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static startTime_Getter(mthis) native "PerformanceEntry_startTime_Getter";
  startTime_Getter_(mthis) => startTime_Getter(mthis);

}

class BlinkPerformanceMark extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceMark();

}

class BlinkPerformanceMeasure extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceMeasure();

}

class BlinkPerformanceNavigation {
  static final instance = new BlinkPerformanceNavigation();

  static redirectCount_Getter(mthis) native "PerformanceNavigation_redirectCount_Getter";
  redirectCount_Getter_(mthis) => redirectCount_Getter(mthis);

  static type_Getter(mthis) native "PerformanceNavigation_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkPerformanceResourceTiming extends BlinkPerformanceEntry {
  static final instance = new BlinkPerformanceResourceTiming();

  static connectEnd_Getter(mthis) native "PerformanceResourceTiming_connectEnd_Getter";
  connectEnd_Getter_(mthis) => connectEnd_Getter(mthis);

  static connectStart_Getter(mthis) native "PerformanceResourceTiming_connectStart_Getter";
  connectStart_Getter_(mthis) => connectStart_Getter(mthis);

  static domainLookupEnd_Getter(mthis) native "PerformanceResourceTiming_domainLookupEnd_Getter";
  domainLookupEnd_Getter_(mthis) => domainLookupEnd_Getter(mthis);

  static domainLookupStart_Getter(mthis) native "PerformanceResourceTiming_domainLookupStart_Getter";
  domainLookupStart_Getter_(mthis) => domainLookupStart_Getter(mthis);

  static fetchStart_Getter(mthis) native "PerformanceResourceTiming_fetchStart_Getter";
  fetchStart_Getter_(mthis) => fetchStart_Getter(mthis);

  static initiatorType_Getter(mthis) native "PerformanceResourceTiming_initiatorType_Getter";
  initiatorType_Getter_(mthis) => initiatorType_Getter(mthis);

  static redirectEnd_Getter(mthis) native "PerformanceResourceTiming_redirectEnd_Getter";
  redirectEnd_Getter_(mthis) => redirectEnd_Getter(mthis);

  static redirectStart_Getter(mthis) native "PerformanceResourceTiming_redirectStart_Getter";
  redirectStart_Getter_(mthis) => redirectStart_Getter(mthis);

  static requestStart_Getter(mthis) native "PerformanceResourceTiming_requestStart_Getter";
  requestStart_Getter_(mthis) => requestStart_Getter(mthis);

  static responseEnd_Getter(mthis) native "PerformanceResourceTiming_responseEnd_Getter";
  responseEnd_Getter_(mthis) => responseEnd_Getter(mthis);

  static responseStart_Getter(mthis) native "PerformanceResourceTiming_responseStart_Getter";
  responseStart_Getter_(mthis) => responseStart_Getter(mthis);

  static secureConnectionStart_Getter(mthis) native "PerformanceResourceTiming_secureConnectionStart_Getter";
  secureConnectionStart_Getter_(mthis) => secureConnectionStart_Getter(mthis);

}

class BlinkPerformanceTiming {
  static final instance = new BlinkPerformanceTiming();

  static connectEnd_Getter(mthis) native "PerformanceTiming_connectEnd_Getter";
  connectEnd_Getter_(mthis) => connectEnd_Getter(mthis);

  static connectStart_Getter(mthis) native "PerformanceTiming_connectStart_Getter";
  connectStart_Getter_(mthis) => connectStart_Getter(mthis);

  static domComplete_Getter(mthis) native "PerformanceTiming_domComplete_Getter";
  domComplete_Getter_(mthis) => domComplete_Getter(mthis);

  static domContentLoadedEventEnd_Getter(mthis) native "PerformanceTiming_domContentLoadedEventEnd_Getter";
  domContentLoadedEventEnd_Getter_(mthis) => domContentLoadedEventEnd_Getter(mthis);

  static domContentLoadedEventStart_Getter(mthis) native "PerformanceTiming_domContentLoadedEventStart_Getter";
  domContentLoadedEventStart_Getter_(mthis) => domContentLoadedEventStart_Getter(mthis);

  static domInteractive_Getter(mthis) native "PerformanceTiming_domInteractive_Getter";
  domInteractive_Getter_(mthis) => domInteractive_Getter(mthis);

  static domLoading_Getter(mthis) native "PerformanceTiming_domLoading_Getter";
  domLoading_Getter_(mthis) => domLoading_Getter(mthis);

  static domainLookupEnd_Getter(mthis) native "PerformanceTiming_domainLookupEnd_Getter";
  domainLookupEnd_Getter_(mthis) => domainLookupEnd_Getter(mthis);

  static domainLookupStart_Getter(mthis) native "PerformanceTiming_domainLookupStart_Getter";
  domainLookupStart_Getter_(mthis) => domainLookupStart_Getter(mthis);

  static fetchStart_Getter(mthis) native "PerformanceTiming_fetchStart_Getter";
  fetchStart_Getter_(mthis) => fetchStart_Getter(mthis);

  static loadEventEnd_Getter(mthis) native "PerformanceTiming_loadEventEnd_Getter";
  loadEventEnd_Getter_(mthis) => loadEventEnd_Getter(mthis);

  static loadEventStart_Getter(mthis) native "PerformanceTiming_loadEventStart_Getter";
  loadEventStart_Getter_(mthis) => loadEventStart_Getter(mthis);

  static navigationStart_Getter(mthis) native "PerformanceTiming_navigationStart_Getter";
  navigationStart_Getter_(mthis) => navigationStart_Getter(mthis);

  static redirectEnd_Getter(mthis) native "PerformanceTiming_redirectEnd_Getter";
  redirectEnd_Getter_(mthis) => redirectEnd_Getter(mthis);

  static redirectStart_Getter(mthis) native "PerformanceTiming_redirectStart_Getter";
  redirectStart_Getter_(mthis) => redirectStart_Getter(mthis);

  static requestStart_Getter(mthis) native "PerformanceTiming_requestStart_Getter";
  requestStart_Getter_(mthis) => requestStart_Getter(mthis);

  static responseEnd_Getter(mthis) native "PerformanceTiming_responseEnd_Getter";
  responseEnd_Getter_(mthis) => responseEnd_Getter(mthis);

  static responseStart_Getter(mthis) native "PerformanceTiming_responseStart_Getter";
  responseStart_Getter_(mthis) => responseStart_Getter(mthis);

  static secureConnectionStart_Getter(mthis) native "PerformanceTiming_secureConnectionStart_Getter";
  secureConnectionStart_Getter_(mthis) => secureConnectionStart_Getter(mthis);

  static unloadEventEnd_Getter(mthis) native "PerformanceTiming_unloadEventEnd_Getter";
  unloadEventEnd_Getter_(mthis) => unloadEventEnd_Getter(mthis);

  static unloadEventStart_Getter(mthis) native "PerformanceTiming_unloadEventStart_Getter";
  unloadEventStart_Getter_(mthis) => unloadEventStart_Getter(mthis);

}

class BlinkPeriodicWave {
  static final instance = new BlinkPeriodicWave();

}

class BlinkPlugin {
  static final instance = new BlinkPlugin();

  static $__getter___Callback_1(mthis, __arg_0) native "Plugin___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static description_Getter(mthis) native "Plugin_description_Getter";
  description_Getter_(mthis) => description_Getter(mthis);

  static filename_Getter(mthis) native "Plugin_filename_Getter";
  filename_Getter_(mthis) => filename_Getter(mthis);

  static item_Callback_0(mthis) native "Plugin_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "Plugin_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "Plugin_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Plugin_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "Plugin_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static name_Getter(mthis) native "Plugin_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static namedItem_Callback_0(mthis) native "Plugin_namedItem_Callback";
  namedItem_Callback_0_(mthis) => namedItem_Callback_0(mthis);

  static namedItem_Callback_1(mthis, __arg_0) native "Plugin_namedItem_Callback";
  namedItem_Callback_1_(mthis, __arg_0) => namedItem_Callback_1(mthis, __arg_0);

  static namedItem_Callback_2(mthis, __arg_0, __arg_1) native "Plugin_namedItem_Callback";
  namedItem_Callback_2_(mthis, __arg_0, __arg_1) => namedItem_Callback_2(mthis, __arg_0, __arg_1);

  static namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Plugin_namedItem_Callback";
  namedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkPluginArray {
  static final instance = new BlinkPluginArray();

  static $__getter___Callback_1(mthis, __arg_0) native "PluginArray___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "PluginArray_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "PluginArray_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "PluginArray_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PluginArray_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "PluginArray_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static namedItem_Callback_0(mthis) native "PluginArray_namedItem_Callback";
  namedItem_Callback_0_(mthis) => namedItem_Callback_0(mthis);

  static namedItem_Callback_1(mthis, __arg_0) native "PluginArray_namedItem_Callback";
  namedItem_Callback_1_(mthis, __arg_0) => namedItem_Callback_1(mthis, __arg_0);

  static namedItem_Callback_2(mthis, __arg_0, __arg_1) native "PluginArray_namedItem_Callback";
  namedItem_Callback_2_(mthis, __arg_0, __arg_1) => namedItem_Callback_2(mthis, __arg_0, __arg_1);

  static namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PluginArray_namedItem_Callback";
  namedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static refresh_Callback_0(mthis) native "PluginArray_refresh_Callback";
  refresh_Callback_0_(mthis) => refresh_Callback_0(mthis);

  static refresh_Callback_1(mthis, __arg_0) native "PluginArray_refresh_Callback";
  refresh_Callback_1_(mthis, __arg_0) => refresh_Callback_1(mthis, __arg_0);

  static refresh_Callback_2(mthis, __arg_0, __arg_1) native "PluginArray_refresh_Callback";
  refresh_Callback_2_(mthis, __arg_0, __arg_1) => refresh_Callback_2(mthis, __arg_0, __arg_1);

  static refresh_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PluginArray_refresh_Callback";
  refresh_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => refresh_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkPluginPlaceholderElement extends BlinkHTMLDivElement {
  static final instance = new BlinkPluginPlaceholderElement();

  static createdCallback_Callback_0(mthis) native "PluginPlaceholderElement_createdCallback_Callback";
  createdCallback_Callback_0_(mthis) => createdCallback_Callback_0(mthis);

  static createdCallback_Callback_1(mthis, __arg_0) native "PluginPlaceholderElement_createdCallback_Callback";
  createdCallback_Callback_1_(mthis, __arg_0) => createdCallback_Callback_1(mthis, __arg_0);

  static createdCallback_Callback_2(mthis, __arg_0, __arg_1) native "PluginPlaceholderElement_createdCallback_Callback";
  createdCallback_Callback_2_(mthis, __arg_0, __arg_1) => createdCallback_Callback_2(mthis, __arg_0, __arg_1);

  static message_Getter(mthis) native "PluginPlaceholderElement_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

  static message_Setter(mthis, __arg_0) native "PluginPlaceholderElement_message_Setter";
  message_Setter_(mthis, __arg_0) => message_Setter(mthis, __arg_0);

}

class BlinkPopStateEvent extends BlinkEvent {
  static final instance = new BlinkPopStateEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "PopStateEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static state_Getter(mthis) native "PopStateEvent_state_Getter";
  state_Getter_(mthis) => state_Getter(mthis);

}

class BlinkPositionError {
  static final instance = new BlinkPositionError();

  static code_Getter(mthis) native "PositionError_code_Getter";
  code_Getter_(mthis) => code_Getter(mthis);

  static message_Getter(mthis) native "PositionError_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

}

class BlinkPresentation extends BlinkEventTarget {
  static final instance = new BlinkPresentation();

  static onavailablechange_Getter(mthis) native "Presentation_onavailablechange_Getter";
  onavailablechange_Getter_(mthis) => onavailablechange_Getter(mthis);

  static onavailablechange_Setter(mthis, __arg_0) native "Presentation_onavailablechange_Setter";
  onavailablechange_Setter_(mthis, __arg_0) => onavailablechange_Setter(mthis, __arg_0);

}

class BlinkProcessingInstruction extends BlinkCharacterData {
  static final instance = new BlinkProcessingInstruction();

  static sheet_Getter(mthis) native "ProcessingInstruction_sheet_Getter";
  sheet_Getter_(mthis) => sheet_Getter(mthis);

  static target_Getter(mthis) native "ProcessingInstruction_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

}

class BlinkProgressEvent extends BlinkEvent {
  static final instance = new BlinkProgressEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "ProgressEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static lengthComputable_Getter(mthis) native "ProgressEvent_lengthComputable_Getter";
  lengthComputable_Getter_(mthis) => lengthComputable_Getter(mthis);

  static loaded_Getter(mthis) native "ProgressEvent_loaded_Getter";
  loaded_Getter_(mthis) => loaded_Getter(mthis);

  static total_Getter(mthis) native "ProgressEvent_total_Getter";
  total_Getter_(mthis) => total_Getter(mthis);

}

class BlinkPushEvent extends BlinkEvent {
  static final instance = new BlinkPushEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "PushEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static data_Getter(mthis) native "PushEvent_data_Getter";
  data_Getter_(mthis) => data_Getter(mthis);

}

class BlinkPushManager {
  static final instance = new BlinkPushManager();

  static register_Callback_0(mthis) native "PushManager_register_Callback";
  register_Callback_0_(mthis) => register_Callback_0(mthis);

  static register_Callback_1(mthis, __arg_0) native "PushManager_register_Callback";
  register_Callback_1_(mthis, __arg_0) => register_Callback_1(mthis, __arg_0);

  static register_Callback_2(mthis, __arg_0, __arg_1) native "PushManager_register_Callback";
  register_Callback_2_(mthis, __arg_0, __arg_1) => register_Callback_2(mthis, __arg_0, __arg_1);

  static register_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "PushManager_register_Callback";
  register_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => register_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkPushRegistration {
  static final instance = new BlinkPushRegistration();

  static pushEndpoint_Getter(mthis) native "PushRegistration_pushEndpoint_Getter";
  pushEndpoint_Getter_(mthis) => pushEndpoint_Getter(mthis);

  static pushRegistrationId_Getter(mthis) native "PushRegistration_pushRegistrationId_Getter";
  pushRegistrationId_Getter_(mthis) => pushRegistrationId_Getter(mthis);

}

class BlinkRGBColor {
  static final instance = new BlinkRGBColor();

  static blue_Getter(mthis) native "RGBColor_blue_Getter";
  blue_Getter_(mthis) => blue_Getter(mthis);

  static green_Getter(mthis) native "RGBColor_green_Getter";
  green_Getter_(mthis) => green_Getter(mthis);

  static red_Getter(mthis) native "RGBColor_red_Getter";
  red_Getter_(mthis) => red_Getter(mthis);

}

class BlinkRTCDTMFSender extends BlinkEventTarget {
  static final instance = new BlinkRTCDTMFSender();

  static canInsertDTMF_Getter(mthis) native "RTCDTMFSender_canInsertDTMF_Getter";
  canInsertDTMF_Getter_(mthis) => canInsertDTMF_Getter(mthis);

  static duration_Getter(mthis) native "RTCDTMFSender_duration_Getter";
  duration_Getter_(mthis) => duration_Getter(mthis);

  static insertDTMF_Callback_0(mthis) native "RTCDTMFSender_insertDTMF_Callback";
  insertDTMF_Callback_0_(mthis) => insertDTMF_Callback_0(mthis);

  static insertDTMF_Callback_1(mthis, __arg_0) native "RTCDTMFSender_insertDTMF_Callback";
  insertDTMF_Callback_1_(mthis, __arg_0) => insertDTMF_Callback_1(mthis, __arg_0);

  static insertDTMF_Callback_2(mthis, __arg_0, __arg_1) native "RTCDTMFSender_insertDTMF_Callback";
  insertDTMF_Callback_2_(mthis, __arg_0, __arg_1) => insertDTMF_Callback_2(mthis, __arg_0, __arg_1);

  static insertDTMF_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCDTMFSender_insertDTMF_Callback";
  insertDTMF_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertDTMF_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertDTMF_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCDTMFSender_insertDTMF_Callback";
  insertDTMF_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertDTMF_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static insertDTMF_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "RTCDTMFSender_insertDTMF_Callback";
  insertDTMF_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => insertDTMF_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static interToneGap_Getter(mthis) native "RTCDTMFSender_interToneGap_Getter";
  interToneGap_Getter_(mthis) => interToneGap_Getter(mthis);

  static ontonechange_Getter(mthis) native "RTCDTMFSender_ontonechange_Getter";
  ontonechange_Getter_(mthis) => ontonechange_Getter(mthis);

  static ontonechange_Setter(mthis, __arg_0) native "RTCDTMFSender_ontonechange_Setter";
  ontonechange_Setter_(mthis, __arg_0) => ontonechange_Setter(mthis, __arg_0);

  static toneBuffer_Getter(mthis) native "RTCDTMFSender_toneBuffer_Getter";
  toneBuffer_Getter_(mthis) => toneBuffer_Getter(mthis);

  static track_Getter(mthis) native "RTCDTMFSender_track_Getter";
  track_Getter_(mthis) => track_Getter(mthis);

}

class BlinkRTCDTMFToneChangeEvent extends BlinkEvent {
  static final instance = new BlinkRTCDTMFToneChangeEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "RTCDTMFToneChangeEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static tone_Getter(mthis) native "RTCDTMFToneChangeEvent_tone_Getter";
  tone_Getter_(mthis) => tone_Getter(mthis);

}

class BlinkRTCDataChannel extends BlinkEventTarget {
  static final instance = new BlinkRTCDataChannel();

  static binaryType_Getter(mthis) native "RTCDataChannel_binaryType_Getter";
  binaryType_Getter_(mthis) => binaryType_Getter(mthis);

  static binaryType_Setter(mthis, __arg_0) native "RTCDataChannel_binaryType_Setter";
  binaryType_Setter_(mthis, __arg_0) => binaryType_Setter(mthis, __arg_0);

  static bufferedAmount_Getter(mthis) native "RTCDataChannel_bufferedAmount_Getter";
  bufferedAmount_Getter_(mthis) => bufferedAmount_Getter(mthis);

  static close_Callback_0(mthis) native "RTCDataChannel_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "RTCDataChannel_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "RTCDataChannel_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static id_Getter(mthis) native "RTCDataChannel_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static label_Getter(mthis) native "RTCDataChannel_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static maxRetransmitTime_Getter(mthis) native "RTCDataChannel_maxRetransmitTime_Getter";
  maxRetransmitTime_Getter_(mthis) => maxRetransmitTime_Getter(mthis);

  static maxRetransmits_Getter(mthis) native "RTCDataChannel_maxRetransmits_Getter";
  maxRetransmits_Getter_(mthis) => maxRetransmits_Getter(mthis);

  static negotiated_Getter(mthis) native "RTCDataChannel_negotiated_Getter";
  negotiated_Getter_(mthis) => negotiated_Getter(mthis);

  static onclose_Getter(mthis) native "RTCDataChannel_onclose_Getter";
  onclose_Getter_(mthis) => onclose_Getter(mthis);

  static onclose_Setter(mthis, __arg_0) native "RTCDataChannel_onclose_Setter";
  onclose_Setter_(mthis, __arg_0) => onclose_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "RTCDataChannel_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "RTCDataChannel_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onmessage_Getter(mthis) native "RTCDataChannel_onmessage_Getter";
  onmessage_Getter_(mthis) => onmessage_Getter(mthis);

  static onmessage_Setter(mthis, __arg_0) native "RTCDataChannel_onmessage_Setter";
  onmessage_Setter_(mthis, __arg_0) => onmessage_Setter(mthis, __arg_0);

  static onopen_Getter(mthis) native "RTCDataChannel_onopen_Getter";
  onopen_Getter_(mthis) => onopen_Getter(mthis);

  static onopen_Setter(mthis, __arg_0) native "RTCDataChannel_onopen_Setter";
  onopen_Setter_(mthis, __arg_0) => onopen_Setter(mthis, __arg_0);

  static ordered_Getter(mthis) native "RTCDataChannel_ordered_Getter";
  ordered_Getter_(mthis) => ordered_Getter(mthis);

  static protocol_Getter(mthis) native "RTCDataChannel_protocol_Getter";
  protocol_Getter_(mthis) => protocol_Getter(mthis);

  static readyState_Getter(mthis) native "RTCDataChannel_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static reliable_Getter(mthis) native "RTCDataChannel_reliable_Getter";
  reliable_Getter_(mthis) => reliable_Getter(mthis);

  static send_Callback_0(mthis) native "RTCDataChannel_send_Callback";
  send_Callback_0_(mthis) => send_Callback_0(mthis);

  static send_Callback_1(mthis, __arg_0) native "RTCDataChannel_send_Callback";
  send_Callback_1_(mthis, __arg_0) => send_Callback_1(mthis, __arg_0);

  static send_Callback_2(mthis, __arg_0, __arg_1) native "RTCDataChannel_send_Callback";
  send_Callback_2_(mthis, __arg_0, __arg_1) => send_Callback_2(mthis, __arg_0, __arg_1);

  static send_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCDataChannel_send_Callback";
  send_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => send_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkRTCDataChannelEvent extends BlinkEvent {
  static final instance = new BlinkRTCDataChannelEvent();

  static channel_Getter(mthis) native "RTCDataChannelEvent_channel_Getter";
  channel_Getter_(mthis) => channel_Getter(mthis);

}

class BlinkRTCIceCandidate {
  static final instance = new BlinkRTCIceCandidate();

  static candidate_Getter(mthis) native "RTCIceCandidate_candidate_Getter";
  candidate_Getter_(mthis) => candidate_Getter(mthis);

  static candidate_Setter(mthis, __arg_0) native "RTCIceCandidate_candidate_Setter";
  candidate_Setter_(mthis, __arg_0) => candidate_Setter(mthis, __arg_0);

  static constructorCallback_0() native "RTCIceCandidate_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "RTCIceCandidate_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "RTCIceCandidate_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "RTCIceCandidate_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static sdpMLineIndex_Getter(mthis) native "RTCIceCandidate_sdpMLineIndex_Getter";
  sdpMLineIndex_Getter_(mthis) => sdpMLineIndex_Getter(mthis);

  static sdpMLineIndex_Setter(mthis, __arg_0) native "RTCIceCandidate_sdpMLineIndex_Setter";
  sdpMLineIndex_Setter_(mthis, __arg_0) => sdpMLineIndex_Setter(mthis, __arg_0);

  static sdpMid_Getter(mthis) native "RTCIceCandidate_sdpMid_Getter";
  sdpMid_Getter_(mthis) => sdpMid_Getter(mthis);

  static sdpMid_Setter(mthis, __arg_0) native "RTCIceCandidate_sdpMid_Setter";
  sdpMid_Setter_(mthis, __arg_0) => sdpMid_Setter(mthis, __arg_0);

}

class BlinkRTCIceCandidateEvent extends BlinkEvent {
  static final instance = new BlinkRTCIceCandidateEvent();

  static candidate_Getter(mthis) native "RTCIceCandidateEvent_candidate_Getter";
  candidate_Getter_(mthis) => candidate_Getter(mthis);

}

class BlinkRTCPeerConnection extends BlinkEventTarget {
  static final instance = new BlinkRTCPeerConnection();

  static addIceCandidate_Callback_1(mthis, __arg_0) native "RTCPeerConnection_addIceCandidate_Callback";
  addIceCandidate_Callback_1_(mthis, __arg_0) => addIceCandidate_Callback_1(mthis, __arg_0);

  static addIceCandidate_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_addIceCandidate_Callback";
  addIceCandidate_Callback_2_(mthis, __arg_0, __arg_1) => addIceCandidate_Callback_2(mthis, __arg_0, __arg_1);

  static addIceCandidate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_addIceCandidate_Callback";
  addIceCandidate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addIceCandidate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addIceCandidate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_addIceCandidate_Callback";
  addIceCandidate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => addIceCandidate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static addIceCandidate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "RTCPeerConnection_addIceCandidate_Callback";
  addIceCandidate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => addIceCandidate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static addStream_Callback_0(mthis) native "RTCPeerConnection_addStream_Callback";
  addStream_Callback_0_(mthis) => addStream_Callback_0(mthis);

  static addStream_Callback_1(mthis, __arg_0) native "RTCPeerConnection_addStream_Callback";
  addStream_Callback_1_(mthis, __arg_0) => addStream_Callback_1(mthis, __arg_0);

  static addStream_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_addStream_Callback";
  addStream_Callback_2_(mthis, __arg_0, __arg_1) => addStream_Callback_2(mthis, __arg_0, __arg_1);

  static addStream_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_addStream_Callback";
  addStream_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addStream_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addStream_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_addStream_Callback";
  addStream_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => addStream_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static close_Callback_0(mthis) native "RTCPeerConnection_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "RTCPeerConnection_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "RTCPeerConnection_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "RTCPeerConnection_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "RTCPeerConnection_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "RTCPeerConnection_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static createAnswer_Callback_0(mthis) native "RTCPeerConnection_createAnswer_Callback";
  createAnswer_Callback_0_(mthis) => createAnswer_Callback_0(mthis);

  static createAnswer_Callback_1(mthis, __arg_0) native "RTCPeerConnection_createAnswer_Callback";
  createAnswer_Callback_1_(mthis, __arg_0) => createAnswer_Callback_1(mthis, __arg_0);

  static createAnswer_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_createAnswer_Callback";
  createAnswer_Callback_2_(mthis, __arg_0, __arg_1) => createAnswer_Callback_2(mthis, __arg_0, __arg_1);

  static createAnswer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_createAnswer_Callback";
  createAnswer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createAnswer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createAnswer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_createAnswer_Callback";
  createAnswer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createAnswer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createAnswer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "RTCPeerConnection_createAnswer_Callback";
  createAnswer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createAnswer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createDTMFSender_Callback_0(mthis) native "RTCPeerConnection_createDTMFSender_Callback";
  createDTMFSender_Callback_0_(mthis) => createDTMFSender_Callback_0(mthis);

  static createDTMFSender_Callback_1(mthis, __arg_0) native "RTCPeerConnection_createDTMFSender_Callback";
  createDTMFSender_Callback_1_(mthis, __arg_0) => createDTMFSender_Callback_1(mthis, __arg_0);

  static createDTMFSender_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_createDTMFSender_Callback";
  createDTMFSender_Callback_2_(mthis, __arg_0, __arg_1) => createDTMFSender_Callback_2(mthis, __arg_0, __arg_1);

  static createDTMFSender_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_createDTMFSender_Callback";
  createDTMFSender_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createDTMFSender_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createDataChannel_Callback_0(mthis) native "RTCPeerConnection_createDataChannel_Callback";
  createDataChannel_Callback_0_(mthis) => createDataChannel_Callback_0(mthis);

  static createDataChannel_Callback_1(mthis, __arg_0) native "RTCPeerConnection_createDataChannel_Callback";
  createDataChannel_Callback_1_(mthis, __arg_0) => createDataChannel_Callback_1(mthis, __arg_0);

  static createDataChannel_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_createDataChannel_Callback";
  createDataChannel_Callback_2_(mthis, __arg_0, __arg_1) => createDataChannel_Callback_2(mthis, __arg_0, __arg_1);

  static createDataChannel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_createDataChannel_Callback";
  createDataChannel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createDataChannel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createDataChannel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_createDataChannel_Callback";
  createDataChannel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createDataChannel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createOffer_Callback_0(mthis) native "RTCPeerConnection_createOffer_Callback";
  createOffer_Callback_0_(mthis) => createOffer_Callback_0(mthis);

  static createOffer_Callback_1(mthis, __arg_0) native "RTCPeerConnection_createOffer_Callback";
  createOffer_Callback_1_(mthis, __arg_0) => createOffer_Callback_1(mthis, __arg_0);

  static createOffer_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_createOffer_Callback";
  createOffer_Callback_2_(mthis, __arg_0, __arg_1) => createOffer_Callback_2(mthis, __arg_0, __arg_1);

  static createOffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_createOffer_Callback";
  createOffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createOffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createOffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_createOffer_Callback";
  createOffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createOffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createOffer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "RTCPeerConnection_createOffer_Callback";
  createOffer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createOffer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static getLocalStreams_Callback_0(mthis) native "RTCPeerConnection_getLocalStreams_Callback";
  getLocalStreams_Callback_0_(mthis) => getLocalStreams_Callback_0(mthis);

  static getLocalStreams_Callback_1(mthis, __arg_0) native "RTCPeerConnection_getLocalStreams_Callback";
  getLocalStreams_Callback_1_(mthis, __arg_0) => getLocalStreams_Callback_1(mthis, __arg_0);

  static getLocalStreams_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_getLocalStreams_Callback";
  getLocalStreams_Callback_2_(mthis, __arg_0, __arg_1) => getLocalStreams_Callback_2(mthis, __arg_0, __arg_1);

  static getRemoteStreams_Callback_0(mthis) native "RTCPeerConnection_getRemoteStreams_Callback";
  getRemoteStreams_Callback_0_(mthis) => getRemoteStreams_Callback_0(mthis);

  static getRemoteStreams_Callback_1(mthis, __arg_0) native "RTCPeerConnection_getRemoteStreams_Callback";
  getRemoteStreams_Callback_1_(mthis, __arg_0) => getRemoteStreams_Callback_1(mthis, __arg_0);

  static getRemoteStreams_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_getRemoteStreams_Callback";
  getRemoteStreams_Callback_2_(mthis, __arg_0, __arg_1) => getRemoteStreams_Callback_2(mthis, __arg_0, __arg_1);

  static getStats_Callback_0(mthis) native "RTCPeerConnection_getStats_Callback";
  getStats_Callback_0_(mthis) => getStats_Callback_0(mthis);

  static getStats_Callback_1(mthis, __arg_0) native "RTCPeerConnection_getStats_Callback";
  getStats_Callback_1_(mthis, __arg_0) => getStats_Callback_1(mthis, __arg_0);

  static getStats_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_getStats_Callback";
  getStats_Callback_2_(mthis, __arg_0, __arg_1) => getStats_Callback_2(mthis, __arg_0, __arg_1);

  static getStats_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_getStats_Callback";
  getStats_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getStats_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getStats_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_getStats_Callback";
  getStats_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getStats_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getStreamById_Callback_0(mthis) native "RTCPeerConnection_getStreamById_Callback";
  getStreamById_Callback_0_(mthis) => getStreamById_Callback_0(mthis);

  static getStreamById_Callback_1(mthis, __arg_0) native "RTCPeerConnection_getStreamById_Callback";
  getStreamById_Callback_1_(mthis, __arg_0) => getStreamById_Callback_1(mthis, __arg_0);

  static getStreamById_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_getStreamById_Callback";
  getStreamById_Callback_2_(mthis, __arg_0, __arg_1) => getStreamById_Callback_2(mthis, __arg_0, __arg_1);

  static getStreamById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_getStreamById_Callback";
  getStreamById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getStreamById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static iceConnectionState_Getter(mthis) native "RTCPeerConnection_iceConnectionState_Getter";
  iceConnectionState_Getter_(mthis) => iceConnectionState_Getter(mthis);

  static iceGatheringState_Getter(mthis) native "RTCPeerConnection_iceGatheringState_Getter";
  iceGatheringState_Getter_(mthis) => iceGatheringState_Getter(mthis);

  static localDescription_Getter(mthis) native "RTCPeerConnection_localDescription_Getter";
  localDescription_Getter_(mthis) => localDescription_Getter(mthis);

  static onaddstream_Getter(mthis) native "RTCPeerConnection_onaddstream_Getter";
  onaddstream_Getter_(mthis) => onaddstream_Getter(mthis);

  static onaddstream_Setter(mthis, __arg_0) native "RTCPeerConnection_onaddstream_Setter";
  onaddstream_Setter_(mthis, __arg_0) => onaddstream_Setter(mthis, __arg_0);

  static ondatachannel_Getter(mthis) native "RTCPeerConnection_ondatachannel_Getter";
  ondatachannel_Getter_(mthis) => ondatachannel_Getter(mthis);

  static ondatachannel_Setter(mthis, __arg_0) native "RTCPeerConnection_ondatachannel_Setter";
  ondatachannel_Setter_(mthis, __arg_0) => ondatachannel_Setter(mthis, __arg_0);

  static onicecandidate_Getter(mthis) native "RTCPeerConnection_onicecandidate_Getter";
  onicecandidate_Getter_(mthis) => onicecandidate_Getter(mthis);

  static onicecandidate_Setter(mthis, __arg_0) native "RTCPeerConnection_onicecandidate_Setter";
  onicecandidate_Setter_(mthis, __arg_0) => onicecandidate_Setter(mthis, __arg_0);

  static oniceconnectionstatechange_Getter(mthis) native "RTCPeerConnection_oniceconnectionstatechange_Getter";
  oniceconnectionstatechange_Getter_(mthis) => oniceconnectionstatechange_Getter(mthis);

  static oniceconnectionstatechange_Setter(mthis, __arg_0) native "RTCPeerConnection_oniceconnectionstatechange_Setter";
  oniceconnectionstatechange_Setter_(mthis, __arg_0) => oniceconnectionstatechange_Setter(mthis, __arg_0);

  static onnegotiationneeded_Getter(mthis) native "RTCPeerConnection_onnegotiationneeded_Getter";
  onnegotiationneeded_Getter_(mthis) => onnegotiationneeded_Getter(mthis);

  static onnegotiationneeded_Setter(mthis, __arg_0) native "RTCPeerConnection_onnegotiationneeded_Setter";
  onnegotiationneeded_Setter_(mthis, __arg_0) => onnegotiationneeded_Setter(mthis, __arg_0);

  static onremovestream_Getter(mthis) native "RTCPeerConnection_onremovestream_Getter";
  onremovestream_Getter_(mthis) => onremovestream_Getter(mthis);

  static onremovestream_Setter(mthis, __arg_0) native "RTCPeerConnection_onremovestream_Setter";
  onremovestream_Setter_(mthis, __arg_0) => onremovestream_Setter(mthis, __arg_0);

  static onsignalingstatechange_Getter(mthis) native "RTCPeerConnection_onsignalingstatechange_Getter";
  onsignalingstatechange_Getter_(mthis) => onsignalingstatechange_Getter(mthis);

  static onsignalingstatechange_Setter(mthis, __arg_0) native "RTCPeerConnection_onsignalingstatechange_Setter";
  onsignalingstatechange_Setter_(mthis, __arg_0) => onsignalingstatechange_Setter(mthis, __arg_0);

  static remoteDescription_Getter(mthis) native "RTCPeerConnection_remoteDescription_Getter";
  remoteDescription_Getter_(mthis) => remoteDescription_Getter(mthis);

  static removeStream_Callback_0(mthis) native "RTCPeerConnection_removeStream_Callback";
  removeStream_Callback_0_(mthis) => removeStream_Callback_0(mthis);

  static removeStream_Callback_1(mthis, __arg_0) native "RTCPeerConnection_removeStream_Callback";
  removeStream_Callback_1_(mthis, __arg_0) => removeStream_Callback_1(mthis, __arg_0);

  static removeStream_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_removeStream_Callback";
  removeStream_Callback_2_(mthis, __arg_0, __arg_1) => removeStream_Callback_2(mthis, __arg_0, __arg_1);

  static removeStream_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_removeStream_Callback";
  removeStream_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeStream_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setLocalDescription_Callback_0(mthis) native "RTCPeerConnection_setLocalDescription_Callback";
  setLocalDescription_Callback_0_(mthis) => setLocalDescription_Callback_0(mthis);

  static setLocalDescription_Callback_1(mthis, __arg_0) native "RTCPeerConnection_setLocalDescription_Callback";
  setLocalDescription_Callback_1_(mthis, __arg_0) => setLocalDescription_Callback_1(mthis, __arg_0);

  static setLocalDescription_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_setLocalDescription_Callback";
  setLocalDescription_Callback_2_(mthis, __arg_0, __arg_1) => setLocalDescription_Callback_2(mthis, __arg_0, __arg_1);

  static setLocalDescription_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_setLocalDescription_Callback";
  setLocalDescription_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setLocalDescription_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setLocalDescription_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_setLocalDescription_Callback";
  setLocalDescription_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setLocalDescription_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setLocalDescription_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "RTCPeerConnection_setLocalDescription_Callback";
  setLocalDescription_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setLocalDescription_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setRemoteDescription_Callback_0(mthis) native "RTCPeerConnection_setRemoteDescription_Callback";
  setRemoteDescription_Callback_0_(mthis) => setRemoteDescription_Callback_0(mthis);

  static setRemoteDescription_Callback_1(mthis, __arg_0) native "RTCPeerConnection_setRemoteDescription_Callback";
  setRemoteDescription_Callback_1_(mthis, __arg_0) => setRemoteDescription_Callback_1(mthis, __arg_0);

  static setRemoteDescription_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_setRemoteDescription_Callback";
  setRemoteDescription_Callback_2_(mthis, __arg_0, __arg_1) => setRemoteDescription_Callback_2(mthis, __arg_0, __arg_1);

  static setRemoteDescription_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_setRemoteDescription_Callback";
  setRemoteDescription_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setRemoteDescription_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setRemoteDescription_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_setRemoteDescription_Callback";
  setRemoteDescription_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setRemoteDescription_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setRemoteDescription_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "RTCPeerConnection_setRemoteDescription_Callback";
  setRemoteDescription_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setRemoteDescription_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static signalingState_Getter(mthis) native "RTCPeerConnection_signalingState_Getter";
  signalingState_Getter_(mthis) => signalingState_Getter(mthis);

  static updateIce_Callback_0(mthis) native "RTCPeerConnection_updateIce_Callback";
  updateIce_Callback_0_(mthis) => updateIce_Callback_0(mthis);

  static updateIce_Callback_1(mthis, __arg_0) native "RTCPeerConnection_updateIce_Callback";
  updateIce_Callback_1_(mthis, __arg_0) => updateIce_Callback_1(mthis, __arg_0);

  static updateIce_Callback_2(mthis, __arg_0, __arg_1) native "RTCPeerConnection_updateIce_Callback";
  updateIce_Callback_2_(mthis, __arg_0, __arg_1) => updateIce_Callback_2(mthis, __arg_0, __arg_1);

  static updateIce_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCPeerConnection_updateIce_Callback";
  updateIce_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => updateIce_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static updateIce_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "RTCPeerConnection_updateIce_Callback";
  updateIce_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => updateIce_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkRTCSessionDescription {
  static final instance = new BlinkRTCSessionDescription();

  static constructorCallback_0() native "RTCSessionDescription_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "RTCSessionDescription_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "RTCSessionDescription_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "RTCSessionDescription_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static sdp_Getter(mthis) native "RTCSessionDescription_sdp_Getter";
  sdp_Getter_(mthis) => sdp_Getter(mthis);

  static sdp_Setter(mthis, __arg_0) native "RTCSessionDescription_sdp_Setter";
  sdp_Setter_(mthis, __arg_0) => sdp_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "RTCSessionDescription_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "RTCSessionDescription_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkRTCStatsReport {
  static final instance = new BlinkRTCStatsReport();

  static id_Getter(mthis) native "RTCStatsReport_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static local_Getter(mthis) native "RTCStatsReport_local_Getter";
  local_Getter_(mthis) => local_Getter(mthis);

  static names_Callback_0(mthis) native "RTCStatsReport_names_Callback";
  names_Callback_0_(mthis) => names_Callback_0(mthis);

  static names_Callback_1(mthis, __arg_0) native "RTCStatsReport_names_Callback";
  names_Callback_1_(mthis, __arg_0) => names_Callback_1(mthis, __arg_0);

  static names_Callback_2(mthis, __arg_0, __arg_1) native "RTCStatsReport_names_Callback";
  names_Callback_2_(mthis, __arg_0, __arg_1) => names_Callback_2(mthis, __arg_0, __arg_1);

  static remote_Getter(mthis) native "RTCStatsReport_remote_Getter";
  remote_Getter_(mthis) => remote_Getter(mthis);

  static stat_Callback_0(mthis) native "RTCStatsReport_stat_Callback";
  stat_Callback_0_(mthis) => stat_Callback_0(mthis);

  static stat_Callback_1(mthis, __arg_0) native "RTCStatsReport_stat_Callback";
  stat_Callback_1_(mthis, __arg_0) => stat_Callback_1(mthis, __arg_0);

  static stat_Callback_2(mthis, __arg_0, __arg_1) native "RTCStatsReport_stat_Callback";
  stat_Callback_2_(mthis, __arg_0, __arg_1) => stat_Callback_2(mthis, __arg_0, __arg_1);

  static stat_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCStatsReport_stat_Callback";
  stat_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stat_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static timestamp_Getter(mthis) native "RTCStatsReport_timestamp_Getter";
  timestamp_Getter_(mthis) => timestamp_Getter(mthis);

  static type_Getter(mthis) native "RTCStatsReport_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkRTCStatsResponse {
  static final instance = new BlinkRTCStatsResponse();

  static $__getter___Callback_1(mthis, __arg_0) native "RTCStatsResponse___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static namedItem_Callback_0(mthis) native "RTCStatsResponse_namedItem_Callback";
  namedItem_Callback_0_(mthis) => namedItem_Callback_0(mthis);

  static namedItem_Callback_1(mthis, __arg_0) native "RTCStatsResponse_namedItem_Callback";
  namedItem_Callback_1_(mthis, __arg_0) => namedItem_Callback_1(mthis, __arg_0);

  static namedItem_Callback_2(mthis, __arg_0, __arg_1) native "RTCStatsResponse_namedItem_Callback";
  namedItem_Callback_2_(mthis, __arg_0, __arg_1) => namedItem_Callback_2(mthis, __arg_0, __arg_1);

  static namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "RTCStatsResponse_namedItem_Callback";
  namedItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => namedItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static result_Callback_0(mthis) native "RTCStatsResponse_result_Callback";
  result_Callback_0_(mthis) => result_Callback_0(mthis);

  static result_Callback_1(mthis, __arg_0) native "RTCStatsResponse_result_Callback";
  result_Callback_1_(mthis, __arg_0) => result_Callback_1(mthis, __arg_0);

  static result_Callback_2(mthis, __arg_0, __arg_1) native "RTCStatsResponse_result_Callback";
  result_Callback_2_(mthis, __arg_0, __arg_1) => result_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkRadioNodeList extends BlinkNodeList {
  static final instance = new BlinkRadioNodeList();

  static $__getter___Callback_1(mthis, __arg_0) native "RadioNodeList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static value_Getter(mthis) native "RadioNodeList_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "RadioNodeList_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkRange {
  static final instance = new BlinkRange();

  static cloneContents_Callback_0(mthis) native "Range_cloneContents_Callback";
  cloneContents_Callback_0_(mthis) => cloneContents_Callback_0(mthis);

  static cloneContents_Callback_1(mthis, __arg_0) native "Range_cloneContents_Callback";
  cloneContents_Callback_1_(mthis, __arg_0) => cloneContents_Callback_1(mthis, __arg_0);

  static cloneContents_Callback_2(mthis, __arg_0, __arg_1) native "Range_cloneContents_Callback";
  cloneContents_Callback_2_(mthis, __arg_0, __arg_1) => cloneContents_Callback_2(mthis, __arg_0, __arg_1);

  static cloneRange_Callback_0(mthis) native "Range_cloneRange_Callback";
  cloneRange_Callback_0_(mthis) => cloneRange_Callback_0(mthis);

  static cloneRange_Callback_1(mthis, __arg_0) native "Range_cloneRange_Callback";
  cloneRange_Callback_1_(mthis, __arg_0) => cloneRange_Callback_1(mthis, __arg_0);

  static cloneRange_Callback_2(mthis, __arg_0, __arg_1) native "Range_cloneRange_Callback";
  cloneRange_Callback_2_(mthis, __arg_0, __arg_1) => cloneRange_Callback_2(mthis, __arg_0, __arg_1);

  static collapse_Callback_0(mthis) native "Range_collapse_Callback";
  collapse_Callback_0_(mthis) => collapse_Callback_0(mthis);

  static collapse_Callback_1(mthis, __arg_0) native "Range_collapse_Callback";
  collapse_Callback_1_(mthis, __arg_0) => collapse_Callback_1(mthis, __arg_0);

  static collapse_Callback_2(mthis, __arg_0, __arg_1) native "Range_collapse_Callback";
  collapse_Callback_2_(mthis, __arg_0, __arg_1) => collapse_Callback_2(mthis, __arg_0, __arg_1);

  static collapse_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_collapse_Callback";
  collapse_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => collapse_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static collapsed_Getter(mthis) native "Range_collapsed_Getter";
  collapsed_Getter_(mthis) => collapsed_Getter(mthis);

  static commonAncestorContainer_Getter(mthis) native "Range_commonAncestorContainer_Getter";
  commonAncestorContainer_Getter_(mthis) => commonAncestorContainer_Getter(mthis);

  static compareBoundaryPoints_Callback_0(mthis) native "Range_compareBoundaryPoints_Callback";
  compareBoundaryPoints_Callback_0_(mthis) => compareBoundaryPoints_Callback_0(mthis);

  static compareBoundaryPoints_Callback_1(mthis, __arg_0) native "Range_compareBoundaryPoints_Callback";
  compareBoundaryPoints_Callback_1_(mthis, __arg_0) => compareBoundaryPoints_Callback_1(mthis, __arg_0);

  static compareBoundaryPoints_Callback_2(mthis, __arg_0, __arg_1) native "Range_compareBoundaryPoints_Callback";
  compareBoundaryPoints_Callback_2_(mthis, __arg_0, __arg_1) => compareBoundaryPoints_Callback_2(mthis, __arg_0, __arg_1);

  static compareBoundaryPoints_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_compareBoundaryPoints_Callback";
  compareBoundaryPoints_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => compareBoundaryPoints_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static compareBoundaryPoints_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Range_compareBoundaryPoints_Callback";
  compareBoundaryPoints_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => compareBoundaryPoints_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static compareNode_Callback_0(mthis) native "Range_compareNode_Callback";
  compareNode_Callback_0_(mthis) => compareNode_Callback_0(mthis);

  static compareNode_Callback_1(mthis, __arg_0) native "Range_compareNode_Callback";
  compareNode_Callback_1_(mthis, __arg_0) => compareNode_Callback_1(mthis, __arg_0);

  static compareNode_Callback_2(mthis, __arg_0, __arg_1) native "Range_compareNode_Callback";
  compareNode_Callback_2_(mthis, __arg_0, __arg_1) => compareNode_Callback_2(mthis, __arg_0, __arg_1);

  static compareNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_compareNode_Callback";
  compareNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => compareNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static comparePoint_Callback_0(mthis) native "Range_comparePoint_Callback";
  comparePoint_Callback_0_(mthis) => comparePoint_Callback_0(mthis);

  static comparePoint_Callback_1(mthis, __arg_0) native "Range_comparePoint_Callback";
  comparePoint_Callback_1_(mthis, __arg_0) => comparePoint_Callback_1(mthis, __arg_0);

  static comparePoint_Callback_2(mthis, __arg_0, __arg_1) native "Range_comparePoint_Callback";
  comparePoint_Callback_2_(mthis, __arg_0, __arg_1) => comparePoint_Callback_2(mthis, __arg_0, __arg_1);

  static comparePoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_comparePoint_Callback";
  comparePoint_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => comparePoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static comparePoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Range_comparePoint_Callback";
  comparePoint_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => comparePoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_0() native "Range_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Range_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Range_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static createContextualFragment_Callback_0(mthis) native "Range_createContextualFragment_Callback";
  createContextualFragment_Callback_0_(mthis) => createContextualFragment_Callback_0(mthis);

  static createContextualFragment_Callback_1(mthis, __arg_0) native "Range_createContextualFragment_Callback";
  createContextualFragment_Callback_1_(mthis, __arg_0) => createContextualFragment_Callback_1(mthis, __arg_0);

  static createContextualFragment_Callback_2(mthis, __arg_0, __arg_1) native "Range_createContextualFragment_Callback";
  createContextualFragment_Callback_2_(mthis, __arg_0, __arg_1) => createContextualFragment_Callback_2(mthis, __arg_0, __arg_1);

  static createContextualFragment_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_createContextualFragment_Callback";
  createContextualFragment_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createContextualFragment_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteContents_Callback_0(mthis) native "Range_deleteContents_Callback";
  deleteContents_Callback_0_(mthis) => deleteContents_Callback_0(mthis);

  static deleteContents_Callback_1(mthis, __arg_0) native "Range_deleteContents_Callback";
  deleteContents_Callback_1_(mthis, __arg_0) => deleteContents_Callback_1(mthis, __arg_0);

  static deleteContents_Callback_2(mthis, __arg_0, __arg_1) native "Range_deleteContents_Callback";
  deleteContents_Callback_2_(mthis, __arg_0, __arg_1) => deleteContents_Callback_2(mthis, __arg_0, __arg_1);

  static detach_Callback_0(mthis) native "Range_detach_Callback";
  detach_Callback_0_(mthis) => detach_Callback_0(mthis);

  static detach_Callback_1(mthis, __arg_0) native "Range_detach_Callback";
  detach_Callback_1_(mthis, __arg_0) => detach_Callback_1(mthis, __arg_0);

  static detach_Callback_2(mthis, __arg_0, __arg_1) native "Range_detach_Callback";
  detach_Callback_2_(mthis, __arg_0, __arg_1) => detach_Callback_2(mthis, __arg_0, __arg_1);

  static endContainer_Getter(mthis) native "Range_endContainer_Getter";
  endContainer_Getter_(mthis) => endContainer_Getter(mthis);

  static endOffset_Getter(mthis) native "Range_endOffset_Getter";
  endOffset_Getter_(mthis) => endOffset_Getter(mthis);

  static expand_Callback_0(mthis) native "Range_expand_Callback";
  expand_Callback_0_(mthis) => expand_Callback_0(mthis);

  static expand_Callback_1(mthis, __arg_0) native "Range_expand_Callback";
  expand_Callback_1_(mthis, __arg_0) => expand_Callback_1(mthis, __arg_0);

  static expand_Callback_2(mthis, __arg_0, __arg_1) native "Range_expand_Callback";
  expand_Callback_2_(mthis, __arg_0, __arg_1) => expand_Callback_2(mthis, __arg_0, __arg_1);

  static expand_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_expand_Callback";
  expand_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => expand_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static extractContents_Callback_0(mthis) native "Range_extractContents_Callback";
  extractContents_Callback_0_(mthis) => extractContents_Callback_0(mthis);

  static extractContents_Callback_1(mthis, __arg_0) native "Range_extractContents_Callback";
  extractContents_Callback_1_(mthis, __arg_0) => extractContents_Callback_1(mthis, __arg_0);

  static extractContents_Callback_2(mthis, __arg_0, __arg_1) native "Range_extractContents_Callback";
  extractContents_Callback_2_(mthis, __arg_0, __arg_1) => extractContents_Callback_2(mthis, __arg_0, __arg_1);

  static getBoundingClientRect_Callback_0(mthis) native "Range_getBoundingClientRect_Callback";
  getBoundingClientRect_Callback_0_(mthis) => getBoundingClientRect_Callback_0(mthis);

  static getBoundingClientRect_Callback_1(mthis, __arg_0) native "Range_getBoundingClientRect_Callback";
  getBoundingClientRect_Callback_1_(mthis, __arg_0) => getBoundingClientRect_Callback_1(mthis, __arg_0);

  static getBoundingClientRect_Callback_2(mthis, __arg_0, __arg_1) native "Range_getBoundingClientRect_Callback";
  getBoundingClientRect_Callback_2_(mthis, __arg_0, __arg_1) => getBoundingClientRect_Callback_2(mthis, __arg_0, __arg_1);

  static getClientRects_Callback_0(mthis) native "Range_getClientRects_Callback";
  getClientRects_Callback_0_(mthis) => getClientRects_Callback_0(mthis);

  static getClientRects_Callback_1(mthis, __arg_0) native "Range_getClientRects_Callback";
  getClientRects_Callback_1_(mthis, __arg_0) => getClientRects_Callback_1(mthis, __arg_0);

  static getClientRects_Callback_2(mthis, __arg_0, __arg_1) native "Range_getClientRects_Callback";
  getClientRects_Callback_2_(mthis, __arg_0, __arg_1) => getClientRects_Callback_2(mthis, __arg_0, __arg_1);

  static insertNode_Callback_0(mthis) native "Range_insertNode_Callback";
  insertNode_Callback_0_(mthis) => insertNode_Callback_0(mthis);

  static insertNode_Callback_1(mthis, __arg_0) native "Range_insertNode_Callback";
  insertNode_Callback_1_(mthis, __arg_0) => insertNode_Callback_1(mthis, __arg_0);

  static insertNode_Callback_2(mthis, __arg_0, __arg_1) native "Range_insertNode_Callback";
  insertNode_Callback_2_(mthis, __arg_0, __arg_1) => insertNode_Callback_2(mthis, __arg_0, __arg_1);

  static insertNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_insertNode_Callback";
  insertNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static intersectsNode_Callback_0(mthis) native "Range_intersectsNode_Callback";
  intersectsNode_Callback_0_(mthis) => intersectsNode_Callback_0(mthis);

  static intersectsNode_Callback_1(mthis, __arg_0) native "Range_intersectsNode_Callback";
  intersectsNode_Callback_1_(mthis, __arg_0) => intersectsNode_Callback_1(mthis, __arg_0);

  static intersectsNode_Callback_2(mthis, __arg_0, __arg_1) native "Range_intersectsNode_Callback";
  intersectsNode_Callback_2_(mthis, __arg_0, __arg_1) => intersectsNode_Callback_2(mthis, __arg_0, __arg_1);

  static intersectsNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_intersectsNode_Callback";
  intersectsNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => intersectsNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isPointInRange_Callback_0(mthis) native "Range_isPointInRange_Callback";
  isPointInRange_Callback_0_(mthis) => isPointInRange_Callback_0(mthis);

  static isPointInRange_Callback_1(mthis, __arg_0) native "Range_isPointInRange_Callback";
  isPointInRange_Callback_1_(mthis, __arg_0) => isPointInRange_Callback_1(mthis, __arg_0);

  static isPointInRange_Callback_2(mthis, __arg_0, __arg_1) native "Range_isPointInRange_Callback";
  isPointInRange_Callback_2_(mthis, __arg_0, __arg_1) => isPointInRange_Callback_2(mthis, __arg_0, __arg_1);

  static isPointInRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_isPointInRange_Callback";
  isPointInRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isPointInRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isPointInRange_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Range_isPointInRange_Callback";
  isPointInRange_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => isPointInRange_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static selectNodeContents_Callback_0(mthis) native "Range_selectNodeContents_Callback";
  selectNodeContents_Callback_0_(mthis) => selectNodeContents_Callback_0(mthis);

  static selectNodeContents_Callback_1(mthis, __arg_0) native "Range_selectNodeContents_Callback";
  selectNodeContents_Callback_1_(mthis, __arg_0) => selectNodeContents_Callback_1(mthis, __arg_0);

  static selectNodeContents_Callback_2(mthis, __arg_0, __arg_1) native "Range_selectNodeContents_Callback";
  selectNodeContents_Callback_2_(mthis, __arg_0, __arg_1) => selectNodeContents_Callback_2(mthis, __arg_0, __arg_1);

  static selectNodeContents_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_selectNodeContents_Callback";
  selectNodeContents_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => selectNodeContents_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static selectNode_Callback_0(mthis) native "Range_selectNode_Callback";
  selectNode_Callback_0_(mthis) => selectNode_Callback_0(mthis);

  static selectNode_Callback_1(mthis, __arg_0) native "Range_selectNode_Callback";
  selectNode_Callback_1_(mthis, __arg_0) => selectNode_Callback_1(mthis, __arg_0);

  static selectNode_Callback_2(mthis, __arg_0, __arg_1) native "Range_selectNode_Callback";
  selectNode_Callback_2_(mthis, __arg_0, __arg_1) => selectNode_Callback_2(mthis, __arg_0, __arg_1);

  static selectNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_selectNode_Callback";
  selectNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => selectNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setEndAfter_Callback_0(mthis) native "Range_setEndAfter_Callback";
  setEndAfter_Callback_0_(mthis) => setEndAfter_Callback_0(mthis);

  static setEndAfter_Callback_1(mthis, __arg_0) native "Range_setEndAfter_Callback";
  setEndAfter_Callback_1_(mthis, __arg_0) => setEndAfter_Callback_1(mthis, __arg_0);

  static setEndAfter_Callback_2(mthis, __arg_0, __arg_1) native "Range_setEndAfter_Callback";
  setEndAfter_Callback_2_(mthis, __arg_0, __arg_1) => setEndAfter_Callback_2(mthis, __arg_0, __arg_1);

  static setEndAfter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_setEndAfter_Callback";
  setEndAfter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setEndAfter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setEndBefore_Callback_0(mthis) native "Range_setEndBefore_Callback";
  setEndBefore_Callback_0_(mthis) => setEndBefore_Callback_0(mthis);

  static setEndBefore_Callback_1(mthis, __arg_0) native "Range_setEndBefore_Callback";
  setEndBefore_Callback_1_(mthis, __arg_0) => setEndBefore_Callback_1(mthis, __arg_0);

  static setEndBefore_Callback_2(mthis, __arg_0, __arg_1) native "Range_setEndBefore_Callback";
  setEndBefore_Callback_2_(mthis, __arg_0, __arg_1) => setEndBefore_Callback_2(mthis, __arg_0, __arg_1);

  static setEndBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_setEndBefore_Callback";
  setEndBefore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setEndBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setEnd_Callback_0(mthis) native "Range_setEnd_Callback";
  setEnd_Callback_0_(mthis) => setEnd_Callback_0(mthis);

  static setEnd_Callback_1(mthis, __arg_0) native "Range_setEnd_Callback";
  setEnd_Callback_1_(mthis, __arg_0) => setEnd_Callback_1(mthis, __arg_0);

  static setEnd_Callback_2(mthis, __arg_0, __arg_1) native "Range_setEnd_Callback";
  setEnd_Callback_2_(mthis, __arg_0, __arg_1) => setEnd_Callback_2(mthis, __arg_0, __arg_1);

  static setEnd_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_setEnd_Callback";
  setEnd_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setEnd_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setEnd_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Range_setEnd_Callback";
  setEnd_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setEnd_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setStartAfter_Callback_0(mthis) native "Range_setStartAfter_Callback";
  setStartAfter_Callback_0_(mthis) => setStartAfter_Callback_0(mthis);

  static setStartAfter_Callback_1(mthis, __arg_0) native "Range_setStartAfter_Callback";
  setStartAfter_Callback_1_(mthis, __arg_0) => setStartAfter_Callback_1(mthis, __arg_0);

  static setStartAfter_Callback_2(mthis, __arg_0, __arg_1) native "Range_setStartAfter_Callback";
  setStartAfter_Callback_2_(mthis, __arg_0, __arg_1) => setStartAfter_Callback_2(mthis, __arg_0, __arg_1);

  static setStartAfter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_setStartAfter_Callback";
  setStartAfter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setStartAfter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setStartBefore_Callback_0(mthis) native "Range_setStartBefore_Callback";
  setStartBefore_Callback_0_(mthis) => setStartBefore_Callback_0(mthis);

  static setStartBefore_Callback_1(mthis, __arg_0) native "Range_setStartBefore_Callback";
  setStartBefore_Callback_1_(mthis, __arg_0) => setStartBefore_Callback_1(mthis, __arg_0);

  static setStartBefore_Callback_2(mthis, __arg_0, __arg_1) native "Range_setStartBefore_Callback";
  setStartBefore_Callback_2_(mthis, __arg_0, __arg_1) => setStartBefore_Callback_2(mthis, __arg_0, __arg_1);

  static setStartBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_setStartBefore_Callback";
  setStartBefore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setStartBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setStart_Callback_0(mthis) native "Range_setStart_Callback";
  setStart_Callback_0_(mthis) => setStart_Callback_0(mthis);

  static setStart_Callback_1(mthis, __arg_0) native "Range_setStart_Callback";
  setStart_Callback_1_(mthis, __arg_0) => setStart_Callback_1(mthis, __arg_0);

  static setStart_Callback_2(mthis, __arg_0, __arg_1) native "Range_setStart_Callback";
  setStart_Callback_2_(mthis, __arg_0, __arg_1) => setStart_Callback_2(mthis, __arg_0, __arg_1);

  static setStart_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_setStart_Callback";
  setStart_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setStart_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setStart_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Range_setStart_Callback";
  setStart_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setStart_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static startContainer_Getter(mthis) native "Range_startContainer_Getter";
  startContainer_Getter_(mthis) => startContainer_Getter(mthis);

  static startOffset_Getter(mthis) native "Range_startOffset_Getter";
  startOffset_Getter_(mthis) => startOffset_Getter(mthis);

  static surroundContents_Callback_0(mthis) native "Range_surroundContents_Callback";
  surroundContents_Callback_0_(mthis) => surroundContents_Callback_0(mthis);

  static surroundContents_Callback_1(mthis, __arg_0) native "Range_surroundContents_Callback";
  surroundContents_Callback_1_(mthis, __arg_0) => surroundContents_Callback_1(mthis, __arg_0);

  static surroundContents_Callback_2(mthis, __arg_0, __arg_1) native "Range_surroundContents_Callback";
  surroundContents_Callback_2_(mthis, __arg_0, __arg_1) => surroundContents_Callback_2(mthis, __arg_0, __arg_1);

  static surroundContents_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Range_surroundContents_Callback";
  surroundContents_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => surroundContents_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkReadableStream {
  static final instance = new BlinkReadableStream();

  static cancel_Callback_0(mthis) native "ReadableStream_cancel_Callback";
  cancel_Callback_0_(mthis) => cancel_Callback_0(mthis);

  static cancel_Callback_1(mthis, __arg_0) native "ReadableStream_cancel_Callback";
  cancel_Callback_1_(mthis, __arg_0) => cancel_Callback_1(mthis, __arg_0);

  static cancel_Callback_2(mthis, __arg_0, __arg_1) native "ReadableStream_cancel_Callback";
  cancel_Callback_2_(mthis, __arg_0, __arg_1) => cancel_Callback_2(mthis, __arg_0, __arg_1);

  static cancel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ReadableStream_cancel_Callback";
  cancel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => cancel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static closed_Getter(mthis) native "ReadableStream_closed_Getter";
  closed_Getter_(mthis) => closed_Getter(mthis);

  static read_Callback_0(mthis) native "ReadableStream_read_Callback";
  read_Callback_0_(mthis) => read_Callback_0(mthis);

  static read_Callback_1(mthis, __arg_0) native "ReadableStream_read_Callback";
  read_Callback_1_(mthis, __arg_0) => read_Callback_1(mthis, __arg_0);

  static read_Callback_2(mthis, __arg_0, __arg_1) native "ReadableStream_read_Callback";
  read_Callback_2_(mthis, __arg_0, __arg_1) => read_Callback_2(mthis, __arg_0, __arg_1);

  static state_Getter(mthis) native "ReadableStream_state_Getter";
  state_Getter_(mthis) => state_Getter(mthis);

  static wait_Callback_0(mthis) native "ReadableStream_wait_Callback";
  wait_Callback_0_(mthis) => wait_Callback_0(mthis);

  static wait_Callback_1(mthis, __arg_0) native "ReadableStream_wait_Callback";
  wait_Callback_1_(mthis, __arg_0) => wait_Callback_1(mthis, __arg_0);

  static wait_Callback_2(mthis, __arg_0, __arg_1) native "ReadableStream_wait_Callback";
  wait_Callback_2_(mthis, __arg_0, __arg_1) => wait_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkRect {
  static final instance = new BlinkRect();

  static bottom_Getter(mthis) native "Rect_bottom_Getter";
  bottom_Getter_(mthis) => bottom_Getter(mthis);

  static left_Getter(mthis) native "Rect_left_Getter";
  left_Getter_(mthis) => left_Getter(mthis);

  static right_Getter(mthis) native "Rect_right_Getter";
  right_Getter_(mthis) => right_Getter(mthis);

  static top_Getter(mthis) native "Rect_top_Getter";
  top_Getter_(mthis) => top_Getter(mthis);

}

class BlinkRelatedEvent extends BlinkEvent {
  static final instance = new BlinkRelatedEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "RelatedEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static relatedTarget_Getter(mthis) native "RelatedEvent_relatedTarget_Getter";
  relatedTarget_Getter_(mthis) => relatedTarget_Getter(mthis);

}

class BlinkRequest {
  static final instance = new BlinkRequest();

  static arrayBuffer_Callback_0(mthis) native "Request_arrayBuffer_Callback";
  arrayBuffer_Callback_0_(mthis) => arrayBuffer_Callback_0(mthis);

  static arrayBuffer_Callback_1(mthis, __arg_0) native "Request_arrayBuffer_Callback";
  arrayBuffer_Callback_1_(mthis, __arg_0) => arrayBuffer_Callback_1(mthis, __arg_0);

  static arrayBuffer_Callback_2(mthis, __arg_0, __arg_1) native "Request_arrayBuffer_Callback";
  arrayBuffer_Callback_2_(mthis, __arg_0, __arg_1) => arrayBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static blob_Callback_0(mthis) native "Request_blob_Callback";
  blob_Callback_0_(mthis) => blob_Callback_0(mthis);

  static blob_Callback_1(mthis, __arg_0) native "Request_blob_Callback";
  blob_Callback_1_(mthis, __arg_0) => blob_Callback_1(mthis, __arg_0);

  static blob_Callback_2(mthis, __arg_0, __arg_1) native "Request_blob_Callback";
  blob_Callback_2_(mthis, __arg_0, __arg_1) => blob_Callback_2(mthis, __arg_0, __arg_1);

  static bodyUsed_Getter(mthis) native "Request_bodyUsed_Getter";
  bodyUsed_Getter_(mthis) => bodyUsed_Getter(mthis);

  static clone_Callback_0(mthis) native "Request_clone_Callback";
  clone_Callback_0_(mthis) => clone_Callback_0(mthis);

  static clone_Callback_1(mthis, __arg_0) native "Request_clone_Callback";
  clone_Callback_1_(mthis, __arg_0) => clone_Callback_1(mthis, __arg_0);

  static clone_Callback_2(mthis, __arg_0, __arg_1) native "Request_clone_Callback";
  clone_Callback_2_(mthis, __arg_0, __arg_1) => clone_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "Request_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Request_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Request_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Request_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "Request_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static credentials_Getter(mthis) native "Request_credentials_Getter";
  credentials_Getter_(mthis) => credentials_Getter(mthis);

  static headers_Getter(mthis) native "Request_headers_Getter";
  headers_Getter_(mthis) => headers_Getter(mthis);

  static json_Callback_0(mthis) native "Request_json_Callback";
  json_Callback_0_(mthis) => json_Callback_0(mthis);

  static json_Callback_1(mthis, __arg_0) native "Request_json_Callback";
  json_Callback_1_(mthis, __arg_0) => json_Callback_1(mthis, __arg_0);

  static json_Callback_2(mthis, __arg_0, __arg_1) native "Request_json_Callback";
  json_Callback_2_(mthis, __arg_0, __arg_1) => json_Callback_2(mthis, __arg_0, __arg_1);

  static method_Getter(mthis) native "Request_method_Getter";
  method_Getter_(mthis) => method_Getter(mthis);

  static mode_Getter(mthis) native "Request_mode_Getter";
  mode_Getter_(mthis) => mode_Getter(mthis);

  static referrer_Getter(mthis) native "Request_referrer_Getter";
  referrer_Getter_(mthis) => referrer_Getter(mthis);

  static text_Callback_0(mthis) native "Request_text_Callback";
  text_Callback_0_(mthis) => text_Callback_0(mthis);

  static text_Callback_1(mthis, __arg_0) native "Request_text_Callback";
  text_Callback_1_(mthis, __arg_0) => text_Callback_1(mthis, __arg_0);

  static text_Callback_2(mthis, __arg_0, __arg_1) native "Request_text_Callback";
  text_Callback_2_(mthis, __arg_0, __arg_1) => text_Callback_2(mthis, __arg_0, __arg_1);

  static url_Getter(mthis) native "Request_url_Getter";
  url_Getter_(mthis) => url_Getter(mthis);

}

class BlinkResourceProgressEvent extends BlinkProgressEvent {
  static final instance = new BlinkResourceProgressEvent();

  static url_Getter(mthis) native "ResourceProgressEvent_url_Getter";
  url_Getter_(mthis) => url_Getter(mthis);

}

class BlinkResponse {
  static final instance = new BlinkResponse();

  static arrayBuffer_Callback_0(mthis) native "Response_arrayBuffer_Callback";
  arrayBuffer_Callback_0_(mthis) => arrayBuffer_Callback_0(mthis);

  static arrayBuffer_Callback_1(mthis, __arg_0) native "Response_arrayBuffer_Callback";
  arrayBuffer_Callback_1_(mthis, __arg_0) => arrayBuffer_Callback_1(mthis, __arg_0);

  static arrayBuffer_Callback_2(mthis, __arg_0, __arg_1) native "Response_arrayBuffer_Callback";
  arrayBuffer_Callback_2_(mthis, __arg_0, __arg_1) => arrayBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static blob_Callback_0(mthis) native "Response_blob_Callback";
  blob_Callback_0_(mthis) => blob_Callback_0(mthis);

  static blob_Callback_1(mthis, __arg_0) native "Response_blob_Callback";
  blob_Callback_1_(mthis, __arg_0) => blob_Callback_1(mthis, __arg_0);

  static blob_Callback_2(mthis, __arg_0, __arg_1) native "Response_blob_Callback";
  blob_Callback_2_(mthis, __arg_0, __arg_1) => blob_Callback_2(mthis, __arg_0, __arg_1);

  static bodyUsed_Getter(mthis) native "Response_bodyUsed_Getter";
  bodyUsed_Getter_(mthis) => bodyUsed_Getter(mthis);

  static clone_Callback_0(mthis) native "Response_clone_Callback";
  clone_Callback_0_(mthis) => clone_Callback_0(mthis);

  static clone_Callback_1(mthis, __arg_0) native "Response_clone_Callback";
  clone_Callback_1_(mthis, __arg_0) => clone_Callback_1(mthis, __arg_0);

  static clone_Callback_2(mthis, __arg_0, __arg_1) native "Response_clone_Callback";
  clone_Callback_2_(mthis, __arg_0, __arg_1) => clone_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "Response_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Response_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Response_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Response_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "Response_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static headers_Getter(mthis) native "Response_headers_Getter";
  headers_Getter_(mthis) => headers_Getter(mthis);

  static json_Callback_0(mthis) native "Response_json_Callback";
  json_Callback_0_(mthis) => json_Callback_0(mthis);

  static json_Callback_1(mthis, __arg_0) native "Response_json_Callback";
  json_Callback_1_(mthis, __arg_0) => json_Callback_1(mthis, __arg_0);

  static json_Callback_2(mthis, __arg_0, __arg_1) native "Response_json_Callback";
  json_Callback_2_(mthis, __arg_0, __arg_1) => json_Callback_2(mthis, __arg_0, __arg_1);

  static statusText_Getter(mthis) native "Response_statusText_Getter";
  statusText_Getter_(mthis) => statusText_Getter(mthis);

  static status_Getter(mthis) native "Response_status_Getter";
  status_Getter_(mthis) => status_Getter(mthis);

  static text_Callback_0(mthis) native "Response_text_Callback";
  text_Callback_0_(mthis) => text_Callback_0(mthis);

  static text_Callback_1(mthis, __arg_0) native "Response_text_Callback";
  text_Callback_1_(mthis, __arg_0) => text_Callback_1(mthis, __arg_0);

  static text_Callback_2(mthis, __arg_0, __arg_1) native "Response_text_Callback";
  text_Callback_2_(mthis, __arg_0, __arg_1) => text_Callback_2(mthis, __arg_0, __arg_1);

  static type_Getter(mthis) native "Response_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static url_Getter(mthis) native "Response_url_Getter";
  url_Getter_(mthis) => url_Getter(mthis);

}

class BlinkSQLError {
  static final instance = new BlinkSQLError();

  static code_Getter(mthis) native "SQLError_code_Getter";
  code_Getter_(mthis) => code_Getter(mthis);

  static message_Getter(mthis) native "SQLError_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

}

class BlinkSQLResultSet {
  static final instance = new BlinkSQLResultSet();

  static insertId_Getter(mthis) native "SQLResultSet_insertId_Getter";
  insertId_Getter_(mthis) => insertId_Getter(mthis);

  static rowsAffected_Getter(mthis) native "SQLResultSet_rowsAffected_Getter";
  rowsAffected_Getter_(mthis) => rowsAffected_Getter(mthis);

  static rows_Getter(mthis) native "SQLResultSet_rows_Getter";
  rows_Getter_(mthis) => rows_Getter(mthis);

}

class BlinkSQLResultSetRowList {
  static final instance = new BlinkSQLResultSetRowList();

  static item_Callback_0(mthis) native "SQLResultSetRowList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "SQLResultSetRowList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "SQLResultSetRowList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SQLResultSetRowList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "SQLResultSetRowList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkSQLTransaction {
  static final instance = new BlinkSQLTransaction();

  static executeSql_Callback_0(mthis) native "SQLTransaction_executeSql_Callback";
  executeSql_Callback_0_(mthis) => executeSql_Callback_0(mthis);

  static executeSql_Callback_1(mthis, __arg_0) native "SQLTransaction_executeSql_Callback";
  executeSql_Callback_1_(mthis, __arg_0) => executeSql_Callback_1(mthis, __arg_0);

  static executeSql_Callback_2(mthis, __arg_0, __arg_1) native "SQLTransaction_executeSql_Callback";
  executeSql_Callback_2_(mthis, __arg_0, __arg_1) => executeSql_Callback_2(mthis, __arg_0, __arg_1);

  static executeSql_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SQLTransaction_executeSql_Callback";
  executeSql_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => executeSql_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static executeSql_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SQLTransaction_executeSql_Callback";
  executeSql_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => executeSql_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static executeSql_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SQLTransaction_executeSql_Callback";
  executeSql_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => executeSql_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static executeSql_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SQLTransaction_executeSql_Callback";
  executeSql_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => executeSql_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

}

class BlinkSVGAElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGAElement();

  static href_Getter(mthis) native "SVGAElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static target_Getter(mthis) native "SVGAElement_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

}

class BlinkSVGAltGlyphDefElement extends BlinkSVGElement {
  static final instance = new BlinkSVGAltGlyphDefElement();

}

class BlinkSVGAltGlyphElement extends BlinkSVGTextPositioningElement {
  static final instance = new BlinkSVGAltGlyphElement();

  static format_Getter(mthis) native "SVGAltGlyphElement_format_Getter";
  format_Getter_(mthis) => format_Getter(mthis);

  static format_Setter(mthis, __arg_0) native "SVGAltGlyphElement_format_Setter";
  format_Setter_(mthis, __arg_0) => format_Setter(mthis, __arg_0);

  static glyphRef_Getter(mthis) native "SVGAltGlyphElement_glyphRef_Getter";
  glyphRef_Getter_(mthis) => glyphRef_Getter(mthis);

  static glyphRef_Setter(mthis, __arg_0) native "SVGAltGlyphElement_glyphRef_Setter";
  glyphRef_Setter_(mthis, __arg_0) => glyphRef_Setter(mthis, __arg_0);

  static href_Getter(mthis) native "SVGAltGlyphElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

}

class BlinkSVGAltGlyphItemElement extends BlinkSVGElement {
  static final instance = new BlinkSVGAltGlyphItemElement();

}

class BlinkSVGAngle {
  static final instance = new BlinkSVGAngle();

  static convertToSpecifiedUnits_Callback_0(mthis) native "SVGAngle_convertToSpecifiedUnits_Callback";
  convertToSpecifiedUnits_Callback_0_(mthis) => convertToSpecifiedUnits_Callback_0(mthis);

  static convertToSpecifiedUnits_Callback_1(mthis, __arg_0) native "SVGAngle_convertToSpecifiedUnits_Callback";
  convertToSpecifiedUnits_Callback_1_(mthis, __arg_0) => convertToSpecifiedUnits_Callback_1(mthis, __arg_0);

  static convertToSpecifiedUnits_Callback_2(mthis, __arg_0, __arg_1) native "SVGAngle_convertToSpecifiedUnits_Callback";
  convertToSpecifiedUnits_Callback_2_(mthis, __arg_0, __arg_1) => convertToSpecifiedUnits_Callback_2(mthis, __arg_0, __arg_1);

  static convertToSpecifiedUnits_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGAngle_convertToSpecifiedUnits_Callback";
  convertToSpecifiedUnits_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => convertToSpecifiedUnits_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static newValueSpecifiedUnits_Callback_0(mthis) native "SVGAngle_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_0_(mthis) => newValueSpecifiedUnits_Callback_0(mthis);

  static newValueSpecifiedUnits_Callback_1(mthis, __arg_0) native "SVGAngle_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_1_(mthis, __arg_0) => newValueSpecifiedUnits_Callback_1(mthis, __arg_0);

  static newValueSpecifiedUnits_Callback_2(mthis, __arg_0, __arg_1) native "SVGAngle_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_2_(mthis, __arg_0, __arg_1) => newValueSpecifiedUnits_Callback_2(mthis, __arg_0, __arg_1);

  static newValueSpecifiedUnits_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGAngle_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => newValueSpecifiedUnits_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static newValueSpecifiedUnits_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGAngle_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => newValueSpecifiedUnits_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static unitType_Getter(mthis) native "SVGAngle_unitType_Getter";
  unitType_Getter_(mthis) => unitType_Getter(mthis);

  static valueAsString_Getter(mthis) native "SVGAngle_valueAsString_Getter";
  valueAsString_Getter_(mthis) => valueAsString_Getter(mthis);

  static valueAsString_Setter(mthis, __arg_0) native "SVGAngle_valueAsString_Setter";
  valueAsString_Setter_(mthis, __arg_0) => valueAsString_Setter(mthis, __arg_0);

  static valueInSpecifiedUnits_Getter(mthis) native "SVGAngle_valueInSpecifiedUnits_Getter";
  valueInSpecifiedUnits_Getter_(mthis) => valueInSpecifiedUnits_Getter(mthis);

  static valueInSpecifiedUnits_Setter(mthis, __arg_0) native "SVGAngle_valueInSpecifiedUnits_Setter";
  valueInSpecifiedUnits_Setter_(mthis, __arg_0) => valueInSpecifiedUnits_Setter(mthis, __arg_0);

  static value_Getter(mthis) native "SVGAngle_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "SVGAngle_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkSVGAnimateElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGAnimateElement();

}

class BlinkSVGAnimateMotionElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGAnimateMotionElement();

}

class BlinkSVGAnimateTransformElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGAnimateTransformElement();

}

class BlinkSVGAnimatedAngle {
  static final instance = new BlinkSVGAnimatedAngle();

  static animVal_Getter(mthis) native "SVGAnimatedAngle_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedAngle_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

}

class BlinkSVGAnimatedBoolean {
  static final instance = new BlinkSVGAnimatedBoolean();

  static animVal_Getter(mthis) native "SVGAnimatedBoolean_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedBoolean_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

  static baseVal_Setter(mthis, __arg_0) native "SVGAnimatedBoolean_baseVal_Setter";
  baseVal_Setter_(mthis, __arg_0) => baseVal_Setter(mthis, __arg_0);

}

class BlinkSVGAnimatedEnumeration {
  static final instance = new BlinkSVGAnimatedEnumeration();

  static animVal_Getter(mthis) native "SVGAnimatedEnumeration_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedEnumeration_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

  static baseVal_Setter(mthis, __arg_0) native "SVGAnimatedEnumeration_baseVal_Setter";
  baseVal_Setter_(mthis, __arg_0) => baseVal_Setter(mthis, __arg_0);

}

class BlinkSVGAnimatedInteger {
  static final instance = new BlinkSVGAnimatedInteger();

  static animVal_Getter(mthis) native "SVGAnimatedInteger_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedInteger_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

  static baseVal_Setter(mthis, __arg_0) native "SVGAnimatedInteger_baseVal_Setter";
  baseVal_Setter_(mthis, __arg_0) => baseVal_Setter(mthis, __arg_0);

}

class BlinkSVGAnimatedLength {
  static final instance = new BlinkSVGAnimatedLength();

  static animVal_Getter(mthis) native "SVGAnimatedLength_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedLength_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

}

class BlinkSVGAnimatedLengthList {
  static final instance = new BlinkSVGAnimatedLengthList();

  static animVal_Getter(mthis) native "SVGAnimatedLengthList_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedLengthList_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

}

class BlinkSVGAnimatedNumber {
  static final instance = new BlinkSVGAnimatedNumber();

  static animVal_Getter(mthis) native "SVGAnimatedNumber_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedNumber_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

  static baseVal_Setter(mthis, __arg_0) native "SVGAnimatedNumber_baseVal_Setter";
  baseVal_Setter_(mthis, __arg_0) => baseVal_Setter(mthis, __arg_0);

}

class BlinkSVGAnimatedNumberList {
  static final instance = new BlinkSVGAnimatedNumberList();

  static animVal_Getter(mthis) native "SVGAnimatedNumberList_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedNumberList_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

}

class BlinkSVGAnimatedPreserveAspectRatio {
  static final instance = new BlinkSVGAnimatedPreserveAspectRatio();

  static animVal_Getter(mthis) native "SVGAnimatedPreserveAspectRatio_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedPreserveAspectRatio_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

}

class BlinkSVGAnimatedRect {
  static final instance = new BlinkSVGAnimatedRect();

  static animVal_Getter(mthis) native "SVGAnimatedRect_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedRect_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

}

class BlinkSVGAnimatedString {
  static final instance = new BlinkSVGAnimatedString();

  static animVal_Getter(mthis) native "SVGAnimatedString_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedString_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

  static baseVal_Setter(mthis, __arg_0) native "SVGAnimatedString_baseVal_Setter";
  baseVal_Setter_(mthis, __arg_0) => baseVal_Setter(mthis, __arg_0);

}

class BlinkSVGAnimatedTransformList {
  static final instance = new BlinkSVGAnimatedTransformList();

  static animVal_Getter(mthis) native "SVGAnimatedTransformList_animVal_Getter";
  animVal_Getter_(mthis) => animVal_Getter(mthis);

  static baseVal_Getter(mthis) native "SVGAnimatedTransformList_baseVal_Getter";
  baseVal_Getter_(mthis) => baseVal_Getter(mthis);

}

class BlinkSVGAnimationElement extends BlinkSVGElement {
  static final instance = new BlinkSVGAnimationElement();

  static beginElementAt_Callback_0(mthis) native "SVGAnimationElement_beginElementAt_Callback";
  beginElementAt_Callback_0_(mthis) => beginElementAt_Callback_0(mthis);

  static beginElementAt_Callback_1(mthis, __arg_0) native "SVGAnimationElement_beginElementAt_Callback";
  beginElementAt_Callback_1_(mthis, __arg_0) => beginElementAt_Callback_1(mthis, __arg_0);

  static beginElementAt_Callback_2(mthis, __arg_0, __arg_1) native "SVGAnimationElement_beginElementAt_Callback";
  beginElementAt_Callback_2_(mthis, __arg_0, __arg_1) => beginElementAt_Callback_2(mthis, __arg_0, __arg_1);

  static beginElementAt_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGAnimationElement_beginElementAt_Callback";
  beginElementAt_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => beginElementAt_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static beginElement_Callback_0(mthis) native "SVGAnimationElement_beginElement_Callback";
  beginElement_Callback_0_(mthis) => beginElement_Callback_0(mthis);

  static beginElement_Callback_1(mthis, __arg_0) native "SVGAnimationElement_beginElement_Callback";
  beginElement_Callback_1_(mthis, __arg_0) => beginElement_Callback_1(mthis, __arg_0);

  static beginElement_Callback_2(mthis, __arg_0, __arg_1) native "SVGAnimationElement_beginElement_Callback";
  beginElement_Callback_2_(mthis, __arg_0, __arg_1) => beginElement_Callback_2(mthis, __arg_0, __arg_1);

  static endElementAt_Callback_0(mthis) native "SVGAnimationElement_endElementAt_Callback";
  endElementAt_Callback_0_(mthis) => endElementAt_Callback_0(mthis);

  static endElementAt_Callback_1(mthis, __arg_0) native "SVGAnimationElement_endElementAt_Callback";
  endElementAt_Callback_1_(mthis, __arg_0) => endElementAt_Callback_1(mthis, __arg_0);

  static endElementAt_Callback_2(mthis, __arg_0, __arg_1) native "SVGAnimationElement_endElementAt_Callback";
  endElementAt_Callback_2_(mthis, __arg_0, __arg_1) => endElementAt_Callback_2(mthis, __arg_0, __arg_1);

  static endElementAt_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGAnimationElement_endElementAt_Callback";
  endElementAt_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => endElementAt_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static endElement_Callback_0(mthis) native "SVGAnimationElement_endElement_Callback";
  endElement_Callback_0_(mthis) => endElement_Callback_0(mthis);

  static endElement_Callback_1(mthis, __arg_0) native "SVGAnimationElement_endElement_Callback";
  endElement_Callback_1_(mthis, __arg_0) => endElement_Callback_1(mthis, __arg_0);

  static endElement_Callback_2(mthis, __arg_0, __arg_1) native "SVGAnimationElement_endElement_Callback";
  endElement_Callback_2_(mthis, __arg_0, __arg_1) => endElement_Callback_2(mthis, __arg_0, __arg_1);

  static getCurrentTime_Callback_0(mthis) native "SVGAnimationElement_getCurrentTime_Callback";
  getCurrentTime_Callback_0_(mthis) => getCurrentTime_Callback_0(mthis);

  static getCurrentTime_Callback_1(mthis, __arg_0) native "SVGAnimationElement_getCurrentTime_Callback";
  getCurrentTime_Callback_1_(mthis, __arg_0) => getCurrentTime_Callback_1(mthis, __arg_0);

  static getCurrentTime_Callback_2(mthis, __arg_0, __arg_1) native "SVGAnimationElement_getCurrentTime_Callback";
  getCurrentTime_Callback_2_(mthis, __arg_0, __arg_1) => getCurrentTime_Callback_2(mthis, __arg_0, __arg_1);

  static getSimpleDuration_Callback_0(mthis) native "SVGAnimationElement_getSimpleDuration_Callback";
  getSimpleDuration_Callback_0_(mthis) => getSimpleDuration_Callback_0(mthis);

  static getSimpleDuration_Callback_1(mthis, __arg_0) native "SVGAnimationElement_getSimpleDuration_Callback";
  getSimpleDuration_Callback_1_(mthis, __arg_0) => getSimpleDuration_Callback_1(mthis, __arg_0);

  static getSimpleDuration_Callback_2(mthis, __arg_0, __arg_1) native "SVGAnimationElement_getSimpleDuration_Callback";
  getSimpleDuration_Callback_2_(mthis, __arg_0, __arg_1) => getSimpleDuration_Callback_2(mthis, __arg_0, __arg_1);

  static getStartTime_Callback_0(mthis) native "SVGAnimationElement_getStartTime_Callback";
  getStartTime_Callback_0_(mthis) => getStartTime_Callback_0(mthis);

  static getStartTime_Callback_1(mthis, __arg_0) native "SVGAnimationElement_getStartTime_Callback";
  getStartTime_Callback_1_(mthis, __arg_0) => getStartTime_Callback_1(mthis, __arg_0);

  static getStartTime_Callback_2(mthis, __arg_0, __arg_1) native "SVGAnimationElement_getStartTime_Callback";
  getStartTime_Callback_2_(mthis, __arg_0, __arg_1) => getStartTime_Callback_2(mthis, __arg_0, __arg_1);

  static hasExtension_Callback_0(mthis) native "SVGAnimationElement_hasExtension_Callback";
  hasExtension_Callback_0_(mthis) => hasExtension_Callback_0(mthis);

  static hasExtension_Callback_1(mthis, __arg_0) native "SVGAnimationElement_hasExtension_Callback";
  hasExtension_Callback_1_(mthis, __arg_0) => hasExtension_Callback_1(mthis, __arg_0);

  static hasExtension_Callback_2(mthis, __arg_0, __arg_1) native "SVGAnimationElement_hasExtension_Callback";
  hasExtension_Callback_2_(mthis, __arg_0, __arg_1) => hasExtension_Callback_2(mthis, __arg_0, __arg_1);

  static hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGAnimationElement_hasExtension_Callback";
  hasExtension_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static onbegin_Getter(mthis) native "SVGAnimationElement_onbegin_Getter";
  onbegin_Getter_(mthis) => onbegin_Getter(mthis);

  static onbegin_Setter(mthis, __arg_0) native "SVGAnimationElement_onbegin_Setter";
  onbegin_Setter_(mthis, __arg_0) => onbegin_Setter(mthis, __arg_0);

  static onend_Getter(mthis) native "SVGAnimationElement_onend_Getter";
  onend_Getter_(mthis) => onend_Getter(mthis);

  static onend_Setter(mthis, __arg_0) native "SVGAnimationElement_onend_Setter";
  onend_Setter_(mthis, __arg_0) => onend_Setter(mthis, __arg_0);

  static onrepeat_Getter(mthis) native "SVGAnimationElement_onrepeat_Getter";
  onrepeat_Getter_(mthis) => onrepeat_Getter(mthis);

  static onrepeat_Setter(mthis, __arg_0) native "SVGAnimationElement_onrepeat_Setter";
  onrepeat_Setter_(mthis, __arg_0) => onrepeat_Setter(mthis, __arg_0);

  static requiredExtensions_Getter(mthis) native "SVGAnimationElement_requiredExtensions_Getter";
  requiredExtensions_Getter_(mthis) => requiredExtensions_Getter(mthis);

  static requiredFeatures_Getter(mthis) native "SVGAnimationElement_requiredFeatures_Getter";
  requiredFeatures_Getter_(mthis) => requiredFeatures_Getter(mthis);

  static systemLanguage_Getter(mthis) native "SVGAnimationElement_systemLanguage_Getter";
  systemLanguage_Getter_(mthis) => systemLanguage_Getter(mthis);

  static targetElement_Getter(mthis) native "SVGAnimationElement_targetElement_Getter";
  targetElement_Getter_(mthis) => targetElement_Getter(mthis);

}

class BlinkSVGCircleElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGCircleElement();

  static cx_Getter(mthis) native "SVGCircleElement_cx_Getter";
  cx_Getter_(mthis) => cx_Getter(mthis);

  static cy_Getter(mthis) native "SVGCircleElement_cy_Getter";
  cy_Getter_(mthis) => cy_Getter(mthis);

  static r_Getter(mthis) native "SVGCircleElement_r_Getter";
  r_Getter_(mthis) => r_Getter(mthis);

}

class BlinkSVGClipPathElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGClipPathElement();

  static clipPathUnits_Getter(mthis) native "SVGClipPathElement_clipPathUnits_Getter";
  clipPathUnits_Getter_(mthis) => clipPathUnits_Getter(mthis);

}

class BlinkSVGComponentTransferFunctionElement extends BlinkSVGElement {
  static final instance = new BlinkSVGComponentTransferFunctionElement();

  static amplitude_Getter(mthis) native "SVGComponentTransferFunctionElement_amplitude_Getter";
  amplitude_Getter_(mthis) => amplitude_Getter(mthis);

  static exponent_Getter(mthis) native "SVGComponentTransferFunctionElement_exponent_Getter";
  exponent_Getter_(mthis) => exponent_Getter(mthis);

  static intercept_Getter(mthis) native "SVGComponentTransferFunctionElement_intercept_Getter";
  intercept_Getter_(mthis) => intercept_Getter(mthis);

  static offset_Getter(mthis) native "SVGComponentTransferFunctionElement_offset_Getter";
  offset_Getter_(mthis) => offset_Getter(mthis);

  static slope_Getter(mthis) native "SVGComponentTransferFunctionElement_slope_Getter";
  slope_Getter_(mthis) => slope_Getter(mthis);

  static tableValues_Getter(mthis) native "SVGComponentTransferFunctionElement_tableValues_Getter";
  tableValues_Getter_(mthis) => tableValues_Getter(mthis);

  static type_Getter(mthis) native "SVGComponentTransferFunctionElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkSVGCursorElement extends BlinkSVGElement {
  static final instance = new BlinkSVGCursorElement();

  static hasExtension_Callback_0(mthis) native "SVGCursorElement_hasExtension_Callback";
  hasExtension_Callback_0_(mthis) => hasExtension_Callback_0(mthis);

  static hasExtension_Callback_1(mthis, __arg_0) native "SVGCursorElement_hasExtension_Callback";
  hasExtension_Callback_1_(mthis, __arg_0) => hasExtension_Callback_1(mthis, __arg_0);

  static hasExtension_Callback_2(mthis, __arg_0, __arg_1) native "SVGCursorElement_hasExtension_Callback";
  hasExtension_Callback_2_(mthis, __arg_0, __arg_1) => hasExtension_Callback_2(mthis, __arg_0, __arg_1);

  static hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGCursorElement_hasExtension_Callback";
  hasExtension_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static href_Getter(mthis) native "SVGCursorElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static requiredExtensions_Getter(mthis) native "SVGCursorElement_requiredExtensions_Getter";
  requiredExtensions_Getter_(mthis) => requiredExtensions_Getter(mthis);

  static requiredFeatures_Getter(mthis) native "SVGCursorElement_requiredFeatures_Getter";
  requiredFeatures_Getter_(mthis) => requiredFeatures_Getter(mthis);

  static systemLanguage_Getter(mthis) native "SVGCursorElement_systemLanguage_Getter";
  systemLanguage_Getter_(mthis) => systemLanguage_Getter(mthis);

  static x_Getter(mthis) native "SVGCursorElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGCursorElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGDefsElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGDefsElement();

}

class BlinkSVGDescElement extends BlinkSVGElement {
  static final instance = new BlinkSVGDescElement();

}

class BlinkSVGDiscardElement extends BlinkSVGElement {
  static final instance = new BlinkSVGDiscardElement();

}

class BlinkSVGElement extends BlinkElement {
  static final instance = new BlinkSVGElement();

  static className_Getter(mthis) native "SVGElement_className_Getter";
  className_Getter_(mthis) => className_Getter(mthis);

  static onabort_Getter(mthis) native "SVGElement_onabort_Getter";
  onabort_Getter_(mthis) => onabort_Getter(mthis);

  static onabort_Setter(mthis, __arg_0) native "SVGElement_onabort_Setter";
  onabort_Setter_(mthis, __arg_0) => onabort_Setter(mthis, __arg_0);

  static onautocomplete_Getter(mthis) native "SVGElement_onautocomplete_Getter";
  onautocomplete_Getter_(mthis) => onautocomplete_Getter(mthis);

  static onautocomplete_Setter(mthis, __arg_0) native "SVGElement_onautocomplete_Setter";
  onautocomplete_Setter_(mthis, __arg_0) => onautocomplete_Setter(mthis, __arg_0);

  static onautocompleteerror_Getter(mthis) native "SVGElement_onautocompleteerror_Getter";
  onautocompleteerror_Getter_(mthis) => onautocompleteerror_Getter(mthis);

  static onautocompleteerror_Setter(mthis, __arg_0) native "SVGElement_onautocompleteerror_Setter";
  onautocompleteerror_Setter_(mthis, __arg_0) => onautocompleteerror_Setter(mthis, __arg_0);

  static onblur_Getter(mthis) native "SVGElement_onblur_Getter";
  onblur_Getter_(mthis) => onblur_Getter(mthis);

  static onblur_Setter(mthis, __arg_0) native "SVGElement_onblur_Setter";
  onblur_Setter_(mthis, __arg_0) => onblur_Setter(mthis, __arg_0);

  static oncancel_Getter(mthis) native "SVGElement_oncancel_Getter";
  oncancel_Getter_(mthis) => oncancel_Getter(mthis);

  static oncancel_Setter(mthis, __arg_0) native "SVGElement_oncancel_Setter";
  oncancel_Setter_(mthis, __arg_0) => oncancel_Setter(mthis, __arg_0);

  static oncanplay_Getter(mthis) native "SVGElement_oncanplay_Getter";
  oncanplay_Getter_(mthis) => oncanplay_Getter(mthis);

  static oncanplay_Setter(mthis, __arg_0) native "SVGElement_oncanplay_Setter";
  oncanplay_Setter_(mthis, __arg_0) => oncanplay_Setter(mthis, __arg_0);

  static oncanplaythrough_Getter(mthis) native "SVGElement_oncanplaythrough_Getter";
  oncanplaythrough_Getter_(mthis) => oncanplaythrough_Getter(mthis);

  static oncanplaythrough_Setter(mthis, __arg_0) native "SVGElement_oncanplaythrough_Setter";
  oncanplaythrough_Setter_(mthis, __arg_0) => oncanplaythrough_Setter(mthis, __arg_0);

  static onchange_Getter(mthis) native "SVGElement_onchange_Getter";
  onchange_Getter_(mthis) => onchange_Getter(mthis);

  static onchange_Setter(mthis, __arg_0) native "SVGElement_onchange_Setter";
  onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);

  static onclick_Getter(mthis) native "SVGElement_onclick_Getter";
  onclick_Getter_(mthis) => onclick_Getter(mthis);

  static onclick_Setter(mthis, __arg_0) native "SVGElement_onclick_Setter";
  onclick_Setter_(mthis, __arg_0) => onclick_Setter(mthis, __arg_0);

  static onclose_Getter(mthis) native "SVGElement_onclose_Getter";
  onclose_Getter_(mthis) => onclose_Getter(mthis);

  static onclose_Setter(mthis, __arg_0) native "SVGElement_onclose_Setter";
  onclose_Setter_(mthis, __arg_0) => onclose_Setter(mthis, __arg_0);

  static oncontextmenu_Getter(mthis) native "SVGElement_oncontextmenu_Getter";
  oncontextmenu_Getter_(mthis) => oncontextmenu_Getter(mthis);

  static oncontextmenu_Setter(mthis, __arg_0) native "SVGElement_oncontextmenu_Setter";
  oncontextmenu_Setter_(mthis, __arg_0) => oncontextmenu_Setter(mthis, __arg_0);

  static oncuechange_Getter(mthis) native "SVGElement_oncuechange_Getter";
  oncuechange_Getter_(mthis) => oncuechange_Getter(mthis);

  static oncuechange_Setter(mthis, __arg_0) native "SVGElement_oncuechange_Setter";
  oncuechange_Setter_(mthis, __arg_0) => oncuechange_Setter(mthis, __arg_0);

  static ondblclick_Getter(mthis) native "SVGElement_ondblclick_Getter";
  ondblclick_Getter_(mthis) => ondblclick_Getter(mthis);

  static ondblclick_Setter(mthis, __arg_0) native "SVGElement_ondblclick_Setter";
  ondblclick_Setter_(mthis, __arg_0) => ondblclick_Setter(mthis, __arg_0);

  static ondrag_Getter(mthis) native "SVGElement_ondrag_Getter";
  ondrag_Getter_(mthis) => ondrag_Getter(mthis);

  static ondrag_Setter(mthis, __arg_0) native "SVGElement_ondrag_Setter";
  ondrag_Setter_(mthis, __arg_0) => ondrag_Setter(mthis, __arg_0);

  static ondragend_Getter(mthis) native "SVGElement_ondragend_Getter";
  ondragend_Getter_(mthis) => ondragend_Getter(mthis);

  static ondragend_Setter(mthis, __arg_0) native "SVGElement_ondragend_Setter";
  ondragend_Setter_(mthis, __arg_0) => ondragend_Setter(mthis, __arg_0);

  static ondragenter_Getter(mthis) native "SVGElement_ondragenter_Getter";
  ondragenter_Getter_(mthis) => ondragenter_Getter(mthis);

  static ondragenter_Setter(mthis, __arg_0) native "SVGElement_ondragenter_Setter";
  ondragenter_Setter_(mthis, __arg_0) => ondragenter_Setter(mthis, __arg_0);

  static ondragleave_Getter(mthis) native "SVGElement_ondragleave_Getter";
  ondragleave_Getter_(mthis) => ondragleave_Getter(mthis);

  static ondragleave_Setter(mthis, __arg_0) native "SVGElement_ondragleave_Setter";
  ondragleave_Setter_(mthis, __arg_0) => ondragleave_Setter(mthis, __arg_0);

  static ondragover_Getter(mthis) native "SVGElement_ondragover_Getter";
  ondragover_Getter_(mthis) => ondragover_Getter(mthis);

  static ondragover_Setter(mthis, __arg_0) native "SVGElement_ondragover_Setter";
  ondragover_Setter_(mthis, __arg_0) => ondragover_Setter(mthis, __arg_0);

  static ondragstart_Getter(mthis) native "SVGElement_ondragstart_Getter";
  ondragstart_Getter_(mthis) => ondragstart_Getter(mthis);

  static ondragstart_Setter(mthis, __arg_0) native "SVGElement_ondragstart_Setter";
  ondragstart_Setter_(mthis, __arg_0) => ondragstart_Setter(mthis, __arg_0);

  static ondrop_Getter(mthis) native "SVGElement_ondrop_Getter";
  ondrop_Getter_(mthis) => ondrop_Getter(mthis);

  static ondrop_Setter(mthis, __arg_0) native "SVGElement_ondrop_Setter";
  ondrop_Setter_(mthis, __arg_0) => ondrop_Setter(mthis, __arg_0);

  static ondurationchange_Getter(mthis) native "SVGElement_ondurationchange_Getter";
  ondurationchange_Getter_(mthis) => ondurationchange_Getter(mthis);

  static ondurationchange_Setter(mthis, __arg_0) native "SVGElement_ondurationchange_Setter";
  ondurationchange_Setter_(mthis, __arg_0) => ondurationchange_Setter(mthis, __arg_0);

  static onemptied_Getter(mthis) native "SVGElement_onemptied_Getter";
  onemptied_Getter_(mthis) => onemptied_Getter(mthis);

  static onemptied_Setter(mthis, __arg_0) native "SVGElement_onemptied_Setter";
  onemptied_Setter_(mthis, __arg_0) => onemptied_Setter(mthis, __arg_0);

  static onended_Getter(mthis) native "SVGElement_onended_Getter";
  onended_Getter_(mthis) => onended_Getter(mthis);

  static onended_Setter(mthis, __arg_0) native "SVGElement_onended_Setter";
  onended_Setter_(mthis, __arg_0) => onended_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "SVGElement_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "SVGElement_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onfocus_Getter(mthis) native "SVGElement_onfocus_Getter";
  onfocus_Getter_(mthis) => onfocus_Getter(mthis);

  static onfocus_Setter(mthis, __arg_0) native "SVGElement_onfocus_Setter";
  onfocus_Setter_(mthis, __arg_0) => onfocus_Setter(mthis, __arg_0);

  static oninput_Getter(mthis) native "SVGElement_oninput_Getter";
  oninput_Getter_(mthis) => oninput_Getter(mthis);

  static oninput_Setter(mthis, __arg_0) native "SVGElement_oninput_Setter";
  oninput_Setter_(mthis, __arg_0) => oninput_Setter(mthis, __arg_0);

  static oninvalid_Getter(mthis) native "SVGElement_oninvalid_Getter";
  oninvalid_Getter_(mthis) => oninvalid_Getter(mthis);

  static oninvalid_Setter(mthis, __arg_0) native "SVGElement_oninvalid_Setter";
  oninvalid_Setter_(mthis, __arg_0) => oninvalid_Setter(mthis, __arg_0);

  static onkeydown_Getter(mthis) native "SVGElement_onkeydown_Getter";
  onkeydown_Getter_(mthis) => onkeydown_Getter(mthis);

  static onkeydown_Setter(mthis, __arg_0) native "SVGElement_onkeydown_Setter";
  onkeydown_Setter_(mthis, __arg_0) => onkeydown_Setter(mthis, __arg_0);

  static onkeypress_Getter(mthis) native "SVGElement_onkeypress_Getter";
  onkeypress_Getter_(mthis) => onkeypress_Getter(mthis);

  static onkeypress_Setter(mthis, __arg_0) native "SVGElement_onkeypress_Setter";
  onkeypress_Setter_(mthis, __arg_0) => onkeypress_Setter(mthis, __arg_0);

  static onkeyup_Getter(mthis) native "SVGElement_onkeyup_Getter";
  onkeyup_Getter_(mthis) => onkeyup_Getter(mthis);

  static onkeyup_Setter(mthis, __arg_0) native "SVGElement_onkeyup_Setter";
  onkeyup_Setter_(mthis, __arg_0) => onkeyup_Setter(mthis, __arg_0);

  static onload_Getter(mthis) native "SVGElement_onload_Getter";
  onload_Getter_(mthis) => onload_Getter(mthis);

  static onload_Setter(mthis, __arg_0) native "SVGElement_onload_Setter";
  onload_Setter_(mthis, __arg_0) => onload_Setter(mthis, __arg_0);

  static onloadeddata_Getter(mthis) native "SVGElement_onloadeddata_Getter";
  onloadeddata_Getter_(mthis) => onloadeddata_Getter(mthis);

  static onloadeddata_Setter(mthis, __arg_0) native "SVGElement_onloadeddata_Setter";
  onloadeddata_Setter_(mthis, __arg_0) => onloadeddata_Setter(mthis, __arg_0);

  static onloadedmetadata_Getter(mthis) native "SVGElement_onloadedmetadata_Getter";
  onloadedmetadata_Getter_(mthis) => onloadedmetadata_Getter(mthis);

  static onloadedmetadata_Setter(mthis, __arg_0) native "SVGElement_onloadedmetadata_Setter";
  onloadedmetadata_Setter_(mthis, __arg_0) => onloadedmetadata_Setter(mthis, __arg_0);

  static onloadstart_Getter(mthis) native "SVGElement_onloadstart_Getter";
  onloadstart_Getter_(mthis) => onloadstart_Getter(mthis);

  static onloadstart_Setter(mthis, __arg_0) native "SVGElement_onloadstart_Setter";
  onloadstart_Setter_(mthis, __arg_0) => onloadstart_Setter(mthis, __arg_0);

  static onmousedown_Getter(mthis) native "SVGElement_onmousedown_Getter";
  onmousedown_Getter_(mthis) => onmousedown_Getter(mthis);

  static onmousedown_Setter(mthis, __arg_0) native "SVGElement_onmousedown_Setter";
  onmousedown_Setter_(mthis, __arg_0) => onmousedown_Setter(mthis, __arg_0);

  static onmouseenter_Getter(mthis) native "SVGElement_onmouseenter_Getter";
  onmouseenter_Getter_(mthis) => onmouseenter_Getter(mthis);

  static onmouseenter_Setter(mthis, __arg_0) native "SVGElement_onmouseenter_Setter";
  onmouseenter_Setter_(mthis, __arg_0) => onmouseenter_Setter(mthis, __arg_0);

  static onmouseleave_Getter(mthis) native "SVGElement_onmouseleave_Getter";
  onmouseleave_Getter_(mthis) => onmouseleave_Getter(mthis);

  static onmouseleave_Setter(mthis, __arg_0) native "SVGElement_onmouseleave_Setter";
  onmouseleave_Setter_(mthis, __arg_0) => onmouseleave_Setter(mthis, __arg_0);

  static onmousemove_Getter(mthis) native "SVGElement_onmousemove_Getter";
  onmousemove_Getter_(mthis) => onmousemove_Getter(mthis);

  static onmousemove_Setter(mthis, __arg_0) native "SVGElement_onmousemove_Setter";
  onmousemove_Setter_(mthis, __arg_0) => onmousemove_Setter(mthis, __arg_0);

  static onmouseout_Getter(mthis) native "SVGElement_onmouseout_Getter";
  onmouseout_Getter_(mthis) => onmouseout_Getter(mthis);

  static onmouseout_Setter(mthis, __arg_0) native "SVGElement_onmouseout_Setter";
  onmouseout_Setter_(mthis, __arg_0) => onmouseout_Setter(mthis, __arg_0);

  static onmouseover_Getter(mthis) native "SVGElement_onmouseover_Getter";
  onmouseover_Getter_(mthis) => onmouseover_Getter(mthis);

  static onmouseover_Setter(mthis, __arg_0) native "SVGElement_onmouseover_Setter";
  onmouseover_Setter_(mthis, __arg_0) => onmouseover_Setter(mthis, __arg_0);

  static onmouseup_Getter(mthis) native "SVGElement_onmouseup_Getter";
  onmouseup_Getter_(mthis) => onmouseup_Getter(mthis);

  static onmouseup_Setter(mthis, __arg_0) native "SVGElement_onmouseup_Setter";
  onmouseup_Setter_(mthis, __arg_0) => onmouseup_Setter(mthis, __arg_0);

  static onmousewheel_Getter(mthis) native "SVGElement_onmousewheel_Getter";
  onmousewheel_Getter_(mthis) => onmousewheel_Getter(mthis);

  static onmousewheel_Setter(mthis, __arg_0) native "SVGElement_onmousewheel_Setter";
  onmousewheel_Setter_(mthis, __arg_0) => onmousewheel_Setter(mthis, __arg_0);

  static onpause_Getter(mthis) native "SVGElement_onpause_Getter";
  onpause_Getter_(mthis) => onpause_Getter(mthis);

  static onpause_Setter(mthis, __arg_0) native "SVGElement_onpause_Setter";
  onpause_Setter_(mthis, __arg_0) => onpause_Setter(mthis, __arg_0);

  static onplay_Getter(mthis) native "SVGElement_onplay_Getter";
  onplay_Getter_(mthis) => onplay_Getter(mthis);

  static onplay_Setter(mthis, __arg_0) native "SVGElement_onplay_Setter";
  onplay_Setter_(mthis, __arg_0) => onplay_Setter(mthis, __arg_0);

  static onplaying_Getter(mthis) native "SVGElement_onplaying_Getter";
  onplaying_Getter_(mthis) => onplaying_Getter(mthis);

  static onplaying_Setter(mthis, __arg_0) native "SVGElement_onplaying_Setter";
  onplaying_Setter_(mthis, __arg_0) => onplaying_Setter(mthis, __arg_0);

  static onprogress_Getter(mthis) native "SVGElement_onprogress_Getter";
  onprogress_Getter_(mthis) => onprogress_Getter(mthis);

  static onprogress_Setter(mthis, __arg_0) native "SVGElement_onprogress_Setter";
  onprogress_Setter_(mthis, __arg_0) => onprogress_Setter(mthis, __arg_0);

  static onratechange_Getter(mthis) native "SVGElement_onratechange_Getter";
  onratechange_Getter_(mthis) => onratechange_Getter(mthis);

  static onratechange_Setter(mthis, __arg_0) native "SVGElement_onratechange_Setter";
  onratechange_Setter_(mthis, __arg_0) => onratechange_Setter(mthis, __arg_0);

  static onreset_Getter(mthis) native "SVGElement_onreset_Getter";
  onreset_Getter_(mthis) => onreset_Getter(mthis);

  static onreset_Setter(mthis, __arg_0) native "SVGElement_onreset_Setter";
  onreset_Setter_(mthis, __arg_0) => onreset_Setter(mthis, __arg_0);

  static onresize_Getter(mthis) native "SVGElement_onresize_Getter";
  onresize_Getter_(mthis) => onresize_Getter(mthis);

  static onresize_Setter(mthis, __arg_0) native "SVGElement_onresize_Setter";
  onresize_Setter_(mthis, __arg_0) => onresize_Setter(mthis, __arg_0);

  static onscroll_Getter(mthis) native "SVGElement_onscroll_Getter";
  onscroll_Getter_(mthis) => onscroll_Getter(mthis);

  static onscroll_Setter(mthis, __arg_0) native "SVGElement_onscroll_Setter";
  onscroll_Setter_(mthis, __arg_0) => onscroll_Setter(mthis, __arg_0);

  static onseeked_Getter(mthis) native "SVGElement_onseeked_Getter";
  onseeked_Getter_(mthis) => onseeked_Getter(mthis);

  static onseeked_Setter(mthis, __arg_0) native "SVGElement_onseeked_Setter";
  onseeked_Setter_(mthis, __arg_0) => onseeked_Setter(mthis, __arg_0);

  static onseeking_Getter(mthis) native "SVGElement_onseeking_Getter";
  onseeking_Getter_(mthis) => onseeking_Getter(mthis);

  static onseeking_Setter(mthis, __arg_0) native "SVGElement_onseeking_Setter";
  onseeking_Setter_(mthis, __arg_0) => onseeking_Setter(mthis, __arg_0);

  static onselect_Getter(mthis) native "SVGElement_onselect_Getter";
  onselect_Getter_(mthis) => onselect_Getter(mthis);

  static onselect_Setter(mthis, __arg_0) native "SVGElement_onselect_Setter";
  onselect_Setter_(mthis, __arg_0) => onselect_Setter(mthis, __arg_0);

  static onshow_Getter(mthis) native "SVGElement_onshow_Getter";
  onshow_Getter_(mthis) => onshow_Getter(mthis);

  static onshow_Setter(mthis, __arg_0) native "SVGElement_onshow_Setter";
  onshow_Setter_(mthis, __arg_0) => onshow_Setter(mthis, __arg_0);

  static onstalled_Getter(mthis) native "SVGElement_onstalled_Getter";
  onstalled_Getter_(mthis) => onstalled_Getter(mthis);

  static onstalled_Setter(mthis, __arg_0) native "SVGElement_onstalled_Setter";
  onstalled_Setter_(mthis, __arg_0) => onstalled_Setter(mthis, __arg_0);

  static onsubmit_Getter(mthis) native "SVGElement_onsubmit_Getter";
  onsubmit_Getter_(mthis) => onsubmit_Getter(mthis);

  static onsubmit_Setter(mthis, __arg_0) native "SVGElement_onsubmit_Setter";
  onsubmit_Setter_(mthis, __arg_0) => onsubmit_Setter(mthis, __arg_0);

  static onsuspend_Getter(mthis) native "SVGElement_onsuspend_Getter";
  onsuspend_Getter_(mthis) => onsuspend_Getter(mthis);

  static onsuspend_Setter(mthis, __arg_0) native "SVGElement_onsuspend_Setter";
  onsuspend_Setter_(mthis, __arg_0) => onsuspend_Setter(mthis, __arg_0);

  static ontimeupdate_Getter(mthis) native "SVGElement_ontimeupdate_Getter";
  ontimeupdate_Getter_(mthis) => ontimeupdate_Getter(mthis);

  static ontimeupdate_Setter(mthis, __arg_0) native "SVGElement_ontimeupdate_Setter";
  ontimeupdate_Setter_(mthis, __arg_0) => ontimeupdate_Setter(mthis, __arg_0);

  static ontoggle_Getter(mthis) native "SVGElement_ontoggle_Getter";
  ontoggle_Getter_(mthis) => ontoggle_Getter(mthis);

  static ontoggle_Setter(mthis, __arg_0) native "SVGElement_ontoggle_Setter";
  ontoggle_Setter_(mthis, __arg_0) => ontoggle_Setter(mthis, __arg_0);

  static onvolumechange_Getter(mthis) native "SVGElement_onvolumechange_Getter";
  onvolumechange_Getter_(mthis) => onvolumechange_Getter(mthis);

  static onvolumechange_Setter(mthis, __arg_0) native "SVGElement_onvolumechange_Setter";
  onvolumechange_Setter_(mthis, __arg_0) => onvolumechange_Setter(mthis, __arg_0);

  static onwaiting_Getter(mthis) native "SVGElement_onwaiting_Getter";
  onwaiting_Getter_(mthis) => onwaiting_Getter(mthis);

  static onwaiting_Setter(mthis, __arg_0) native "SVGElement_onwaiting_Setter";
  onwaiting_Setter_(mthis, __arg_0) => onwaiting_Setter(mthis, __arg_0);

  static ownerSVGElement_Getter(mthis) native "SVGElement_ownerSVGElement_Getter";
  ownerSVGElement_Getter_(mthis) => ownerSVGElement_Getter(mthis);

  static style_Getter(mthis) native "SVGElement_style_Getter";
  style_Getter_(mthis) => style_Getter(mthis);

  static tabIndex_Getter(mthis) native "SVGElement_tabIndex_Getter";
  tabIndex_Getter_(mthis) => tabIndex_Getter(mthis);

  static tabIndex_Setter(mthis, __arg_0) native "SVGElement_tabIndex_Setter";
  tabIndex_Setter_(mthis, __arg_0) => tabIndex_Setter(mthis, __arg_0);

  static viewportElement_Getter(mthis) native "SVGElement_viewportElement_Getter";
  viewportElement_Getter_(mthis) => viewportElement_Getter(mthis);

  static xmlbase_Getter(mthis) native "SVGElement_xmlbase_Getter";
  xmlbase_Getter_(mthis) => xmlbase_Getter(mthis);

  static xmlbase_Setter(mthis, __arg_0) native "SVGElement_xmlbase_Setter";
  xmlbase_Setter_(mthis, __arg_0) => xmlbase_Setter(mthis, __arg_0);

  static xmllang_Getter(mthis) native "SVGElement_xmllang_Getter";
  xmllang_Getter_(mthis) => xmllang_Getter(mthis);

  static xmllang_Setter(mthis, __arg_0) native "SVGElement_xmllang_Setter";
  xmllang_Setter_(mthis, __arg_0) => xmllang_Setter(mthis, __arg_0);

  static xmlspace_Getter(mthis) native "SVGElement_xmlspace_Getter";
  xmlspace_Getter_(mthis) => xmlspace_Getter(mthis);

  static xmlspace_Setter(mthis, __arg_0) native "SVGElement_xmlspace_Setter";
  xmlspace_Setter_(mthis, __arg_0) => xmlspace_Setter(mthis, __arg_0);

}

class BlinkSVGEllipseElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGEllipseElement();

  static cx_Getter(mthis) native "SVGEllipseElement_cx_Getter";
  cx_Getter_(mthis) => cx_Getter(mthis);

  static cy_Getter(mthis) native "SVGEllipseElement_cy_Getter";
  cy_Getter_(mthis) => cy_Getter(mthis);

  static rx_Getter(mthis) native "SVGEllipseElement_rx_Getter";
  rx_Getter_(mthis) => rx_Getter(mthis);

  static ry_Getter(mthis) native "SVGEllipseElement_ry_Getter";
  ry_Getter_(mthis) => ry_Getter(mthis);

}

class BlinkSVGFEBlendElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEBlendElement();

  static height_Getter(mthis) native "SVGFEBlendElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEBlendElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static in2_Getter(mthis) native "SVGFEBlendElement_in2_Getter";
  in2_Getter_(mthis) => in2_Getter(mthis);

  static mode_Getter(mthis) native "SVGFEBlendElement_mode_Getter";
  mode_Getter_(mthis) => mode_Getter(mthis);

  static result_Getter(mthis) native "SVGFEBlendElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static width_Getter(mthis) native "SVGFEBlendElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEBlendElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEBlendElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEColorMatrixElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEColorMatrixElement();

  static height_Getter(mthis) native "SVGFEColorMatrixElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEColorMatrixElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static result_Getter(mthis) native "SVGFEColorMatrixElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static type_Getter(mthis) native "SVGFEColorMatrixElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static values_Getter(mthis) native "SVGFEColorMatrixElement_values_Getter";
  values_Getter_(mthis) => values_Getter(mthis);

  static width_Getter(mthis) native "SVGFEColorMatrixElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEColorMatrixElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEColorMatrixElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEComponentTransferElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEComponentTransferElement();

  static height_Getter(mthis) native "SVGFEComponentTransferElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEComponentTransferElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static result_Getter(mthis) native "SVGFEComponentTransferElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static width_Getter(mthis) native "SVGFEComponentTransferElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEComponentTransferElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEComponentTransferElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFECompositeElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFECompositeElement();

  static height_Getter(mthis) native "SVGFECompositeElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFECompositeElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static in2_Getter(mthis) native "SVGFECompositeElement_in2_Getter";
  in2_Getter_(mthis) => in2_Getter(mthis);

  static k1_Getter(mthis) native "SVGFECompositeElement_k1_Getter";
  k1_Getter_(mthis) => k1_Getter(mthis);

  static k2_Getter(mthis) native "SVGFECompositeElement_k2_Getter";
  k2_Getter_(mthis) => k2_Getter(mthis);

  static k3_Getter(mthis) native "SVGFECompositeElement_k3_Getter";
  k3_Getter_(mthis) => k3_Getter(mthis);

  static k4_Getter(mthis) native "SVGFECompositeElement_k4_Getter";
  k4_Getter_(mthis) => k4_Getter(mthis);

  static operator_Getter(mthis) native "SVGFECompositeElement_operator_Getter";
  operator_Getter_(mthis) => operator_Getter(mthis);

  static result_Getter(mthis) native "SVGFECompositeElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static width_Getter(mthis) native "SVGFECompositeElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFECompositeElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFECompositeElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEConvolveMatrixElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEConvolveMatrixElement();

  static bias_Getter(mthis) native "SVGFEConvolveMatrixElement_bias_Getter";
  bias_Getter_(mthis) => bias_Getter(mthis);

  static divisor_Getter(mthis) native "SVGFEConvolveMatrixElement_divisor_Getter";
  divisor_Getter_(mthis) => divisor_Getter(mthis);

  static edgeMode_Getter(mthis) native "SVGFEConvolveMatrixElement_edgeMode_Getter";
  edgeMode_Getter_(mthis) => edgeMode_Getter(mthis);

  static height_Getter(mthis) native "SVGFEConvolveMatrixElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEConvolveMatrixElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static kernelMatrix_Getter(mthis) native "SVGFEConvolveMatrixElement_kernelMatrix_Getter";
  kernelMatrix_Getter_(mthis) => kernelMatrix_Getter(mthis);

  static kernelUnitLengthX_Getter(mthis) native "SVGFEConvolveMatrixElement_kernelUnitLengthX_Getter";
  kernelUnitLengthX_Getter_(mthis) => kernelUnitLengthX_Getter(mthis);

  static kernelUnitLengthY_Getter(mthis) native "SVGFEConvolveMatrixElement_kernelUnitLengthY_Getter";
  kernelUnitLengthY_Getter_(mthis) => kernelUnitLengthY_Getter(mthis);

  static orderX_Getter(mthis) native "SVGFEConvolveMatrixElement_orderX_Getter";
  orderX_Getter_(mthis) => orderX_Getter(mthis);

  static orderY_Getter(mthis) native "SVGFEConvolveMatrixElement_orderY_Getter";
  orderY_Getter_(mthis) => orderY_Getter(mthis);

  static preserveAlpha_Getter(mthis) native "SVGFEConvolveMatrixElement_preserveAlpha_Getter";
  preserveAlpha_Getter_(mthis) => preserveAlpha_Getter(mthis);

  static result_Getter(mthis) native "SVGFEConvolveMatrixElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static targetX_Getter(mthis) native "SVGFEConvolveMatrixElement_targetX_Getter";
  targetX_Getter_(mthis) => targetX_Getter(mthis);

  static targetY_Getter(mthis) native "SVGFEConvolveMatrixElement_targetY_Getter";
  targetY_Getter_(mthis) => targetY_Getter(mthis);

  static width_Getter(mthis) native "SVGFEConvolveMatrixElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEConvolveMatrixElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEConvolveMatrixElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEDiffuseLightingElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDiffuseLightingElement();

  static diffuseConstant_Getter(mthis) native "SVGFEDiffuseLightingElement_diffuseConstant_Getter";
  diffuseConstant_Getter_(mthis) => diffuseConstant_Getter(mthis);

  static height_Getter(mthis) native "SVGFEDiffuseLightingElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEDiffuseLightingElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static kernelUnitLengthX_Getter(mthis) native "SVGFEDiffuseLightingElement_kernelUnitLengthX_Getter";
  kernelUnitLengthX_Getter_(mthis) => kernelUnitLengthX_Getter(mthis);

  static kernelUnitLengthY_Getter(mthis) native "SVGFEDiffuseLightingElement_kernelUnitLengthY_Getter";
  kernelUnitLengthY_Getter_(mthis) => kernelUnitLengthY_Getter(mthis);

  static result_Getter(mthis) native "SVGFEDiffuseLightingElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static surfaceScale_Getter(mthis) native "SVGFEDiffuseLightingElement_surfaceScale_Getter";
  surfaceScale_Getter_(mthis) => surfaceScale_Getter(mthis);

  static width_Getter(mthis) native "SVGFEDiffuseLightingElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEDiffuseLightingElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEDiffuseLightingElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEDisplacementMapElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDisplacementMapElement();

  static height_Getter(mthis) native "SVGFEDisplacementMapElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEDisplacementMapElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static in2_Getter(mthis) native "SVGFEDisplacementMapElement_in2_Getter";
  in2_Getter_(mthis) => in2_Getter(mthis);

  static result_Getter(mthis) native "SVGFEDisplacementMapElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static scale_Getter(mthis) native "SVGFEDisplacementMapElement_scale_Getter";
  scale_Getter_(mthis) => scale_Getter(mthis);

  static width_Getter(mthis) native "SVGFEDisplacementMapElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static xChannelSelector_Getter(mthis) native "SVGFEDisplacementMapElement_xChannelSelector_Getter";
  xChannelSelector_Getter_(mthis) => xChannelSelector_Getter(mthis);

  static x_Getter(mthis) native "SVGFEDisplacementMapElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static yChannelSelector_Getter(mthis) native "SVGFEDisplacementMapElement_yChannelSelector_Getter";
  yChannelSelector_Getter_(mthis) => yChannelSelector_Getter(mthis);

  static y_Getter(mthis) native "SVGFEDisplacementMapElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEDistantLightElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDistantLightElement();

  static azimuth_Getter(mthis) native "SVGFEDistantLightElement_azimuth_Getter";
  azimuth_Getter_(mthis) => azimuth_Getter(mthis);

  static elevation_Getter(mthis) native "SVGFEDistantLightElement_elevation_Getter";
  elevation_Getter_(mthis) => elevation_Getter(mthis);

}

class BlinkSVGFEDropShadowElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEDropShadowElement();

  static dx_Getter(mthis) native "SVGFEDropShadowElement_dx_Getter";
  dx_Getter_(mthis) => dx_Getter(mthis);

  static dy_Getter(mthis) native "SVGFEDropShadowElement_dy_Getter";
  dy_Getter_(mthis) => dy_Getter(mthis);

  static height_Getter(mthis) native "SVGFEDropShadowElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEDropShadowElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static result_Getter(mthis) native "SVGFEDropShadowElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static setStdDeviation_Callback_0(mthis) native "SVGFEDropShadowElement_setStdDeviation_Callback";
  setStdDeviation_Callback_0_(mthis) => setStdDeviation_Callback_0(mthis);

  static setStdDeviation_Callback_1(mthis, __arg_0) native "SVGFEDropShadowElement_setStdDeviation_Callback";
  setStdDeviation_Callback_1_(mthis, __arg_0) => setStdDeviation_Callback_1(mthis, __arg_0);

  static setStdDeviation_Callback_2(mthis, __arg_0, __arg_1) native "SVGFEDropShadowElement_setStdDeviation_Callback";
  setStdDeviation_Callback_2_(mthis, __arg_0, __arg_1) => setStdDeviation_Callback_2(mthis, __arg_0, __arg_1);

  static setStdDeviation_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGFEDropShadowElement_setStdDeviation_Callback";
  setStdDeviation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setStdDeviation_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setStdDeviation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGFEDropShadowElement_setStdDeviation_Callback";
  setStdDeviation_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setStdDeviation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static stdDeviationX_Getter(mthis) native "SVGFEDropShadowElement_stdDeviationX_Getter";
  stdDeviationX_Getter_(mthis) => stdDeviationX_Getter(mthis);

  static stdDeviationY_Getter(mthis) native "SVGFEDropShadowElement_stdDeviationY_Getter";
  stdDeviationY_Getter_(mthis) => stdDeviationY_Getter(mthis);

  static width_Getter(mthis) native "SVGFEDropShadowElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEDropShadowElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEDropShadowElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEFloodElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEFloodElement();

  static height_Getter(mthis) native "SVGFEFloodElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static result_Getter(mthis) native "SVGFEFloodElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static width_Getter(mthis) native "SVGFEFloodElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEFloodElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEFloodElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEFuncAElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncAElement();

}

class BlinkSVGFEFuncBElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncBElement();

}

class BlinkSVGFEFuncGElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncGElement();

}

class BlinkSVGFEFuncRElement extends BlinkSVGComponentTransferFunctionElement {
  static final instance = new BlinkSVGFEFuncRElement();

}

class BlinkSVGFEGaussianBlurElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEGaussianBlurElement();

  static height_Getter(mthis) native "SVGFEGaussianBlurElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEGaussianBlurElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static result_Getter(mthis) native "SVGFEGaussianBlurElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static setStdDeviation_Callback_0(mthis) native "SVGFEGaussianBlurElement_setStdDeviation_Callback";
  setStdDeviation_Callback_0_(mthis) => setStdDeviation_Callback_0(mthis);

  static setStdDeviation_Callback_1(mthis, __arg_0) native "SVGFEGaussianBlurElement_setStdDeviation_Callback";
  setStdDeviation_Callback_1_(mthis, __arg_0) => setStdDeviation_Callback_1(mthis, __arg_0);

  static setStdDeviation_Callback_2(mthis, __arg_0, __arg_1) native "SVGFEGaussianBlurElement_setStdDeviation_Callback";
  setStdDeviation_Callback_2_(mthis, __arg_0, __arg_1) => setStdDeviation_Callback_2(mthis, __arg_0, __arg_1);

  static setStdDeviation_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGFEGaussianBlurElement_setStdDeviation_Callback";
  setStdDeviation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setStdDeviation_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setStdDeviation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGFEGaussianBlurElement_setStdDeviation_Callback";
  setStdDeviation_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setStdDeviation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static stdDeviationX_Getter(mthis) native "SVGFEGaussianBlurElement_stdDeviationX_Getter";
  stdDeviationX_Getter_(mthis) => stdDeviationX_Getter(mthis);

  static stdDeviationY_Getter(mthis) native "SVGFEGaussianBlurElement_stdDeviationY_Getter";
  stdDeviationY_Getter_(mthis) => stdDeviationY_Getter(mthis);

  static width_Getter(mthis) native "SVGFEGaussianBlurElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEGaussianBlurElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEGaussianBlurElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEImageElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEImageElement();

  static height_Getter(mthis) native "SVGFEImageElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static href_Getter(mthis) native "SVGFEImageElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static preserveAspectRatio_Getter(mthis) native "SVGFEImageElement_preserveAspectRatio_Getter";
  preserveAspectRatio_Getter_(mthis) => preserveAspectRatio_Getter(mthis);

  static result_Getter(mthis) native "SVGFEImageElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static width_Getter(mthis) native "SVGFEImageElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEImageElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEImageElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEMergeElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEMergeElement();

  static height_Getter(mthis) native "SVGFEMergeElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static result_Getter(mthis) native "SVGFEMergeElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static width_Getter(mthis) native "SVGFEMergeElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEMergeElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEMergeElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEMergeNodeElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEMergeNodeElement();

  static in1_Getter(mthis) native "SVGFEMergeNodeElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

}

class BlinkSVGFEMorphologyElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEMorphologyElement();

  static height_Getter(mthis) native "SVGFEMorphologyElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEMorphologyElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static operator_Getter(mthis) native "SVGFEMorphologyElement_operator_Getter";
  operator_Getter_(mthis) => operator_Getter(mthis);

  static radiusX_Getter(mthis) native "SVGFEMorphologyElement_radiusX_Getter";
  radiusX_Getter_(mthis) => radiusX_Getter(mthis);

  static radiusY_Getter(mthis) native "SVGFEMorphologyElement_radiusY_Getter";
  radiusY_Getter_(mthis) => radiusY_Getter(mthis);

  static result_Getter(mthis) native "SVGFEMorphologyElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static width_Getter(mthis) native "SVGFEMorphologyElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEMorphologyElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEMorphologyElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEOffsetElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEOffsetElement();

  static dx_Getter(mthis) native "SVGFEOffsetElement_dx_Getter";
  dx_Getter_(mthis) => dx_Getter(mthis);

  static dy_Getter(mthis) native "SVGFEOffsetElement_dy_Getter";
  dy_Getter_(mthis) => dy_Getter(mthis);

  static height_Getter(mthis) native "SVGFEOffsetElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFEOffsetElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static result_Getter(mthis) native "SVGFEOffsetElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static width_Getter(mthis) native "SVGFEOffsetElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFEOffsetElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEOffsetElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFEPointLightElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFEPointLightElement();

  static x_Getter(mthis) native "SVGFEPointLightElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFEPointLightElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static z_Getter(mthis) native "SVGFEPointLightElement_z_Getter";
  z_Getter_(mthis) => z_Getter(mthis);

}

class BlinkSVGFESpecularLightingElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFESpecularLightingElement();

  static height_Getter(mthis) native "SVGFESpecularLightingElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFESpecularLightingElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static result_Getter(mthis) native "SVGFESpecularLightingElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static specularConstant_Getter(mthis) native "SVGFESpecularLightingElement_specularConstant_Getter";
  specularConstant_Getter_(mthis) => specularConstant_Getter(mthis);

  static specularExponent_Getter(mthis) native "SVGFESpecularLightingElement_specularExponent_Getter";
  specularExponent_Getter_(mthis) => specularExponent_Getter(mthis);

  static surfaceScale_Getter(mthis) native "SVGFESpecularLightingElement_surfaceScale_Getter";
  surfaceScale_Getter_(mthis) => surfaceScale_Getter(mthis);

  static width_Getter(mthis) native "SVGFESpecularLightingElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFESpecularLightingElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFESpecularLightingElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFESpotLightElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFESpotLightElement();

  static limitingConeAngle_Getter(mthis) native "SVGFESpotLightElement_limitingConeAngle_Getter";
  limitingConeAngle_Getter_(mthis) => limitingConeAngle_Getter(mthis);

  static pointsAtX_Getter(mthis) native "SVGFESpotLightElement_pointsAtX_Getter";
  pointsAtX_Getter_(mthis) => pointsAtX_Getter(mthis);

  static pointsAtY_Getter(mthis) native "SVGFESpotLightElement_pointsAtY_Getter";
  pointsAtY_Getter_(mthis) => pointsAtY_Getter(mthis);

  static pointsAtZ_Getter(mthis) native "SVGFESpotLightElement_pointsAtZ_Getter";
  pointsAtZ_Getter_(mthis) => pointsAtZ_Getter(mthis);

  static specularExponent_Getter(mthis) native "SVGFESpotLightElement_specularExponent_Getter";
  specularExponent_Getter_(mthis) => specularExponent_Getter(mthis);

  static x_Getter(mthis) native "SVGFESpotLightElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFESpotLightElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static z_Getter(mthis) native "SVGFESpotLightElement_z_Getter";
  z_Getter_(mthis) => z_Getter(mthis);

}

class BlinkSVGFETileElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFETileElement();

  static height_Getter(mthis) native "SVGFETileElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static in1_Getter(mthis) native "SVGFETileElement_in1_Getter";
  in1_Getter_(mthis) => in1_Getter(mthis);

  static result_Getter(mthis) native "SVGFETileElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static width_Getter(mthis) native "SVGFETileElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFETileElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFETileElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFETurbulenceElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFETurbulenceElement();

  static baseFrequencyX_Getter(mthis) native "SVGFETurbulenceElement_baseFrequencyX_Getter";
  baseFrequencyX_Getter_(mthis) => baseFrequencyX_Getter(mthis);

  static baseFrequencyY_Getter(mthis) native "SVGFETurbulenceElement_baseFrequencyY_Getter";
  baseFrequencyY_Getter_(mthis) => baseFrequencyY_Getter(mthis);

  static height_Getter(mthis) native "SVGFETurbulenceElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static numOctaves_Getter(mthis) native "SVGFETurbulenceElement_numOctaves_Getter";
  numOctaves_Getter_(mthis) => numOctaves_Getter(mthis);

  static result_Getter(mthis) native "SVGFETurbulenceElement_result_Getter";
  result_Getter_(mthis) => result_Getter(mthis);

  static seed_Getter(mthis) native "SVGFETurbulenceElement_seed_Getter";
  seed_Getter_(mthis) => seed_Getter(mthis);

  static stitchTiles_Getter(mthis) native "SVGFETurbulenceElement_stitchTiles_Getter";
  stitchTiles_Getter_(mthis) => stitchTiles_Getter(mthis);

  static type_Getter(mthis) native "SVGFETurbulenceElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static width_Getter(mthis) native "SVGFETurbulenceElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFETurbulenceElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFETurbulenceElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFilterElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFilterElement();

  static filterResX_Getter(mthis) native "SVGFilterElement_filterResX_Getter";
  filterResX_Getter_(mthis) => filterResX_Getter(mthis);

  static filterResY_Getter(mthis) native "SVGFilterElement_filterResY_Getter";
  filterResY_Getter_(mthis) => filterResY_Getter(mthis);

  static filterUnits_Getter(mthis) native "SVGFilterElement_filterUnits_Getter";
  filterUnits_Getter_(mthis) => filterUnits_Getter(mthis);

  static height_Getter(mthis) native "SVGFilterElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static href_Getter(mthis) native "SVGFilterElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static primitiveUnits_Getter(mthis) native "SVGFilterElement_primitiveUnits_Getter";
  primitiveUnits_Getter_(mthis) => primitiveUnits_Getter(mthis);

  static setFilterRes_Callback_0(mthis) native "SVGFilterElement_setFilterRes_Callback";
  setFilterRes_Callback_0_(mthis) => setFilterRes_Callback_0(mthis);

  static setFilterRes_Callback_1(mthis, __arg_0) native "SVGFilterElement_setFilterRes_Callback";
  setFilterRes_Callback_1_(mthis, __arg_0) => setFilterRes_Callback_1(mthis, __arg_0);

  static setFilterRes_Callback_2(mthis, __arg_0, __arg_1) native "SVGFilterElement_setFilterRes_Callback";
  setFilterRes_Callback_2_(mthis, __arg_0, __arg_1) => setFilterRes_Callback_2(mthis, __arg_0, __arg_1);

  static setFilterRes_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGFilterElement_setFilterRes_Callback";
  setFilterRes_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setFilterRes_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setFilterRes_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGFilterElement_setFilterRes_Callback";
  setFilterRes_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setFilterRes_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static width_Getter(mthis) native "SVGFilterElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGFilterElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGFilterElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGFontElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFontElement();

}

class BlinkSVGFontFaceElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFontFaceElement();

}

class BlinkSVGFontFaceFormatElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFontFaceFormatElement();

}

class BlinkSVGFontFaceNameElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFontFaceNameElement();

}

class BlinkSVGFontFaceSrcElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFontFaceSrcElement();

}

class BlinkSVGFontFaceUriElement extends BlinkSVGElement {
  static final instance = new BlinkSVGFontFaceUriElement();

}

class BlinkSVGForeignObjectElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGForeignObjectElement();

  static height_Getter(mthis) native "SVGForeignObjectElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static width_Getter(mthis) native "SVGForeignObjectElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGForeignObjectElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGForeignObjectElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGGElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGGElement();

}

class BlinkSVGGeometryElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGGeometryElement();

  static isPointInFill_Callback_0(mthis) native "SVGGeometryElement_isPointInFill_Callback";
  isPointInFill_Callback_0_(mthis) => isPointInFill_Callback_0(mthis);

  static isPointInFill_Callback_1(mthis, __arg_0) native "SVGGeometryElement_isPointInFill_Callback";
  isPointInFill_Callback_1_(mthis, __arg_0) => isPointInFill_Callback_1(mthis, __arg_0);

  static isPointInFill_Callback_2(mthis, __arg_0, __arg_1) native "SVGGeometryElement_isPointInFill_Callback";
  isPointInFill_Callback_2_(mthis, __arg_0, __arg_1) => isPointInFill_Callback_2(mthis, __arg_0, __arg_1);

  static isPointInFill_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGGeometryElement_isPointInFill_Callback";
  isPointInFill_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isPointInFill_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isPointInStroke_Callback_0(mthis) native "SVGGeometryElement_isPointInStroke_Callback";
  isPointInStroke_Callback_0_(mthis) => isPointInStroke_Callback_0(mthis);

  static isPointInStroke_Callback_1(mthis, __arg_0) native "SVGGeometryElement_isPointInStroke_Callback";
  isPointInStroke_Callback_1_(mthis, __arg_0) => isPointInStroke_Callback_1(mthis, __arg_0);

  static isPointInStroke_Callback_2(mthis, __arg_0, __arg_1) native "SVGGeometryElement_isPointInStroke_Callback";
  isPointInStroke_Callback_2_(mthis, __arg_0, __arg_1) => isPointInStroke_Callback_2(mthis, __arg_0, __arg_1);

  static isPointInStroke_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGGeometryElement_isPointInStroke_Callback";
  isPointInStroke_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isPointInStroke_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkSVGGlyphElement extends BlinkSVGElement {
  static final instance = new BlinkSVGGlyphElement();

}

class BlinkSVGGlyphRefElement extends BlinkSVGElement {
  static final instance = new BlinkSVGGlyphRefElement();

  static dx_Getter(mthis) native "SVGGlyphRefElement_dx_Getter";
  dx_Getter_(mthis) => dx_Getter(mthis);

  static dx_Setter(mthis, __arg_0) native "SVGGlyphRefElement_dx_Setter";
  dx_Setter_(mthis, __arg_0) => dx_Setter(mthis, __arg_0);

  static dy_Getter(mthis) native "SVGGlyphRefElement_dy_Getter";
  dy_Getter_(mthis) => dy_Getter(mthis);

  static dy_Setter(mthis, __arg_0) native "SVGGlyphRefElement_dy_Setter";
  dy_Setter_(mthis, __arg_0) => dy_Setter(mthis, __arg_0);

  static format_Getter(mthis) native "SVGGlyphRefElement_format_Getter";
  format_Getter_(mthis) => format_Getter(mthis);

  static format_Setter(mthis, __arg_0) native "SVGGlyphRefElement_format_Setter";
  format_Setter_(mthis, __arg_0) => format_Setter(mthis, __arg_0);

  static glyphRef_Getter(mthis) native "SVGGlyphRefElement_glyphRef_Getter";
  glyphRef_Getter_(mthis) => glyphRef_Getter(mthis);

  static glyphRef_Setter(mthis, __arg_0) native "SVGGlyphRefElement_glyphRef_Setter";
  glyphRef_Setter_(mthis, __arg_0) => glyphRef_Setter(mthis, __arg_0);

  static href_Getter(mthis) native "SVGGlyphRefElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static x_Getter(mthis) native "SVGGlyphRefElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGGlyphRefElement_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGGlyphRefElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGGlyphRefElement_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGGradientElement extends BlinkSVGElement {
  static final instance = new BlinkSVGGradientElement();

  static gradientTransform_Getter(mthis) native "SVGGradientElement_gradientTransform_Getter";
  gradientTransform_Getter_(mthis) => gradientTransform_Getter(mthis);

  static gradientUnits_Getter(mthis) native "SVGGradientElement_gradientUnits_Getter";
  gradientUnits_Getter_(mthis) => gradientUnits_Getter(mthis);

  static href_Getter(mthis) native "SVGGradientElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static spreadMethod_Getter(mthis) native "SVGGradientElement_spreadMethod_Getter";
  spreadMethod_Getter_(mthis) => spreadMethod_Getter(mthis);

}

class BlinkSVGGraphicsElement extends BlinkSVGElement {
  static final instance = new BlinkSVGGraphicsElement();

  static farthestViewportElement_Getter(mthis) native "SVGGraphicsElement_farthestViewportElement_Getter";
  farthestViewportElement_Getter_(mthis) => farthestViewportElement_Getter(mthis);

  static getBBox_Callback_0(mthis) native "SVGGraphicsElement_getBBox_Callback";
  getBBox_Callback_0_(mthis) => getBBox_Callback_0(mthis);

  static getBBox_Callback_1(mthis, __arg_0) native "SVGGraphicsElement_getBBox_Callback";
  getBBox_Callback_1_(mthis, __arg_0) => getBBox_Callback_1(mthis, __arg_0);

  static getBBox_Callback_2(mthis, __arg_0, __arg_1) native "SVGGraphicsElement_getBBox_Callback";
  getBBox_Callback_2_(mthis, __arg_0, __arg_1) => getBBox_Callback_2(mthis, __arg_0, __arg_1);

  static getCTM_Callback_0(mthis) native "SVGGraphicsElement_getCTM_Callback";
  getCTM_Callback_0_(mthis) => getCTM_Callback_0(mthis);

  static getCTM_Callback_1(mthis, __arg_0) native "SVGGraphicsElement_getCTM_Callback";
  getCTM_Callback_1_(mthis, __arg_0) => getCTM_Callback_1(mthis, __arg_0);

  static getCTM_Callback_2(mthis, __arg_0, __arg_1) native "SVGGraphicsElement_getCTM_Callback";
  getCTM_Callback_2_(mthis, __arg_0, __arg_1) => getCTM_Callback_2(mthis, __arg_0, __arg_1);

  static getScreenCTM_Callback_0(mthis) native "SVGGraphicsElement_getScreenCTM_Callback";
  getScreenCTM_Callback_0_(mthis) => getScreenCTM_Callback_0(mthis);

  static getScreenCTM_Callback_1(mthis, __arg_0) native "SVGGraphicsElement_getScreenCTM_Callback";
  getScreenCTM_Callback_1_(mthis, __arg_0) => getScreenCTM_Callback_1(mthis, __arg_0);

  static getScreenCTM_Callback_2(mthis, __arg_0, __arg_1) native "SVGGraphicsElement_getScreenCTM_Callback";
  getScreenCTM_Callback_2_(mthis, __arg_0, __arg_1) => getScreenCTM_Callback_2(mthis, __arg_0, __arg_1);

  static getTransformToElement_Callback_0(mthis) native "SVGGraphicsElement_getTransformToElement_Callback";
  getTransformToElement_Callback_0_(mthis) => getTransformToElement_Callback_0(mthis);

  static getTransformToElement_Callback_1(mthis, __arg_0) native "SVGGraphicsElement_getTransformToElement_Callback";
  getTransformToElement_Callback_1_(mthis, __arg_0) => getTransformToElement_Callback_1(mthis, __arg_0);

  static getTransformToElement_Callback_2(mthis, __arg_0, __arg_1) native "SVGGraphicsElement_getTransformToElement_Callback";
  getTransformToElement_Callback_2_(mthis, __arg_0, __arg_1) => getTransformToElement_Callback_2(mthis, __arg_0, __arg_1);

  static getTransformToElement_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGGraphicsElement_getTransformToElement_Callback";
  getTransformToElement_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getTransformToElement_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static hasExtension_Callback_0(mthis) native "SVGGraphicsElement_hasExtension_Callback";
  hasExtension_Callback_0_(mthis) => hasExtension_Callback_0(mthis);

  static hasExtension_Callback_1(mthis, __arg_0) native "SVGGraphicsElement_hasExtension_Callback";
  hasExtension_Callback_1_(mthis, __arg_0) => hasExtension_Callback_1(mthis, __arg_0);

  static hasExtension_Callback_2(mthis, __arg_0, __arg_1) native "SVGGraphicsElement_hasExtension_Callback";
  hasExtension_Callback_2_(mthis, __arg_0, __arg_1) => hasExtension_Callback_2(mthis, __arg_0, __arg_1);

  static hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGGraphicsElement_hasExtension_Callback";
  hasExtension_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static nearestViewportElement_Getter(mthis) native "SVGGraphicsElement_nearestViewportElement_Getter";
  nearestViewportElement_Getter_(mthis) => nearestViewportElement_Getter(mthis);

  static requiredExtensions_Getter(mthis) native "SVGGraphicsElement_requiredExtensions_Getter";
  requiredExtensions_Getter_(mthis) => requiredExtensions_Getter(mthis);

  static requiredFeatures_Getter(mthis) native "SVGGraphicsElement_requiredFeatures_Getter";
  requiredFeatures_Getter_(mthis) => requiredFeatures_Getter(mthis);

  static systemLanguage_Getter(mthis) native "SVGGraphicsElement_systemLanguage_Getter";
  systemLanguage_Getter_(mthis) => systemLanguage_Getter(mthis);

  static transform_Getter(mthis) native "SVGGraphicsElement_transform_Getter";
  transform_Getter_(mthis) => transform_Getter(mthis);

}

class BlinkSVGHKernElement extends BlinkSVGElement {
  static final instance = new BlinkSVGHKernElement();

}

class BlinkSVGImageElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGImageElement();

  static height_Getter(mthis) native "SVGImageElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static href_Getter(mthis) native "SVGImageElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static preserveAspectRatio_Getter(mthis) native "SVGImageElement_preserveAspectRatio_Getter";
  preserveAspectRatio_Getter_(mthis) => preserveAspectRatio_Getter(mthis);

  static width_Getter(mthis) native "SVGImageElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGImageElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGImageElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGLength {
  static final instance = new BlinkSVGLength();

  static convertToSpecifiedUnits_Callback_0(mthis) native "SVGLength_convertToSpecifiedUnits_Callback";
  convertToSpecifiedUnits_Callback_0_(mthis) => convertToSpecifiedUnits_Callback_0(mthis);

  static convertToSpecifiedUnits_Callback_1(mthis, __arg_0) native "SVGLength_convertToSpecifiedUnits_Callback";
  convertToSpecifiedUnits_Callback_1_(mthis, __arg_0) => convertToSpecifiedUnits_Callback_1(mthis, __arg_0);

  static convertToSpecifiedUnits_Callback_2(mthis, __arg_0, __arg_1) native "SVGLength_convertToSpecifiedUnits_Callback";
  convertToSpecifiedUnits_Callback_2_(mthis, __arg_0, __arg_1) => convertToSpecifiedUnits_Callback_2(mthis, __arg_0, __arg_1);

  static convertToSpecifiedUnits_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGLength_convertToSpecifiedUnits_Callback";
  convertToSpecifiedUnits_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => convertToSpecifiedUnits_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static newValueSpecifiedUnits_Callback_0(mthis) native "SVGLength_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_0_(mthis) => newValueSpecifiedUnits_Callback_0(mthis);

  static newValueSpecifiedUnits_Callback_1(mthis, __arg_0) native "SVGLength_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_1_(mthis, __arg_0) => newValueSpecifiedUnits_Callback_1(mthis, __arg_0);

  static newValueSpecifiedUnits_Callback_2(mthis, __arg_0, __arg_1) native "SVGLength_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_2_(mthis, __arg_0, __arg_1) => newValueSpecifiedUnits_Callback_2(mthis, __arg_0, __arg_1);

  static newValueSpecifiedUnits_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGLength_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => newValueSpecifiedUnits_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static newValueSpecifiedUnits_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGLength_newValueSpecifiedUnits_Callback";
  newValueSpecifiedUnits_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => newValueSpecifiedUnits_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static unitType_Getter(mthis) native "SVGLength_unitType_Getter";
  unitType_Getter_(mthis) => unitType_Getter(mthis);

  static valueAsString_Getter(mthis) native "SVGLength_valueAsString_Getter";
  valueAsString_Getter_(mthis) => valueAsString_Getter(mthis);

  static valueAsString_Setter(mthis, __arg_0) native "SVGLength_valueAsString_Setter";
  valueAsString_Setter_(mthis, __arg_0) => valueAsString_Setter(mthis, __arg_0);

  static valueInSpecifiedUnits_Getter(mthis) native "SVGLength_valueInSpecifiedUnits_Getter";
  valueInSpecifiedUnits_Getter_(mthis) => valueInSpecifiedUnits_Getter(mthis);

  static valueInSpecifiedUnits_Setter(mthis, __arg_0) native "SVGLength_valueInSpecifiedUnits_Setter";
  valueInSpecifiedUnits_Setter_(mthis, __arg_0) => valueInSpecifiedUnits_Setter(mthis, __arg_0);

  static value_Getter(mthis) native "SVGLength_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "SVGLength_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkSVGLengthList {
  static final instance = new BlinkSVGLengthList();

  static $__getter___Callback_1(mthis, __arg_0) native "SVGLengthList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "SVGLengthList___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_0(mthis) native "SVGLengthList_appendItem_Callback";
  appendItem_Callback_0_(mthis) => appendItem_Callback_0(mthis);

  static appendItem_Callback_1(mthis, __arg_0) native "SVGLengthList_appendItem_Callback";
  appendItem_Callback_1_(mthis, __arg_0) => appendItem_Callback_1(mthis, __arg_0);

  static appendItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGLengthList_appendItem_Callback";
  appendItem_Callback_2_(mthis, __arg_0, __arg_1) => appendItem_Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGLengthList_appendItem_Callback";
  appendItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clear_Callback_0(mthis) native "SVGLengthList_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "SVGLengthList_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "SVGLengthList_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_0(mthis) native "SVGLengthList_getItem_Callback";
  getItem_Callback_0_(mthis) => getItem_Callback_0(mthis);

  static getItem_Callback_1(mthis, __arg_0) native "SVGLengthList_getItem_Callback";
  getItem_Callback_1_(mthis, __arg_0) => getItem_Callback_1(mthis, __arg_0);

  static getItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGLengthList_getItem_Callback";
  getItem_Callback_2_(mthis, __arg_0, __arg_1) => getItem_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGLengthList_getItem_Callback";
  getItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initialize_Callback_0(mthis) native "SVGLengthList_initialize_Callback";
  initialize_Callback_0_(mthis) => initialize_Callback_0(mthis);

  static initialize_Callback_1(mthis, __arg_0) native "SVGLengthList_initialize_Callback";
  initialize_Callback_1_(mthis, __arg_0) => initialize_Callback_1(mthis, __arg_0);

  static initialize_Callback_2(mthis, __arg_0, __arg_1) native "SVGLengthList_initialize_Callback";
  initialize_Callback_2_(mthis, __arg_0, __arg_1) => initialize_Callback_2(mthis, __arg_0, __arg_1);

  static initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGLengthList_initialize_Callback";
  initialize_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_0(mthis) native "SVGLengthList_insertItemBefore_Callback";
  insertItemBefore_Callback_0_(mthis) => insertItemBefore_Callback_0(mthis);

  static insertItemBefore_Callback_1(mthis, __arg_0) native "SVGLengthList_insertItemBefore_Callback";
  insertItemBefore_Callback_1_(mthis, __arg_0) => insertItemBefore_Callback_1(mthis, __arg_0);

  static insertItemBefore_Callback_2(mthis, __arg_0, __arg_1) native "SVGLengthList_insertItemBefore_Callback";
  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => insertItemBefore_Callback_2(mthis, __arg_0, __arg_1);

  static insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGLengthList_insertItemBefore_Callback";
  insertItemBefore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGLengthList_insertItemBefore_Callback";
  insertItemBefore_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static length_Getter(mthis) native "SVGLengthList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static numberOfItems_Getter(mthis) native "SVGLengthList_numberOfItems_Getter";
  numberOfItems_Getter_(mthis) => numberOfItems_Getter(mthis);

  static removeItem_Callback_0(mthis) native "SVGLengthList_removeItem_Callback";
  removeItem_Callback_0_(mthis) => removeItem_Callback_0(mthis);

  static removeItem_Callback_1(mthis, __arg_0) native "SVGLengthList_removeItem_Callback";
  removeItem_Callback_1_(mthis, __arg_0) => removeItem_Callback_1(mthis, __arg_0);

  static removeItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGLengthList_removeItem_Callback";
  removeItem_Callback_2_(mthis, __arg_0, __arg_1) => removeItem_Callback_2(mthis, __arg_0, __arg_1);

  static removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGLengthList_removeItem_Callback";
  removeItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_0(mthis) native "SVGLengthList_replaceItem_Callback";
  replaceItem_Callback_0_(mthis) => replaceItem_Callback_0(mthis);

  static replaceItem_Callback_1(mthis, __arg_0) native "SVGLengthList_replaceItem_Callback";
  replaceItem_Callback_1_(mthis, __arg_0) => replaceItem_Callback_1(mthis, __arg_0);

  static replaceItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGLengthList_replaceItem_Callback";
  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => replaceItem_Callback_2(mthis, __arg_0, __arg_1);

  static replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGLengthList_replaceItem_Callback";
  replaceItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGLengthList_replaceItem_Callback";
  replaceItem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkSVGLineElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGLineElement();

  static x1_Getter(mthis) native "SVGLineElement_x1_Getter";
  x1_Getter_(mthis) => x1_Getter(mthis);

  static x2_Getter(mthis) native "SVGLineElement_x2_Getter";
  x2_Getter_(mthis) => x2_Getter(mthis);

  static y1_Getter(mthis) native "SVGLineElement_y1_Getter";
  y1_Getter_(mthis) => y1_Getter(mthis);

  static y2_Getter(mthis) native "SVGLineElement_y2_Getter";
  y2_Getter_(mthis) => y2_Getter(mthis);

}

class BlinkSVGLinearGradientElement extends BlinkSVGGradientElement {
  static final instance = new BlinkSVGLinearGradientElement();

  static x1_Getter(mthis) native "SVGLinearGradientElement_x1_Getter";
  x1_Getter_(mthis) => x1_Getter(mthis);

  static x2_Getter(mthis) native "SVGLinearGradientElement_x2_Getter";
  x2_Getter_(mthis) => x2_Getter(mthis);

  static y1_Getter(mthis) native "SVGLinearGradientElement_y1_Getter";
  y1_Getter_(mthis) => y1_Getter(mthis);

  static y2_Getter(mthis) native "SVGLinearGradientElement_y2_Getter";
  y2_Getter_(mthis) => y2_Getter(mthis);

}

class BlinkSVGMPathElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMPathElement();

  static href_Getter(mthis) native "SVGMPathElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

}

class BlinkSVGMarkerElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMarkerElement();

  static markerHeight_Getter(mthis) native "SVGMarkerElement_markerHeight_Getter";
  markerHeight_Getter_(mthis) => markerHeight_Getter(mthis);

  static markerUnits_Getter(mthis) native "SVGMarkerElement_markerUnits_Getter";
  markerUnits_Getter_(mthis) => markerUnits_Getter(mthis);

  static markerWidth_Getter(mthis) native "SVGMarkerElement_markerWidth_Getter";
  markerWidth_Getter_(mthis) => markerWidth_Getter(mthis);

  static orientAngle_Getter(mthis) native "SVGMarkerElement_orientAngle_Getter";
  orientAngle_Getter_(mthis) => orientAngle_Getter(mthis);

  static orientType_Getter(mthis) native "SVGMarkerElement_orientType_Getter";
  orientType_Getter_(mthis) => orientType_Getter(mthis);

  static preserveAspectRatio_Getter(mthis) native "SVGMarkerElement_preserveAspectRatio_Getter";
  preserveAspectRatio_Getter_(mthis) => preserveAspectRatio_Getter(mthis);

  static refX_Getter(mthis) native "SVGMarkerElement_refX_Getter";
  refX_Getter_(mthis) => refX_Getter(mthis);

  static refY_Getter(mthis) native "SVGMarkerElement_refY_Getter";
  refY_Getter_(mthis) => refY_Getter(mthis);

  static setOrientToAngle_Callback_0(mthis) native "SVGMarkerElement_setOrientToAngle_Callback";
  setOrientToAngle_Callback_0_(mthis) => setOrientToAngle_Callback_0(mthis);

  static setOrientToAngle_Callback_1(mthis, __arg_0) native "SVGMarkerElement_setOrientToAngle_Callback";
  setOrientToAngle_Callback_1_(mthis, __arg_0) => setOrientToAngle_Callback_1(mthis, __arg_0);

  static setOrientToAngle_Callback_2(mthis, __arg_0, __arg_1) native "SVGMarkerElement_setOrientToAngle_Callback";
  setOrientToAngle_Callback_2_(mthis, __arg_0, __arg_1) => setOrientToAngle_Callback_2(mthis, __arg_0, __arg_1);

  static setOrientToAngle_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMarkerElement_setOrientToAngle_Callback";
  setOrientToAngle_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setOrientToAngle_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setOrientToAuto_Callback_0(mthis) native "SVGMarkerElement_setOrientToAuto_Callback";
  setOrientToAuto_Callback_0_(mthis) => setOrientToAuto_Callback_0(mthis);

  static setOrientToAuto_Callback_1(mthis, __arg_0) native "SVGMarkerElement_setOrientToAuto_Callback";
  setOrientToAuto_Callback_1_(mthis, __arg_0) => setOrientToAuto_Callback_1(mthis, __arg_0);

  static setOrientToAuto_Callback_2(mthis, __arg_0, __arg_1) native "SVGMarkerElement_setOrientToAuto_Callback";
  setOrientToAuto_Callback_2_(mthis, __arg_0, __arg_1) => setOrientToAuto_Callback_2(mthis, __arg_0, __arg_1);

  static viewBox_Getter(mthis) native "SVGMarkerElement_viewBox_Getter";
  viewBox_Getter_(mthis) => viewBox_Getter(mthis);

}

class BlinkSVGMaskElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMaskElement();

  static hasExtension_Callback_0(mthis) native "SVGMaskElement_hasExtension_Callback";
  hasExtension_Callback_0_(mthis) => hasExtension_Callback_0(mthis);

  static hasExtension_Callback_1(mthis, __arg_0) native "SVGMaskElement_hasExtension_Callback";
  hasExtension_Callback_1_(mthis, __arg_0) => hasExtension_Callback_1(mthis, __arg_0);

  static hasExtension_Callback_2(mthis, __arg_0, __arg_1) native "SVGMaskElement_hasExtension_Callback";
  hasExtension_Callback_2_(mthis, __arg_0, __arg_1) => hasExtension_Callback_2(mthis, __arg_0, __arg_1);

  static hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMaskElement_hasExtension_Callback";
  hasExtension_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static height_Getter(mthis) native "SVGMaskElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static maskContentUnits_Getter(mthis) native "SVGMaskElement_maskContentUnits_Getter";
  maskContentUnits_Getter_(mthis) => maskContentUnits_Getter(mthis);

  static maskUnits_Getter(mthis) native "SVGMaskElement_maskUnits_Getter";
  maskUnits_Getter_(mthis) => maskUnits_Getter(mthis);

  static requiredExtensions_Getter(mthis) native "SVGMaskElement_requiredExtensions_Getter";
  requiredExtensions_Getter_(mthis) => requiredExtensions_Getter(mthis);

  static requiredFeatures_Getter(mthis) native "SVGMaskElement_requiredFeatures_Getter";
  requiredFeatures_Getter_(mthis) => requiredFeatures_Getter(mthis);

  static systemLanguage_Getter(mthis) native "SVGMaskElement_systemLanguage_Getter";
  systemLanguage_Getter_(mthis) => systemLanguage_Getter(mthis);

  static width_Getter(mthis) native "SVGMaskElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGMaskElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGMaskElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGMatrix {
  static final instance = new BlinkSVGMatrix();

  static a_Getter(mthis) native "SVGMatrix_a_Getter";
  a_Getter_(mthis) => a_Getter(mthis);

  static a_Setter(mthis, __arg_0) native "SVGMatrix_a_Setter";
  a_Setter_(mthis, __arg_0) => a_Setter(mthis, __arg_0);

  static b_Getter(mthis) native "SVGMatrix_b_Getter";
  b_Getter_(mthis) => b_Getter(mthis);

  static b_Setter(mthis, __arg_0) native "SVGMatrix_b_Setter";
  b_Setter_(mthis, __arg_0) => b_Setter(mthis, __arg_0);

  static c_Getter(mthis) native "SVGMatrix_c_Getter";
  c_Getter_(mthis) => c_Getter(mthis);

  static c_Setter(mthis, __arg_0) native "SVGMatrix_c_Setter";
  c_Setter_(mthis, __arg_0) => c_Setter(mthis, __arg_0);

  static d_Getter(mthis) native "SVGMatrix_d_Getter";
  d_Getter_(mthis) => d_Getter(mthis);

  static d_Setter(mthis, __arg_0) native "SVGMatrix_d_Setter";
  d_Setter_(mthis, __arg_0) => d_Setter(mthis, __arg_0);

  static e_Getter(mthis) native "SVGMatrix_e_Getter";
  e_Getter_(mthis) => e_Getter(mthis);

  static e_Setter(mthis, __arg_0) native "SVGMatrix_e_Setter";
  e_Setter_(mthis, __arg_0) => e_Setter(mthis, __arg_0);

  static f_Getter(mthis) native "SVGMatrix_f_Getter";
  f_Getter_(mthis) => f_Getter(mthis);

  static f_Setter(mthis, __arg_0) native "SVGMatrix_f_Setter";
  f_Setter_(mthis, __arg_0) => f_Setter(mthis, __arg_0);

  static flipX_Callback_0(mthis) native "SVGMatrix_flipX_Callback";
  flipX_Callback_0_(mthis) => flipX_Callback_0(mthis);

  static flipX_Callback_1(mthis, __arg_0) native "SVGMatrix_flipX_Callback";
  flipX_Callback_1_(mthis, __arg_0) => flipX_Callback_1(mthis, __arg_0);

  static flipX_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_flipX_Callback";
  flipX_Callback_2_(mthis, __arg_0, __arg_1) => flipX_Callback_2(mthis, __arg_0, __arg_1);

  static flipY_Callback_0(mthis) native "SVGMatrix_flipY_Callback";
  flipY_Callback_0_(mthis) => flipY_Callback_0(mthis);

  static flipY_Callback_1(mthis, __arg_0) native "SVGMatrix_flipY_Callback";
  flipY_Callback_1_(mthis, __arg_0) => flipY_Callback_1(mthis, __arg_0);

  static flipY_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_flipY_Callback";
  flipY_Callback_2_(mthis, __arg_0, __arg_1) => flipY_Callback_2(mthis, __arg_0, __arg_1);

  static inverse_Callback_0(mthis) native "SVGMatrix_inverse_Callback";
  inverse_Callback_0_(mthis) => inverse_Callback_0(mthis);

  static inverse_Callback_1(mthis, __arg_0) native "SVGMatrix_inverse_Callback";
  inverse_Callback_1_(mthis, __arg_0) => inverse_Callback_1(mthis, __arg_0);

  static inverse_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_inverse_Callback";
  inverse_Callback_2_(mthis, __arg_0, __arg_1) => inverse_Callback_2(mthis, __arg_0, __arg_1);

  static multiply_Callback_0(mthis) native "SVGMatrix_multiply_Callback";
  multiply_Callback_0_(mthis) => multiply_Callback_0(mthis);

  static multiply_Callback_1(mthis, __arg_0) native "SVGMatrix_multiply_Callback";
  multiply_Callback_1_(mthis, __arg_0) => multiply_Callback_1(mthis, __arg_0);

  static multiply_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_multiply_Callback";
  multiply_Callback_2_(mthis, __arg_0, __arg_1) => multiply_Callback_2(mthis, __arg_0, __arg_1);

  static multiply_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMatrix_multiply_Callback";
  multiply_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => multiply_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rotateFromVector_Callback_0(mthis) native "SVGMatrix_rotateFromVector_Callback";
  rotateFromVector_Callback_0_(mthis) => rotateFromVector_Callback_0(mthis);

  static rotateFromVector_Callback_1(mthis, __arg_0) native "SVGMatrix_rotateFromVector_Callback";
  rotateFromVector_Callback_1_(mthis, __arg_0) => rotateFromVector_Callback_1(mthis, __arg_0);

  static rotateFromVector_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_rotateFromVector_Callback";
  rotateFromVector_Callback_2_(mthis, __arg_0, __arg_1) => rotateFromVector_Callback_2(mthis, __arg_0, __arg_1);

  static rotateFromVector_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMatrix_rotateFromVector_Callback";
  rotateFromVector_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => rotateFromVector_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rotateFromVector_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGMatrix_rotateFromVector_Callback";
  rotateFromVector_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => rotateFromVector_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static rotate_Callback_0(mthis) native "SVGMatrix_rotate_Callback";
  rotate_Callback_0_(mthis) => rotate_Callback_0(mthis);

  static rotate_Callback_1(mthis, __arg_0) native "SVGMatrix_rotate_Callback";
  rotate_Callback_1_(mthis, __arg_0) => rotate_Callback_1(mthis, __arg_0);

  static rotate_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_rotate_Callback";
  rotate_Callback_2_(mthis, __arg_0, __arg_1) => rotate_Callback_2(mthis, __arg_0, __arg_1);

  static rotate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMatrix_rotate_Callback";
  rotate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => rotate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scaleNonUniform_Callback_0(mthis) native "SVGMatrix_scaleNonUniform_Callback";
  scaleNonUniform_Callback_0_(mthis) => scaleNonUniform_Callback_0(mthis);

  static scaleNonUniform_Callback_1(mthis, __arg_0) native "SVGMatrix_scaleNonUniform_Callback";
  scaleNonUniform_Callback_1_(mthis, __arg_0) => scaleNonUniform_Callback_1(mthis, __arg_0);

  static scaleNonUniform_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_scaleNonUniform_Callback";
  scaleNonUniform_Callback_2_(mthis, __arg_0, __arg_1) => scaleNonUniform_Callback_2(mthis, __arg_0, __arg_1);

  static scaleNonUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMatrix_scaleNonUniform_Callback";
  scaleNonUniform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scaleNonUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scaleNonUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGMatrix_scaleNonUniform_Callback";
  scaleNonUniform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scaleNonUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scale_Callback_0(mthis) native "SVGMatrix_scale_Callback";
  scale_Callback_0_(mthis) => scale_Callback_0(mthis);

  static scale_Callback_1(mthis, __arg_0) native "SVGMatrix_scale_Callback";
  scale_Callback_1_(mthis, __arg_0) => scale_Callback_1(mthis, __arg_0);

  static scale_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_scale_Callback";
  scale_Callback_2_(mthis, __arg_0, __arg_1) => scale_Callback_2(mthis, __arg_0, __arg_1);

  static scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMatrix_scale_Callback";
  scale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static skewX_Callback_0(mthis) native "SVGMatrix_skewX_Callback";
  skewX_Callback_0_(mthis) => skewX_Callback_0(mthis);

  static skewX_Callback_1(mthis, __arg_0) native "SVGMatrix_skewX_Callback";
  skewX_Callback_1_(mthis, __arg_0) => skewX_Callback_1(mthis, __arg_0);

  static skewX_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_skewX_Callback";
  skewX_Callback_2_(mthis, __arg_0, __arg_1) => skewX_Callback_2(mthis, __arg_0, __arg_1);

  static skewX_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMatrix_skewX_Callback";
  skewX_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => skewX_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static skewY_Callback_0(mthis) native "SVGMatrix_skewY_Callback";
  skewY_Callback_0_(mthis) => skewY_Callback_0(mthis);

  static skewY_Callback_1(mthis, __arg_0) native "SVGMatrix_skewY_Callback";
  skewY_Callback_1_(mthis, __arg_0) => skewY_Callback_1(mthis, __arg_0);

  static skewY_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_skewY_Callback";
  skewY_Callback_2_(mthis, __arg_0, __arg_1) => skewY_Callback_2(mthis, __arg_0, __arg_1);

  static skewY_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMatrix_skewY_Callback";
  skewY_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => skewY_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static translate_Callback_0(mthis) native "SVGMatrix_translate_Callback";
  translate_Callback_0_(mthis) => translate_Callback_0(mthis);

  static translate_Callback_1(mthis, __arg_0) native "SVGMatrix_translate_Callback";
  translate_Callback_1_(mthis, __arg_0) => translate_Callback_1(mthis, __arg_0);

  static translate_Callback_2(mthis, __arg_0, __arg_1) native "SVGMatrix_translate_Callback";
  translate_Callback_2_(mthis, __arg_0, __arg_1) => translate_Callback_2(mthis, __arg_0, __arg_1);

  static translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGMatrix_translate_Callback";
  translate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGMatrix_translate_Callback";
  translate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkSVGMetadataElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMetadataElement();

}

class BlinkSVGMissingGlyphElement extends BlinkSVGElement {
  static final instance = new BlinkSVGMissingGlyphElement();

}

class BlinkSVGNumber {
  static final instance = new BlinkSVGNumber();

  static value_Getter(mthis) native "SVGNumber_value_Getter";
  value_Getter_(mthis) => value_Getter(mthis);

  static value_Setter(mthis, __arg_0) native "SVGNumber_value_Setter";
  value_Setter_(mthis, __arg_0) => value_Setter(mthis, __arg_0);

}

class BlinkSVGNumberList {
  static final instance = new BlinkSVGNumberList();

  static $__getter___Callback_1(mthis, __arg_0) native "SVGNumberList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "SVGNumberList___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_0(mthis) native "SVGNumberList_appendItem_Callback";
  appendItem_Callback_0_(mthis) => appendItem_Callback_0(mthis);

  static appendItem_Callback_1(mthis, __arg_0) native "SVGNumberList_appendItem_Callback";
  appendItem_Callback_1_(mthis, __arg_0) => appendItem_Callback_1(mthis, __arg_0);

  static appendItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGNumberList_appendItem_Callback";
  appendItem_Callback_2_(mthis, __arg_0, __arg_1) => appendItem_Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGNumberList_appendItem_Callback";
  appendItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clear_Callback_0(mthis) native "SVGNumberList_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "SVGNumberList_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "SVGNumberList_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_0(mthis) native "SVGNumberList_getItem_Callback";
  getItem_Callback_0_(mthis) => getItem_Callback_0(mthis);

  static getItem_Callback_1(mthis, __arg_0) native "SVGNumberList_getItem_Callback";
  getItem_Callback_1_(mthis, __arg_0) => getItem_Callback_1(mthis, __arg_0);

  static getItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGNumberList_getItem_Callback";
  getItem_Callback_2_(mthis, __arg_0, __arg_1) => getItem_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGNumberList_getItem_Callback";
  getItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initialize_Callback_0(mthis) native "SVGNumberList_initialize_Callback";
  initialize_Callback_0_(mthis) => initialize_Callback_0(mthis);

  static initialize_Callback_1(mthis, __arg_0) native "SVGNumberList_initialize_Callback";
  initialize_Callback_1_(mthis, __arg_0) => initialize_Callback_1(mthis, __arg_0);

  static initialize_Callback_2(mthis, __arg_0, __arg_1) native "SVGNumberList_initialize_Callback";
  initialize_Callback_2_(mthis, __arg_0, __arg_1) => initialize_Callback_2(mthis, __arg_0, __arg_1);

  static initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGNumberList_initialize_Callback";
  initialize_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_0(mthis) native "SVGNumberList_insertItemBefore_Callback";
  insertItemBefore_Callback_0_(mthis) => insertItemBefore_Callback_0(mthis);

  static insertItemBefore_Callback_1(mthis, __arg_0) native "SVGNumberList_insertItemBefore_Callback";
  insertItemBefore_Callback_1_(mthis, __arg_0) => insertItemBefore_Callback_1(mthis, __arg_0);

  static insertItemBefore_Callback_2(mthis, __arg_0, __arg_1) native "SVGNumberList_insertItemBefore_Callback";
  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => insertItemBefore_Callback_2(mthis, __arg_0, __arg_1);

  static insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGNumberList_insertItemBefore_Callback";
  insertItemBefore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGNumberList_insertItemBefore_Callback";
  insertItemBefore_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static length_Getter(mthis) native "SVGNumberList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static numberOfItems_Getter(mthis) native "SVGNumberList_numberOfItems_Getter";
  numberOfItems_Getter_(mthis) => numberOfItems_Getter(mthis);

  static removeItem_Callback_0(mthis) native "SVGNumberList_removeItem_Callback";
  removeItem_Callback_0_(mthis) => removeItem_Callback_0(mthis);

  static removeItem_Callback_1(mthis, __arg_0) native "SVGNumberList_removeItem_Callback";
  removeItem_Callback_1_(mthis, __arg_0) => removeItem_Callback_1(mthis, __arg_0);

  static removeItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGNumberList_removeItem_Callback";
  removeItem_Callback_2_(mthis, __arg_0, __arg_1) => removeItem_Callback_2(mthis, __arg_0, __arg_1);

  static removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGNumberList_removeItem_Callback";
  removeItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_0(mthis) native "SVGNumberList_replaceItem_Callback";
  replaceItem_Callback_0_(mthis) => replaceItem_Callback_0(mthis);

  static replaceItem_Callback_1(mthis, __arg_0) native "SVGNumberList_replaceItem_Callback";
  replaceItem_Callback_1_(mthis, __arg_0) => replaceItem_Callback_1(mthis, __arg_0);

  static replaceItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGNumberList_replaceItem_Callback";
  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => replaceItem_Callback_2(mthis, __arg_0, __arg_1);

  static replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGNumberList_replaceItem_Callback";
  replaceItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGNumberList_replaceItem_Callback";
  replaceItem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkSVGPathElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGPathElement();

  static animatedNormalizedPathSegList_Getter(mthis) native "SVGPathElement_animatedNormalizedPathSegList_Getter";
  animatedNormalizedPathSegList_Getter_(mthis) => animatedNormalizedPathSegList_Getter(mthis);

  static animatedPathSegList_Getter(mthis) native "SVGPathElement_animatedPathSegList_Getter";
  animatedPathSegList_Getter_(mthis) => animatedPathSegList_Getter(mthis);

  static createSVGPathSegArcAbs_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
  createSVGPathSegArcAbs_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createSVGPathSegArcAbs_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createSVGPathSegArcAbs_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
  createSVGPathSegArcAbs_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createSVGPathSegArcAbs_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createSVGPathSegArcAbs_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
  createSVGPathSegArcAbs_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => createSVGPathSegArcAbs_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static createSVGPathSegArcAbs_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
  createSVGPathSegArcAbs_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => createSVGPathSegArcAbs_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static createSVGPathSegArcAbs_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "SVGPathElement_createSVGPathSegArcAbs_Callback";
  createSVGPathSegArcAbs_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => createSVGPathSegArcAbs_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static createSVGPathSegArcRel_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SVGPathElement_createSVGPathSegArcRel_Callback";
  createSVGPathSegArcRel_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createSVGPathSegArcRel_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createSVGPathSegArcRel_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SVGPathElement_createSVGPathSegArcRel_Callback";
  createSVGPathSegArcRel_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createSVGPathSegArcRel_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createSVGPathSegArcRel_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "SVGPathElement_createSVGPathSegArcRel_Callback";
  createSVGPathSegArcRel_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => createSVGPathSegArcRel_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static createSVGPathSegArcRel_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "SVGPathElement_createSVGPathSegArcRel_Callback";
  createSVGPathSegArcRel_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => createSVGPathSegArcRel_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static createSVGPathSegArcRel_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "SVGPathElement_createSVGPathSegArcRel_Callback";
  createSVGPathSegArcRel_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => createSVGPathSegArcRel_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static createSVGPathSegClosePath_Callback_0(mthis) native "SVGPathElement_createSVGPathSegClosePath_Callback";
  createSVGPathSegClosePath_Callback_0_(mthis) => createSVGPathSegClosePath_Callback_0(mthis);

  static createSVGPathSegClosePath_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegClosePath_Callback";
  createSVGPathSegClosePath_Callback_1_(mthis, __arg_0) => createSVGPathSegClosePath_Callback_1(mthis, __arg_0);

  static createSVGPathSegClosePath_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegClosePath_Callback";
  createSVGPathSegClosePath_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegClosePath_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegCurvetoCubicAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
  createSVGPathSegCurvetoCubicAbs_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegCurvetoCubicAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegCurvetoCubicAbs_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
  createSVGPathSegCurvetoCubicAbs_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createSVGPathSegCurvetoCubicAbs_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createSVGPathSegCurvetoCubicAbs_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
  createSVGPathSegCurvetoCubicAbs_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createSVGPathSegCurvetoCubicAbs_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createSVGPathSegCurvetoCubicAbs_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
  createSVGPathSegCurvetoCubicAbs_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => createSVGPathSegCurvetoCubicAbs_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static createSVGPathSegCurvetoCubicAbs_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "SVGPathElement_createSVGPathSegCurvetoCubicAbs_Callback";
  createSVGPathSegCurvetoCubicAbs_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => createSVGPathSegCurvetoCubicAbs_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static createSVGPathSegCurvetoCubicRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
  createSVGPathSegCurvetoCubicRel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegCurvetoCubicRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegCurvetoCubicRel_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
  createSVGPathSegCurvetoCubicRel_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createSVGPathSegCurvetoCubicRel_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createSVGPathSegCurvetoCubicRel_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
  createSVGPathSegCurvetoCubicRel_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createSVGPathSegCurvetoCubicRel_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createSVGPathSegCurvetoCubicRel_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
  createSVGPathSegCurvetoCubicRel_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => createSVGPathSegCurvetoCubicRel_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static createSVGPathSegCurvetoCubicRel_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "SVGPathElement_createSVGPathSegCurvetoCubicRel_Callback";
  createSVGPathSegCurvetoCubicRel_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => createSVGPathSegCurvetoCubicRel_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static createSVGPathSegCurvetoCubicSmoothAbs_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
  createSVGPathSegCurvetoCubicSmoothAbs_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegCurvetoCubicSmoothAbs_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegCurvetoCubicSmoothAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
  createSVGPathSegCurvetoCubicSmoothAbs_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegCurvetoCubicSmoothAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegCurvetoCubicSmoothAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
  createSVGPathSegCurvetoCubicSmoothAbs_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegCurvetoCubicSmoothAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegCurvetoCubicSmoothAbs_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
  createSVGPathSegCurvetoCubicSmoothAbs_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createSVGPathSegCurvetoCubicSmoothAbs_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createSVGPathSegCurvetoCubicSmoothAbs_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothAbs_Callback";
  createSVGPathSegCurvetoCubicSmoothAbs_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createSVGPathSegCurvetoCubicSmoothAbs_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createSVGPathSegCurvetoCubicSmoothRel_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
  createSVGPathSegCurvetoCubicSmoothRel_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegCurvetoCubicSmoothRel_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegCurvetoCubicSmoothRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
  createSVGPathSegCurvetoCubicSmoothRel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegCurvetoCubicSmoothRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegCurvetoCubicSmoothRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
  createSVGPathSegCurvetoCubicSmoothRel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegCurvetoCubicSmoothRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegCurvetoCubicSmoothRel_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
  createSVGPathSegCurvetoCubicSmoothRel_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createSVGPathSegCurvetoCubicSmoothRel_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createSVGPathSegCurvetoCubicSmoothRel_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SVGPathElement_createSVGPathSegCurvetoCubicSmoothRel_Callback";
  createSVGPathSegCurvetoCubicSmoothRel_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createSVGPathSegCurvetoCubicSmoothRel_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createSVGPathSegCurvetoQuadraticAbs_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
  createSVGPathSegCurvetoQuadraticAbs_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegCurvetoQuadraticAbs_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegCurvetoQuadraticAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
  createSVGPathSegCurvetoQuadraticAbs_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegCurvetoQuadraticAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegCurvetoQuadraticAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
  createSVGPathSegCurvetoQuadraticAbs_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegCurvetoQuadraticAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegCurvetoQuadraticAbs_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
  createSVGPathSegCurvetoQuadraticAbs_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createSVGPathSegCurvetoQuadraticAbs_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createSVGPathSegCurvetoQuadraticAbs_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SVGPathElement_createSVGPathSegCurvetoQuadraticAbs_Callback";
  createSVGPathSegCurvetoQuadraticAbs_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createSVGPathSegCurvetoQuadraticAbs_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createSVGPathSegCurvetoQuadraticRel_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
  createSVGPathSegCurvetoQuadraticRel_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegCurvetoQuadraticRel_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegCurvetoQuadraticRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
  createSVGPathSegCurvetoQuadraticRel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegCurvetoQuadraticRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegCurvetoQuadraticRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
  createSVGPathSegCurvetoQuadraticRel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegCurvetoQuadraticRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegCurvetoQuadraticRel_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
  createSVGPathSegCurvetoQuadraticRel_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createSVGPathSegCurvetoQuadraticRel_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createSVGPathSegCurvetoQuadraticRel_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SVGPathElement_createSVGPathSegCurvetoQuadraticRel_Callback";
  createSVGPathSegCurvetoQuadraticRel_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createSVGPathSegCurvetoQuadraticRel_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_0(mthis) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
  createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_0_(mthis) => createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_0(mthis);

  static createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
  createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_1_(mthis, __arg_0) => createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_1(mthis, __arg_0);

  static createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
  createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
  createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothAbs_Callback";
  createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegCurvetoQuadraticSmoothAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegCurvetoQuadraticSmoothRel_Callback_0(mthis) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
  createSVGPathSegCurvetoQuadraticSmoothRel_Callback_0_(mthis) => createSVGPathSegCurvetoQuadraticSmoothRel_Callback_0(mthis);

  static createSVGPathSegCurvetoQuadraticSmoothRel_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
  createSVGPathSegCurvetoQuadraticSmoothRel_Callback_1_(mthis, __arg_0) => createSVGPathSegCurvetoQuadraticSmoothRel_Callback_1(mthis, __arg_0);

  static createSVGPathSegCurvetoQuadraticSmoothRel_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
  createSVGPathSegCurvetoQuadraticSmoothRel_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegCurvetoQuadraticSmoothRel_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegCurvetoQuadraticSmoothRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
  createSVGPathSegCurvetoQuadraticSmoothRel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegCurvetoQuadraticSmoothRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegCurvetoQuadraticSmoothRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegCurvetoQuadraticSmoothRel_Callback";
  createSVGPathSegCurvetoQuadraticSmoothRel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegCurvetoQuadraticSmoothRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegLinetoAbs_Callback_0(mthis) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
  createSVGPathSegLinetoAbs_Callback_0_(mthis) => createSVGPathSegLinetoAbs_Callback_0(mthis);

  static createSVGPathSegLinetoAbs_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
  createSVGPathSegLinetoAbs_Callback_1_(mthis, __arg_0) => createSVGPathSegLinetoAbs_Callback_1(mthis, __arg_0);

  static createSVGPathSegLinetoAbs_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
  createSVGPathSegLinetoAbs_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegLinetoAbs_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegLinetoAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
  createSVGPathSegLinetoAbs_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegLinetoAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegLinetoAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegLinetoAbs_Callback";
  createSVGPathSegLinetoAbs_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegLinetoAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegLinetoHorizontalAbs_Callback_0(mthis) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback";
  createSVGPathSegLinetoHorizontalAbs_Callback_0_(mthis) => createSVGPathSegLinetoHorizontalAbs_Callback_0(mthis);

  static createSVGPathSegLinetoHorizontalAbs_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback";
  createSVGPathSegLinetoHorizontalAbs_Callback_1_(mthis, __arg_0) => createSVGPathSegLinetoHorizontalAbs_Callback_1(mthis, __arg_0);

  static createSVGPathSegLinetoHorizontalAbs_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback";
  createSVGPathSegLinetoHorizontalAbs_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegLinetoHorizontalAbs_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegLinetoHorizontalAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegLinetoHorizontalAbs_Callback";
  createSVGPathSegLinetoHorizontalAbs_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegLinetoHorizontalAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegLinetoHorizontalRel_Callback_0(mthis) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback";
  createSVGPathSegLinetoHorizontalRel_Callback_0_(mthis) => createSVGPathSegLinetoHorizontalRel_Callback_0(mthis);

  static createSVGPathSegLinetoHorizontalRel_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback";
  createSVGPathSegLinetoHorizontalRel_Callback_1_(mthis, __arg_0) => createSVGPathSegLinetoHorizontalRel_Callback_1(mthis, __arg_0);

  static createSVGPathSegLinetoHorizontalRel_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback";
  createSVGPathSegLinetoHorizontalRel_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegLinetoHorizontalRel_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegLinetoHorizontalRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegLinetoHorizontalRel_Callback";
  createSVGPathSegLinetoHorizontalRel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegLinetoHorizontalRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegLinetoRel_Callback_0(mthis) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
  createSVGPathSegLinetoRel_Callback_0_(mthis) => createSVGPathSegLinetoRel_Callback_0(mthis);

  static createSVGPathSegLinetoRel_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
  createSVGPathSegLinetoRel_Callback_1_(mthis, __arg_0) => createSVGPathSegLinetoRel_Callback_1(mthis, __arg_0);

  static createSVGPathSegLinetoRel_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
  createSVGPathSegLinetoRel_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegLinetoRel_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegLinetoRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
  createSVGPathSegLinetoRel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegLinetoRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegLinetoRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegLinetoRel_Callback";
  createSVGPathSegLinetoRel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegLinetoRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegLinetoVerticalAbs_Callback_0(mthis) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback";
  createSVGPathSegLinetoVerticalAbs_Callback_0_(mthis) => createSVGPathSegLinetoVerticalAbs_Callback_0(mthis);

  static createSVGPathSegLinetoVerticalAbs_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback";
  createSVGPathSegLinetoVerticalAbs_Callback_1_(mthis, __arg_0) => createSVGPathSegLinetoVerticalAbs_Callback_1(mthis, __arg_0);

  static createSVGPathSegLinetoVerticalAbs_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback";
  createSVGPathSegLinetoVerticalAbs_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegLinetoVerticalAbs_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegLinetoVerticalAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegLinetoVerticalAbs_Callback";
  createSVGPathSegLinetoVerticalAbs_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegLinetoVerticalAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegLinetoVerticalRel_Callback_0(mthis) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback";
  createSVGPathSegLinetoVerticalRel_Callback_0_(mthis) => createSVGPathSegLinetoVerticalRel_Callback_0(mthis);

  static createSVGPathSegLinetoVerticalRel_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback";
  createSVGPathSegLinetoVerticalRel_Callback_1_(mthis, __arg_0) => createSVGPathSegLinetoVerticalRel_Callback_1(mthis, __arg_0);

  static createSVGPathSegLinetoVerticalRel_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback";
  createSVGPathSegLinetoVerticalRel_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegLinetoVerticalRel_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegLinetoVerticalRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegLinetoVerticalRel_Callback";
  createSVGPathSegLinetoVerticalRel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegLinetoVerticalRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegMovetoAbs_Callback_0(mthis) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
  createSVGPathSegMovetoAbs_Callback_0_(mthis) => createSVGPathSegMovetoAbs_Callback_0(mthis);

  static createSVGPathSegMovetoAbs_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
  createSVGPathSegMovetoAbs_Callback_1_(mthis, __arg_0) => createSVGPathSegMovetoAbs_Callback_1(mthis, __arg_0);

  static createSVGPathSegMovetoAbs_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
  createSVGPathSegMovetoAbs_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegMovetoAbs_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegMovetoAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
  createSVGPathSegMovetoAbs_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegMovetoAbs_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegMovetoAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegMovetoAbs_Callback";
  createSVGPathSegMovetoAbs_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegMovetoAbs_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGPathSegMovetoRel_Callback_0(mthis) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
  createSVGPathSegMovetoRel_Callback_0_(mthis) => createSVGPathSegMovetoRel_Callback_0(mthis);

  static createSVGPathSegMovetoRel_Callback_1(mthis, __arg_0) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
  createSVGPathSegMovetoRel_Callback_1_(mthis, __arg_0) => createSVGPathSegMovetoRel_Callback_1(mthis, __arg_0);

  static createSVGPathSegMovetoRel_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
  createSVGPathSegMovetoRel_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPathSegMovetoRel_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPathSegMovetoRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
  createSVGPathSegMovetoRel_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGPathSegMovetoRel_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGPathSegMovetoRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathElement_createSVGPathSegMovetoRel_Callback";
  createSVGPathSegMovetoRel_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createSVGPathSegMovetoRel_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getPathSegAtLength_Callback_0(mthis) native "SVGPathElement_getPathSegAtLength_Callback";
  getPathSegAtLength_Callback_0_(mthis) => getPathSegAtLength_Callback_0(mthis);

  static getPathSegAtLength_Callback_1(mthis, __arg_0) native "SVGPathElement_getPathSegAtLength_Callback";
  getPathSegAtLength_Callback_1_(mthis, __arg_0) => getPathSegAtLength_Callback_1(mthis, __arg_0);

  static getPathSegAtLength_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_getPathSegAtLength_Callback";
  getPathSegAtLength_Callback_2_(mthis, __arg_0, __arg_1) => getPathSegAtLength_Callback_2(mthis, __arg_0, __arg_1);

  static getPathSegAtLength_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_getPathSegAtLength_Callback";
  getPathSegAtLength_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getPathSegAtLength_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getPointAtLength_Callback_0(mthis) native "SVGPathElement_getPointAtLength_Callback";
  getPointAtLength_Callback_0_(mthis) => getPointAtLength_Callback_0(mthis);

  static getPointAtLength_Callback_1(mthis, __arg_0) native "SVGPathElement_getPointAtLength_Callback";
  getPointAtLength_Callback_1_(mthis, __arg_0) => getPointAtLength_Callback_1(mthis, __arg_0);

  static getPointAtLength_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_getPointAtLength_Callback";
  getPointAtLength_Callback_2_(mthis, __arg_0, __arg_1) => getPointAtLength_Callback_2(mthis, __arg_0, __arg_1);

  static getPointAtLength_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathElement_getPointAtLength_Callback";
  getPointAtLength_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getPointAtLength_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getTotalLength_Callback_0(mthis) native "SVGPathElement_getTotalLength_Callback";
  getTotalLength_Callback_0_(mthis) => getTotalLength_Callback_0(mthis);

  static getTotalLength_Callback_1(mthis, __arg_0) native "SVGPathElement_getTotalLength_Callback";
  getTotalLength_Callback_1_(mthis, __arg_0) => getTotalLength_Callback_1(mthis, __arg_0);

  static getTotalLength_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathElement_getTotalLength_Callback";
  getTotalLength_Callback_2_(mthis, __arg_0, __arg_1) => getTotalLength_Callback_2(mthis, __arg_0, __arg_1);

  static normalizedPathSegList_Getter(mthis) native "SVGPathElement_normalizedPathSegList_Getter";
  normalizedPathSegList_Getter_(mthis) => normalizedPathSegList_Getter(mthis);

  static pathLength_Getter(mthis) native "SVGPathElement_pathLength_Getter";
  pathLength_Getter_(mthis) => pathLength_Getter(mthis);

  static pathSegList_Getter(mthis) native "SVGPathElement_pathSegList_Getter";
  pathSegList_Getter_(mthis) => pathSegList_Getter(mthis);

}

class BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSeg();

  static pathSegTypeAsLetter_Getter(mthis) native "SVGPathSeg_pathSegTypeAsLetter_Getter";
  pathSegTypeAsLetter_Getter_(mthis) => pathSegTypeAsLetter_Getter(mthis);

  static pathSegType_Getter(mthis) native "SVGPathSeg_pathSegType_Getter";
  pathSegType_Getter_(mthis) => pathSegType_Getter(mthis);

}

class BlinkSVGPathSegArcAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegArcAbs();

  static angle_Getter(mthis) native "SVGPathSegArcAbs_angle_Getter";
  angle_Getter_(mthis) => angle_Getter(mthis);

  static angle_Setter(mthis, __arg_0) native "SVGPathSegArcAbs_angle_Setter";
  angle_Setter_(mthis, __arg_0) => angle_Setter(mthis, __arg_0);

  static largeArcFlag_Getter(mthis) native "SVGPathSegArcAbs_largeArcFlag_Getter";
  largeArcFlag_Getter_(mthis) => largeArcFlag_Getter(mthis);

  static largeArcFlag_Setter(mthis, __arg_0) native "SVGPathSegArcAbs_largeArcFlag_Setter";
  largeArcFlag_Setter_(mthis, __arg_0) => largeArcFlag_Setter(mthis, __arg_0);

  static r1_Getter(mthis) native "SVGPathSegArcAbs_r1_Getter";
  r1_Getter_(mthis) => r1_Getter(mthis);

  static r1_Setter(mthis, __arg_0) native "SVGPathSegArcAbs_r1_Setter";
  r1_Setter_(mthis, __arg_0) => r1_Setter(mthis, __arg_0);

  static r2_Getter(mthis) native "SVGPathSegArcAbs_r2_Getter";
  r2_Getter_(mthis) => r2_Getter(mthis);

  static r2_Setter(mthis, __arg_0) native "SVGPathSegArcAbs_r2_Setter";
  r2_Setter_(mthis, __arg_0) => r2_Setter(mthis, __arg_0);

  static sweepFlag_Getter(mthis) native "SVGPathSegArcAbs_sweepFlag_Getter";
  sweepFlag_Getter_(mthis) => sweepFlag_Getter(mthis);

  static sweepFlag_Setter(mthis, __arg_0) native "SVGPathSegArcAbs_sweepFlag_Setter";
  sweepFlag_Setter_(mthis, __arg_0) => sweepFlag_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "SVGPathSegArcAbs_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegArcAbs_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegArcAbs_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegArcAbs_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegArcRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegArcRel();

  static angle_Getter(mthis) native "SVGPathSegArcRel_angle_Getter";
  angle_Getter_(mthis) => angle_Getter(mthis);

  static angle_Setter(mthis, __arg_0) native "SVGPathSegArcRel_angle_Setter";
  angle_Setter_(mthis, __arg_0) => angle_Setter(mthis, __arg_0);

  static largeArcFlag_Getter(mthis) native "SVGPathSegArcRel_largeArcFlag_Getter";
  largeArcFlag_Getter_(mthis) => largeArcFlag_Getter(mthis);

  static largeArcFlag_Setter(mthis, __arg_0) native "SVGPathSegArcRel_largeArcFlag_Setter";
  largeArcFlag_Setter_(mthis, __arg_0) => largeArcFlag_Setter(mthis, __arg_0);

  static r1_Getter(mthis) native "SVGPathSegArcRel_r1_Getter";
  r1_Getter_(mthis) => r1_Getter(mthis);

  static r1_Setter(mthis, __arg_0) native "SVGPathSegArcRel_r1_Setter";
  r1_Setter_(mthis, __arg_0) => r1_Setter(mthis, __arg_0);

  static r2_Getter(mthis) native "SVGPathSegArcRel_r2_Getter";
  r2_Getter_(mthis) => r2_Getter(mthis);

  static r2_Setter(mthis, __arg_0) native "SVGPathSegArcRel_r2_Setter";
  r2_Setter_(mthis, __arg_0) => r2_Setter(mthis, __arg_0);

  static sweepFlag_Getter(mthis) native "SVGPathSegArcRel_sweepFlag_Getter";
  sweepFlag_Getter_(mthis) => sweepFlag_Getter(mthis);

  static sweepFlag_Setter(mthis, __arg_0) native "SVGPathSegArcRel_sweepFlag_Setter";
  sweepFlag_Setter_(mthis, __arg_0) => sweepFlag_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "SVGPathSegArcRel_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegArcRel_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegArcRel_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegArcRel_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegClosePath extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegClosePath();

}

class BlinkSVGPathSegCurvetoCubicAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoCubicAbs();

  static x1_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x1_Getter";
  x1_Getter_(mthis) => x1_Getter(mthis);

  static x1_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicAbs_x1_Setter";
  x1_Setter_(mthis, __arg_0) => x1_Setter(mthis, __arg_0);

  static x2_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x2_Getter";
  x2_Getter_(mthis) => x2_Getter(mthis);

  static x2_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicAbs_x2_Setter";
  x2_Setter_(mthis, __arg_0) => x2_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicAbs_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y1_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y1_Getter";
  y1_Getter_(mthis) => y1_Getter(mthis);

  static y1_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicAbs_y1_Setter";
  y1_Setter_(mthis, __arg_0) => y1_Setter(mthis, __arg_0);

  static y2_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y2_Getter";
  y2_Getter_(mthis) => y2_Getter(mthis);

  static y2_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicAbs_y2_Setter";
  y2_Setter_(mthis, __arg_0) => y2_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegCurvetoCubicAbs_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicAbs_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegCurvetoCubicRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoCubicRel();

  static x1_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x1_Getter";
  x1_Getter_(mthis) => x1_Getter(mthis);

  static x1_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicRel_x1_Setter";
  x1_Setter_(mthis, __arg_0) => x1_Setter(mthis, __arg_0);

  static x2_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x2_Getter";
  x2_Getter_(mthis) => x2_Getter(mthis);

  static x2_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicRel_x2_Setter";
  x2_Setter_(mthis, __arg_0) => x2_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "SVGPathSegCurvetoCubicRel_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicRel_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y1_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y1_Getter";
  y1_Getter_(mthis) => y1_Getter(mthis);

  static y1_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicRel_y1_Setter";
  y1_Setter_(mthis, __arg_0) => y1_Setter(mthis, __arg_0);

  static y2_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y2_Getter";
  y2_Getter_(mthis) => y2_Getter(mthis);

  static y2_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicRel_y2_Setter";
  y2_Setter_(mthis, __arg_0) => y2_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegCurvetoCubicRel_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicRel_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegCurvetoCubicSmoothAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoCubicSmoothAbs();

  static x2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Getter";
  x2_Getter_(mthis) => x2_Getter(mthis);

  static x2_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicSmoothAbs_x2_Setter";
  x2_Setter_(mthis, __arg_0) => x2_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicSmoothAbs_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Getter";
  y2_Getter_(mthis) => y2_Getter(mthis);

  static y2_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicSmoothAbs_y2_Setter";
  y2_Setter_(mthis, __arg_0) => y2_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothAbs_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicSmoothAbs_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegCurvetoCubicSmoothRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoCubicSmoothRel();

  static x2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_x2_Getter";
  x2_Getter_(mthis) => x2_Getter(mthis);

  static x2_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicSmoothRel_x2_Setter";
  x2_Setter_(mthis, __arg_0) => x2_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicSmoothRel_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y2_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_y2_Getter";
  y2_Getter_(mthis) => y2_Getter(mthis);

  static y2_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicSmoothRel_y2_Setter";
  y2_Setter_(mthis, __arg_0) => y2_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegCurvetoCubicSmoothRel_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegCurvetoCubicSmoothRel_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegCurvetoQuadraticAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoQuadraticAbs();

  static x1_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_x1_Getter";
  x1_Getter_(mthis) => x1_Getter(mthis);

  static x1_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticAbs_x1_Setter";
  x1_Setter_(mthis, __arg_0) => x1_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticAbs_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y1_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_y1_Getter";
  y1_Getter_(mthis) => y1_Getter(mthis);

  static y1_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticAbs_y1_Setter";
  y1_Setter_(mthis, __arg_0) => y1_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticAbs_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticAbs_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegCurvetoQuadraticRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoQuadraticRel();

  static x1_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_x1_Getter";
  x1_Getter_(mthis) => x1_Getter(mthis);

  static x1_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticRel_x1_Setter";
  x1_Setter_(mthis, __arg_0) => x1_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticRel_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y1_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_y1_Getter";
  y1_Getter_(mthis) => y1_Getter(mthis);

  static y1_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticRel_y1_Setter";
  y1_Setter_(mthis, __arg_0) => y1_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticRel_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticRel_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegCurvetoQuadraticSmoothAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoQuadraticSmoothAbs();

  static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticSmoothAbs_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticSmoothAbs_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegCurvetoQuadraticSmoothRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegCurvetoQuadraticSmoothRel();

  static x_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticSmoothRel_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegCurvetoQuadraticSmoothRel_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegLinetoAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoAbs();

  static x_Getter(mthis) native "SVGPathSegLinetoAbs_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegLinetoAbs_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegLinetoAbs_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegLinetoAbs_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegLinetoHorizontalAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoHorizontalAbs();

  static x_Getter(mthis) native "SVGPathSegLinetoHorizontalAbs_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegLinetoHorizontalAbs_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegLinetoHorizontalRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoHorizontalRel();

  static x_Getter(mthis) native "SVGPathSegLinetoHorizontalRel_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegLinetoHorizontalRel_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegLinetoRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoRel();

  static x_Getter(mthis) native "SVGPathSegLinetoRel_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegLinetoRel_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegLinetoRel_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegLinetoRel_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegLinetoVerticalAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoVerticalAbs();

  static y_Getter(mthis) native "SVGPathSegLinetoVerticalAbs_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegLinetoVerticalAbs_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegLinetoVerticalRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegLinetoVerticalRel();

  static y_Getter(mthis) native "SVGPathSegLinetoVerticalRel_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegLinetoVerticalRel_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegList {
  static final instance = new BlinkSVGPathSegList();

  static $__getter___Callback_1(mthis, __arg_0) native "SVGPathSegList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "SVGPathSegList___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_0(mthis) native "SVGPathSegList_appendItem_Callback";
  appendItem_Callback_0_(mthis) => appendItem_Callback_0(mthis);

  static appendItem_Callback_1(mthis, __arg_0) native "SVGPathSegList_appendItem_Callback";
  appendItem_Callback_1_(mthis, __arg_0) => appendItem_Callback_1(mthis, __arg_0);

  static appendItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathSegList_appendItem_Callback";
  appendItem_Callback_2_(mthis, __arg_0, __arg_1) => appendItem_Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathSegList_appendItem_Callback";
  appendItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clear_Callback_0(mthis) native "SVGPathSegList_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "SVGPathSegList_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathSegList_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_0(mthis) native "SVGPathSegList_getItem_Callback";
  getItem_Callback_0_(mthis) => getItem_Callback_0(mthis);

  static getItem_Callback_1(mthis, __arg_0) native "SVGPathSegList_getItem_Callback";
  getItem_Callback_1_(mthis, __arg_0) => getItem_Callback_1(mthis, __arg_0);

  static getItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathSegList_getItem_Callback";
  getItem_Callback_2_(mthis, __arg_0, __arg_1) => getItem_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathSegList_getItem_Callback";
  getItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initialize_Callback_0(mthis) native "SVGPathSegList_initialize_Callback";
  initialize_Callback_0_(mthis) => initialize_Callback_0(mthis);

  static initialize_Callback_1(mthis, __arg_0) native "SVGPathSegList_initialize_Callback";
  initialize_Callback_1_(mthis, __arg_0) => initialize_Callback_1(mthis, __arg_0);

  static initialize_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathSegList_initialize_Callback";
  initialize_Callback_2_(mthis, __arg_0, __arg_1) => initialize_Callback_2(mthis, __arg_0, __arg_1);

  static initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathSegList_initialize_Callback";
  initialize_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_0(mthis) native "SVGPathSegList_insertItemBefore_Callback";
  insertItemBefore_Callback_0_(mthis) => insertItemBefore_Callback_0(mthis);

  static insertItemBefore_Callback_1(mthis, __arg_0) native "SVGPathSegList_insertItemBefore_Callback";
  insertItemBefore_Callback_1_(mthis, __arg_0) => insertItemBefore_Callback_1(mthis, __arg_0);

  static insertItemBefore_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathSegList_insertItemBefore_Callback";
  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => insertItemBefore_Callback_2(mthis, __arg_0, __arg_1);

  static insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathSegList_insertItemBefore_Callback";
  insertItemBefore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathSegList_insertItemBefore_Callback";
  insertItemBefore_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static length_Getter(mthis) native "SVGPathSegList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static numberOfItems_Getter(mthis) native "SVGPathSegList_numberOfItems_Getter";
  numberOfItems_Getter_(mthis) => numberOfItems_Getter(mthis);

  static removeItem_Callback_0(mthis) native "SVGPathSegList_removeItem_Callback";
  removeItem_Callback_0_(mthis) => removeItem_Callback_0(mthis);

  static removeItem_Callback_1(mthis, __arg_0) native "SVGPathSegList_removeItem_Callback";
  removeItem_Callback_1_(mthis, __arg_0) => removeItem_Callback_1(mthis, __arg_0);

  static removeItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathSegList_removeItem_Callback";
  removeItem_Callback_2_(mthis, __arg_0, __arg_1) => removeItem_Callback_2(mthis, __arg_0, __arg_1);

  static removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathSegList_removeItem_Callback";
  removeItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_0(mthis) native "SVGPathSegList_replaceItem_Callback";
  replaceItem_Callback_0_(mthis) => replaceItem_Callback_0(mthis);

  static replaceItem_Callback_1(mthis, __arg_0) native "SVGPathSegList_replaceItem_Callback";
  replaceItem_Callback_1_(mthis, __arg_0) => replaceItem_Callback_1(mthis, __arg_0);

  static replaceItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGPathSegList_replaceItem_Callback";
  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => replaceItem_Callback_2(mthis, __arg_0, __arg_1);

  static replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPathSegList_replaceItem_Callback";
  replaceItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPathSegList_replaceItem_Callback";
  replaceItem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkSVGPathSegMovetoAbs extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegMovetoAbs();

  static x_Getter(mthis) native "SVGPathSegMovetoAbs_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegMovetoAbs_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegMovetoAbs_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegMovetoAbs_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPathSegMovetoRel extends BlinkSVGPathSeg {
  static final instance = new BlinkSVGPathSegMovetoRel();

  static x_Getter(mthis) native "SVGPathSegMovetoRel_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPathSegMovetoRel_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPathSegMovetoRel_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPathSegMovetoRel_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPatternElement extends BlinkSVGElement {
  static final instance = new BlinkSVGPatternElement();

  static hasExtension_Callback_0(mthis) native "SVGPatternElement_hasExtension_Callback";
  hasExtension_Callback_0_(mthis) => hasExtension_Callback_0(mthis);

  static hasExtension_Callback_1(mthis, __arg_0) native "SVGPatternElement_hasExtension_Callback";
  hasExtension_Callback_1_(mthis, __arg_0) => hasExtension_Callback_1(mthis, __arg_0);

  static hasExtension_Callback_2(mthis, __arg_0, __arg_1) native "SVGPatternElement_hasExtension_Callback";
  hasExtension_Callback_2_(mthis, __arg_0, __arg_1) => hasExtension_Callback_2(mthis, __arg_0, __arg_1);

  static hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPatternElement_hasExtension_Callback";
  hasExtension_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => hasExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static height_Getter(mthis) native "SVGPatternElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static href_Getter(mthis) native "SVGPatternElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static patternContentUnits_Getter(mthis) native "SVGPatternElement_patternContentUnits_Getter";
  patternContentUnits_Getter_(mthis) => patternContentUnits_Getter(mthis);

  static patternTransform_Getter(mthis) native "SVGPatternElement_patternTransform_Getter";
  patternTransform_Getter_(mthis) => patternTransform_Getter(mthis);

  static patternUnits_Getter(mthis) native "SVGPatternElement_patternUnits_Getter";
  patternUnits_Getter_(mthis) => patternUnits_Getter(mthis);

  static preserveAspectRatio_Getter(mthis) native "SVGPatternElement_preserveAspectRatio_Getter";
  preserveAspectRatio_Getter_(mthis) => preserveAspectRatio_Getter(mthis);

  static requiredExtensions_Getter(mthis) native "SVGPatternElement_requiredExtensions_Getter";
  requiredExtensions_Getter_(mthis) => requiredExtensions_Getter(mthis);

  static requiredFeatures_Getter(mthis) native "SVGPatternElement_requiredFeatures_Getter";
  requiredFeatures_Getter_(mthis) => requiredFeatures_Getter(mthis);

  static systemLanguage_Getter(mthis) native "SVGPatternElement_systemLanguage_Getter";
  systemLanguage_Getter_(mthis) => systemLanguage_Getter(mthis);

  static viewBox_Getter(mthis) native "SVGPatternElement_viewBox_Getter";
  viewBox_Getter_(mthis) => viewBox_Getter(mthis);

  static width_Getter(mthis) native "SVGPatternElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGPatternElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGPatternElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGPoint {
  static final instance = new BlinkSVGPoint();

  static matrixTransform_Callback_0(mthis) native "SVGPoint_matrixTransform_Callback";
  matrixTransform_Callback_0_(mthis) => matrixTransform_Callback_0(mthis);

  static matrixTransform_Callback_1(mthis, __arg_0) native "SVGPoint_matrixTransform_Callback";
  matrixTransform_Callback_1_(mthis, __arg_0) => matrixTransform_Callback_1(mthis, __arg_0);

  static matrixTransform_Callback_2(mthis, __arg_0, __arg_1) native "SVGPoint_matrixTransform_Callback";
  matrixTransform_Callback_2_(mthis, __arg_0, __arg_1) => matrixTransform_Callback_2(mthis, __arg_0, __arg_1);

  static matrixTransform_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPoint_matrixTransform_Callback";
  matrixTransform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => matrixTransform_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static x_Getter(mthis) native "SVGPoint_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGPoint_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGPoint_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGPoint_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGPointList {
  static final instance = new BlinkSVGPointList();

  static $__getter___Callback_1(mthis, __arg_0) native "SVGPointList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "SVGPointList___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_0(mthis) native "SVGPointList_appendItem_Callback";
  appendItem_Callback_0_(mthis) => appendItem_Callback_0(mthis);

  static appendItem_Callback_1(mthis, __arg_0) native "SVGPointList_appendItem_Callback";
  appendItem_Callback_1_(mthis, __arg_0) => appendItem_Callback_1(mthis, __arg_0);

  static appendItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGPointList_appendItem_Callback";
  appendItem_Callback_2_(mthis, __arg_0, __arg_1) => appendItem_Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPointList_appendItem_Callback";
  appendItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clear_Callback_0(mthis) native "SVGPointList_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "SVGPointList_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "SVGPointList_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_0(mthis) native "SVGPointList_getItem_Callback";
  getItem_Callback_0_(mthis) => getItem_Callback_0(mthis);

  static getItem_Callback_1(mthis, __arg_0) native "SVGPointList_getItem_Callback";
  getItem_Callback_1_(mthis, __arg_0) => getItem_Callback_1(mthis, __arg_0);

  static getItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGPointList_getItem_Callback";
  getItem_Callback_2_(mthis, __arg_0, __arg_1) => getItem_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPointList_getItem_Callback";
  getItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initialize_Callback_0(mthis) native "SVGPointList_initialize_Callback";
  initialize_Callback_0_(mthis) => initialize_Callback_0(mthis);

  static initialize_Callback_1(mthis, __arg_0) native "SVGPointList_initialize_Callback";
  initialize_Callback_1_(mthis, __arg_0) => initialize_Callback_1(mthis, __arg_0);

  static initialize_Callback_2(mthis, __arg_0, __arg_1) native "SVGPointList_initialize_Callback";
  initialize_Callback_2_(mthis, __arg_0, __arg_1) => initialize_Callback_2(mthis, __arg_0, __arg_1);

  static initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPointList_initialize_Callback";
  initialize_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_0(mthis) native "SVGPointList_insertItemBefore_Callback";
  insertItemBefore_Callback_0_(mthis) => insertItemBefore_Callback_0(mthis);

  static insertItemBefore_Callback_1(mthis, __arg_0) native "SVGPointList_insertItemBefore_Callback";
  insertItemBefore_Callback_1_(mthis, __arg_0) => insertItemBefore_Callback_1(mthis, __arg_0);

  static insertItemBefore_Callback_2(mthis, __arg_0, __arg_1) native "SVGPointList_insertItemBefore_Callback";
  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => insertItemBefore_Callback_2(mthis, __arg_0, __arg_1);

  static insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPointList_insertItemBefore_Callback";
  insertItemBefore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPointList_insertItemBefore_Callback";
  insertItemBefore_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static length_Getter(mthis) native "SVGPointList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static numberOfItems_Getter(mthis) native "SVGPointList_numberOfItems_Getter";
  numberOfItems_Getter_(mthis) => numberOfItems_Getter(mthis);

  static removeItem_Callback_0(mthis) native "SVGPointList_removeItem_Callback";
  removeItem_Callback_0_(mthis) => removeItem_Callback_0(mthis);

  static removeItem_Callback_1(mthis, __arg_0) native "SVGPointList_removeItem_Callback";
  removeItem_Callback_1_(mthis, __arg_0) => removeItem_Callback_1(mthis, __arg_0);

  static removeItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGPointList_removeItem_Callback";
  removeItem_Callback_2_(mthis, __arg_0, __arg_1) => removeItem_Callback_2(mthis, __arg_0, __arg_1);

  static removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPointList_removeItem_Callback";
  removeItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_0(mthis) native "SVGPointList_replaceItem_Callback";
  replaceItem_Callback_0_(mthis) => replaceItem_Callback_0(mthis);

  static replaceItem_Callback_1(mthis, __arg_0) native "SVGPointList_replaceItem_Callback";
  replaceItem_Callback_1_(mthis, __arg_0) => replaceItem_Callback_1(mthis, __arg_0);

  static replaceItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGPointList_replaceItem_Callback";
  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => replaceItem_Callback_2(mthis, __arg_0, __arg_1);

  static replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGPointList_replaceItem_Callback";
  replaceItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGPointList_replaceItem_Callback";
  replaceItem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkSVGPolygonElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGPolygonElement();

  static animatedPoints_Getter(mthis) native "SVGPolygonElement_animatedPoints_Getter";
  animatedPoints_Getter_(mthis) => animatedPoints_Getter(mthis);

  static points_Getter(mthis) native "SVGPolygonElement_points_Getter";
  points_Getter_(mthis) => points_Getter(mthis);

}

class BlinkSVGPolylineElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGPolylineElement();

  static animatedPoints_Getter(mthis) native "SVGPolylineElement_animatedPoints_Getter";
  animatedPoints_Getter_(mthis) => animatedPoints_Getter(mthis);

  static points_Getter(mthis) native "SVGPolylineElement_points_Getter";
  points_Getter_(mthis) => points_Getter(mthis);

}

class BlinkSVGPreserveAspectRatio {
  static final instance = new BlinkSVGPreserveAspectRatio();

  static align_Getter(mthis) native "SVGPreserveAspectRatio_align_Getter";
  align_Getter_(mthis) => align_Getter(mthis);

  static align_Setter(mthis, __arg_0) native "SVGPreserveAspectRatio_align_Setter";
  align_Setter_(mthis, __arg_0) => align_Setter(mthis, __arg_0);

  static meetOrSlice_Getter(mthis) native "SVGPreserveAspectRatio_meetOrSlice_Getter";
  meetOrSlice_Getter_(mthis) => meetOrSlice_Getter(mthis);

  static meetOrSlice_Setter(mthis, __arg_0) native "SVGPreserveAspectRatio_meetOrSlice_Setter";
  meetOrSlice_Setter_(mthis, __arg_0) => meetOrSlice_Setter(mthis, __arg_0);

}

class BlinkSVGRadialGradientElement extends BlinkSVGGradientElement {
  static final instance = new BlinkSVGRadialGradientElement();

  static cx_Getter(mthis) native "SVGRadialGradientElement_cx_Getter";
  cx_Getter_(mthis) => cx_Getter(mthis);

  static cy_Getter(mthis) native "SVGRadialGradientElement_cy_Getter";
  cy_Getter_(mthis) => cy_Getter(mthis);

  static fr_Getter(mthis) native "SVGRadialGradientElement_fr_Getter";
  fr_Getter_(mthis) => fr_Getter(mthis);

  static fx_Getter(mthis) native "SVGRadialGradientElement_fx_Getter";
  fx_Getter_(mthis) => fx_Getter(mthis);

  static fy_Getter(mthis) native "SVGRadialGradientElement_fy_Getter";
  fy_Getter_(mthis) => fy_Getter(mthis);

  static r_Getter(mthis) native "SVGRadialGradientElement_r_Getter";
  r_Getter_(mthis) => r_Getter(mthis);

}

class BlinkSVGRect {
  static final instance = new BlinkSVGRect();

  static height_Getter(mthis) native "SVGRect_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "SVGRect_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static width_Getter(mthis) native "SVGRect_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "SVGRect_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

  static x_Getter(mthis) native "SVGRect_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static x_Setter(mthis, __arg_0) native "SVGRect_x_Setter";
  x_Setter_(mthis, __arg_0) => x_Setter(mthis, __arg_0);

  static y_Getter(mthis) native "SVGRect_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static y_Setter(mthis, __arg_0) native "SVGRect_y_Setter";
  y_Setter_(mthis, __arg_0) => y_Setter(mthis, __arg_0);

}

class BlinkSVGRectElement extends BlinkSVGGeometryElement {
  static final instance = new BlinkSVGRectElement();

  static height_Getter(mthis) native "SVGRectElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static rx_Getter(mthis) native "SVGRectElement_rx_Getter";
  rx_Getter_(mthis) => rx_Getter(mthis);

  static ry_Getter(mthis) native "SVGRectElement_ry_Getter";
  ry_Getter_(mthis) => ry_Getter(mthis);

  static width_Getter(mthis) native "SVGRectElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGRectElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGRectElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGRenderingIntent {
  static final instance = new BlinkSVGRenderingIntent();

}

class BlinkSVGSVGElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGSVGElement();

  static animationsPaused_Callback_0(mthis) native "SVGSVGElement_animationsPaused_Callback";
  animationsPaused_Callback_0_(mthis) => animationsPaused_Callback_0(mthis);

  static animationsPaused_Callback_1(mthis, __arg_0) native "SVGSVGElement_animationsPaused_Callback";
  animationsPaused_Callback_1_(mthis, __arg_0) => animationsPaused_Callback_1(mthis, __arg_0);

  static animationsPaused_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_animationsPaused_Callback";
  animationsPaused_Callback_2_(mthis, __arg_0, __arg_1) => animationsPaused_Callback_2(mthis, __arg_0, __arg_1);

  static checkEnclosure_Callback_0(mthis) native "SVGSVGElement_checkEnclosure_Callback";
  checkEnclosure_Callback_0_(mthis) => checkEnclosure_Callback_0(mthis);

  static checkEnclosure_Callback_1(mthis, __arg_0) native "SVGSVGElement_checkEnclosure_Callback";
  checkEnclosure_Callback_1_(mthis, __arg_0) => checkEnclosure_Callback_1(mthis, __arg_0);

  static checkEnclosure_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_checkEnclosure_Callback";
  checkEnclosure_Callback_2_(mthis, __arg_0, __arg_1) => checkEnclosure_Callback_2(mthis, __arg_0, __arg_1);

  static checkEnclosure_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGSVGElement_checkEnclosure_Callback";
  checkEnclosure_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => checkEnclosure_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static checkEnclosure_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGSVGElement_checkEnclosure_Callback";
  checkEnclosure_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => checkEnclosure_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static checkIntersection_Callback_0(mthis) native "SVGSVGElement_checkIntersection_Callback";
  checkIntersection_Callback_0_(mthis) => checkIntersection_Callback_0(mthis);

  static checkIntersection_Callback_1(mthis, __arg_0) native "SVGSVGElement_checkIntersection_Callback";
  checkIntersection_Callback_1_(mthis, __arg_0) => checkIntersection_Callback_1(mthis, __arg_0);

  static checkIntersection_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_checkIntersection_Callback";
  checkIntersection_Callback_2_(mthis, __arg_0, __arg_1) => checkIntersection_Callback_2(mthis, __arg_0, __arg_1);

  static checkIntersection_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGSVGElement_checkIntersection_Callback";
  checkIntersection_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => checkIntersection_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static checkIntersection_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGSVGElement_checkIntersection_Callback";
  checkIntersection_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => checkIntersection_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createSVGAngle_Callback_0(mthis) native "SVGSVGElement_createSVGAngle_Callback";
  createSVGAngle_Callback_0_(mthis) => createSVGAngle_Callback_0(mthis);

  static createSVGAngle_Callback_1(mthis, __arg_0) native "SVGSVGElement_createSVGAngle_Callback";
  createSVGAngle_Callback_1_(mthis, __arg_0) => createSVGAngle_Callback_1(mthis, __arg_0);

  static createSVGAngle_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_createSVGAngle_Callback";
  createSVGAngle_Callback_2_(mthis, __arg_0, __arg_1) => createSVGAngle_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGLength_Callback_0(mthis) native "SVGSVGElement_createSVGLength_Callback";
  createSVGLength_Callback_0_(mthis) => createSVGLength_Callback_0(mthis);

  static createSVGLength_Callback_1(mthis, __arg_0) native "SVGSVGElement_createSVGLength_Callback";
  createSVGLength_Callback_1_(mthis, __arg_0) => createSVGLength_Callback_1(mthis, __arg_0);

  static createSVGLength_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_createSVGLength_Callback";
  createSVGLength_Callback_2_(mthis, __arg_0, __arg_1) => createSVGLength_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGMatrix_Callback_0(mthis) native "SVGSVGElement_createSVGMatrix_Callback";
  createSVGMatrix_Callback_0_(mthis) => createSVGMatrix_Callback_0(mthis);

  static createSVGMatrix_Callback_1(mthis, __arg_0) native "SVGSVGElement_createSVGMatrix_Callback";
  createSVGMatrix_Callback_1_(mthis, __arg_0) => createSVGMatrix_Callback_1(mthis, __arg_0);

  static createSVGMatrix_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_createSVGMatrix_Callback";
  createSVGMatrix_Callback_2_(mthis, __arg_0, __arg_1) => createSVGMatrix_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGNumber_Callback_0(mthis) native "SVGSVGElement_createSVGNumber_Callback";
  createSVGNumber_Callback_0_(mthis) => createSVGNumber_Callback_0(mthis);

  static createSVGNumber_Callback_1(mthis, __arg_0) native "SVGSVGElement_createSVGNumber_Callback";
  createSVGNumber_Callback_1_(mthis, __arg_0) => createSVGNumber_Callback_1(mthis, __arg_0);

  static createSVGNumber_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_createSVGNumber_Callback";
  createSVGNumber_Callback_2_(mthis, __arg_0, __arg_1) => createSVGNumber_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGPoint_Callback_0(mthis) native "SVGSVGElement_createSVGPoint_Callback";
  createSVGPoint_Callback_0_(mthis) => createSVGPoint_Callback_0(mthis);

  static createSVGPoint_Callback_1(mthis, __arg_0) native "SVGSVGElement_createSVGPoint_Callback";
  createSVGPoint_Callback_1_(mthis, __arg_0) => createSVGPoint_Callback_1(mthis, __arg_0);

  static createSVGPoint_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_createSVGPoint_Callback";
  createSVGPoint_Callback_2_(mthis, __arg_0, __arg_1) => createSVGPoint_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGRect_Callback_0(mthis) native "SVGSVGElement_createSVGRect_Callback";
  createSVGRect_Callback_0_(mthis) => createSVGRect_Callback_0(mthis);

  static createSVGRect_Callback_1(mthis, __arg_0) native "SVGSVGElement_createSVGRect_Callback";
  createSVGRect_Callback_1_(mthis, __arg_0) => createSVGRect_Callback_1(mthis, __arg_0);

  static createSVGRect_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_createSVGRect_Callback";
  createSVGRect_Callback_2_(mthis, __arg_0, __arg_1) => createSVGRect_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGTransformFromMatrix_Callback_0(mthis) native "SVGSVGElement_createSVGTransformFromMatrix_Callback";
  createSVGTransformFromMatrix_Callback_0_(mthis) => createSVGTransformFromMatrix_Callback_0(mthis);

  static createSVGTransformFromMatrix_Callback_1(mthis, __arg_0) native "SVGSVGElement_createSVGTransformFromMatrix_Callback";
  createSVGTransformFromMatrix_Callback_1_(mthis, __arg_0) => createSVGTransformFromMatrix_Callback_1(mthis, __arg_0);

  static createSVGTransformFromMatrix_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_createSVGTransformFromMatrix_Callback";
  createSVGTransformFromMatrix_Callback_2_(mthis, __arg_0, __arg_1) => createSVGTransformFromMatrix_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGTransformFromMatrix_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGSVGElement_createSVGTransformFromMatrix_Callback";
  createSVGTransformFromMatrix_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGTransformFromMatrix_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createSVGTransform_Callback_0(mthis) native "SVGSVGElement_createSVGTransform_Callback";
  createSVGTransform_Callback_0_(mthis) => createSVGTransform_Callback_0(mthis);

  static createSVGTransform_Callback_1(mthis, __arg_0) native "SVGSVGElement_createSVGTransform_Callback";
  createSVGTransform_Callback_1_(mthis, __arg_0) => createSVGTransform_Callback_1(mthis, __arg_0);

  static createSVGTransform_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_createSVGTransform_Callback";
  createSVGTransform_Callback_2_(mthis, __arg_0, __arg_1) => createSVGTransform_Callback_2(mthis, __arg_0, __arg_1);

  static currentScale_Getter(mthis) native "SVGSVGElement_currentScale_Getter";
  currentScale_Getter_(mthis) => currentScale_Getter(mthis);

  static currentScale_Setter(mthis, __arg_0) native "SVGSVGElement_currentScale_Setter";
  currentScale_Setter_(mthis, __arg_0) => currentScale_Setter(mthis, __arg_0);

  static currentTranslate_Getter(mthis) native "SVGSVGElement_currentTranslate_Getter";
  currentTranslate_Getter_(mthis) => currentTranslate_Getter(mthis);

  static currentView_Getter(mthis) native "SVGSVGElement_currentView_Getter";
  currentView_Getter_(mthis) => currentView_Getter(mthis);

  static deselectAll_Callback_0(mthis) native "SVGSVGElement_deselectAll_Callback";
  deselectAll_Callback_0_(mthis) => deselectAll_Callback_0(mthis);

  static deselectAll_Callback_1(mthis, __arg_0) native "SVGSVGElement_deselectAll_Callback";
  deselectAll_Callback_1_(mthis, __arg_0) => deselectAll_Callback_1(mthis, __arg_0);

  static deselectAll_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_deselectAll_Callback";
  deselectAll_Callback_2_(mthis, __arg_0, __arg_1) => deselectAll_Callback_2(mthis, __arg_0, __arg_1);

  static forceRedraw_Callback_0(mthis) native "SVGSVGElement_forceRedraw_Callback";
  forceRedraw_Callback_0_(mthis) => forceRedraw_Callback_0(mthis);

  static forceRedraw_Callback_1(mthis, __arg_0) native "SVGSVGElement_forceRedraw_Callback";
  forceRedraw_Callback_1_(mthis, __arg_0) => forceRedraw_Callback_1(mthis, __arg_0);

  static forceRedraw_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_forceRedraw_Callback";
  forceRedraw_Callback_2_(mthis, __arg_0, __arg_1) => forceRedraw_Callback_2(mthis, __arg_0, __arg_1);

  static getCurrentTime_Callback_0(mthis) native "SVGSVGElement_getCurrentTime_Callback";
  getCurrentTime_Callback_0_(mthis) => getCurrentTime_Callback_0(mthis);

  static getCurrentTime_Callback_1(mthis, __arg_0) native "SVGSVGElement_getCurrentTime_Callback";
  getCurrentTime_Callback_1_(mthis, __arg_0) => getCurrentTime_Callback_1(mthis, __arg_0);

  static getCurrentTime_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_getCurrentTime_Callback";
  getCurrentTime_Callback_2_(mthis, __arg_0, __arg_1) => getCurrentTime_Callback_2(mthis, __arg_0, __arg_1);

  static getElementById_Callback_0(mthis) native "SVGSVGElement_getElementById_Callback";
  getElementById_Callback_0_(mthis) => getElementById_Callback_0(mthis);

  static getElementById_Callback_1(mthis, __arg_0) native "SVGSVGElement_getElementById_Callback";
  getElementById_Callback_1_(mthis, __arg_0) => getElementById_Callback_1(mthis, __arg_0);

  static getElementById_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_getElementById_Callback";
  getElementById_Callback_2_(mthis, __arg_0, __arg_1) => getElementById_Callback_2(mthis, __arg_0, __arg_1);

  static getElementById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGSVGElement_getElementById_Callback";
  getElementById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getEnclosureList_Callback_0(mthis) native "SVGSVGElement_getEnclosureList_Callback";
  getEnclosureList_Callback_0_(mthis) => getEnclosureList_Callback_0(mthis);

  static getEnclosureList_Callback_1(mthis, __arg_0) native "SVGSVGElement_getEnclosureList_Callback";
  getEnclosureList_Callback_1_(mthis, __arg_0) => getEnclosureList_Callback_1(mthis, __arg_0);

  static getEnclosureList_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_getEnclosureList_Callback";
  getEnclosureList_Callback_2_(mthis, __arg_0, __arg_1) => getEnclosureList_Callback_2(mthis, __arg_0, __arg_1);

  static getEnclosureList_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGSVGElement_getEnclosureList_Callback";
  getEnclosureList_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getEnclosureList_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getEnclosureList_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGSVGElement_getEnclosureList_Callback";
  getEnclosureList_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getEnclosureList_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getIntersectionList_Callback_0(mthis) native "SVGSVGElement_getIntersectionList_Callback";
  getIntersectionList_Callback_0_(mthis) => getIntersectionList_Callback_0(mthis);

  static getIntersectionList_Callback_1(mthis, __arg_0) native "SVGSVGElement_getIntersectionList_Callback";
  getIntersectionList_Callback_1_(mthis, __arg_0) => getIntersectionList_Callback_1(mthis, __arg_0);

  static getIntersectionList_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_getIntersectionList_Callback";
  getIntersectionList_Callback_2_(mthis, __arg_0, __arg_1) => getIntersectionList_Callback_2(mthis, __arg_0, __arg_1);

  static getIntersectionList_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGSVGElement_getIntersectionList_Callback";
  getIntersectionList_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getIntersectionList_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getIntersectionList_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGSVGElement_getIntersectionList_Callback";
  getIntersectionList_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getIntersectionList_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static height_Getter(mthis) native "SVGSVGElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static pauseAnimations_Callback_0(mthis) native "SVGSVGElement_pauseAnimations_Callback";
  pauseAnimations_Callback_0_(mthis) => pauseAnimations_Callback_0(mthis);

  static pauseAnimations_Callback_1(mthis, __arg_0) native "SVGSVGElement_pauseAnimations_Callback";
  pauseAnimations_Callback_1_(mthis, __arg_0) => pauseAnimations_Callback_1(mthis, __arg_0);

  static pauseAnimations_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_pauseAnimations_Callback";
  pauseAnimations_Callback_2_(mthis, __arg_0, __arg_1) => pauseAnimations_Callback_2(mthis, __arg_0, __arg_1);

  static pixelUnitToMillimeterX_Getter(mthis) native "SVGSVGElement_pixelUnitToMillimeterX_Getter";
  pixelUnitToMillimeterX_Getter_(mthis) => pixelUnitToMillimeterX_Getter(mthis);

  static pixelUnitToMillimeterY_Getter(mthis) native "SVGSVGElement_pixelUnitToMillimeterY_Getter";
  pixelUnitToMillimeterY_Getter_(mthis) => pixelUnitToMillimeterY_Getter(mthis);

  static preserveAspectRatio_Getter(mthis) native "SVGSVGElement_preserveAspectRatio_Getter";
  preserveAspectRatio_Getter_(mthis) => preserveAspectRatio_Getter(mthis);

  static screenPixelToMillimeterX_Getter(mthis) native "SVGSVGElement_screenPixelToMillimeterX_Getter";
  screenPixelToMillimeterX_Getter_(mthis) => screenPixelToMillimeterX_Getter(mthis);

  static screenPixelToMillimeterY_Getter(mthis) native "SVGSVGElement_screenPixelToMillimeterY_Getter";
  screenPixelToMillimeterY_Getter_(mthis) => screenPixelToMillimeterY_Getter(mthis);

  static setCurrentTime_Callback_0(mthis) native "SVGSVGElement_setCurrentTime_Callback";
  setCurrentTime_Callback_0_(mthis) => setCurrentTime_Callback_0(mthis);

  static setCurrentTime_Callback_1(mthis, __arg_0) native "SVGSVGElement_setCurrentTime_Callback";
  setCurrentTime_Callback_1_(mthis, __arg_0) => setCurrentTime_Callback_1(mthis, __arg_0);

  static setCurrentTime_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_setCurrentTime_Callback";
  setCurrentTime_Callback_2_(mthis, __arg_0, __arg_1) => setCurrentTime_Callback_2(mthis, __arg_0, __arg_1);

  static setCurrentTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGSVGElement_setCurrentTime_Callback";
  setCurrentTime_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setCurrentTime_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static suspendRedraw_Callback_0(mthis) native "SVGSVGElement_suspendRedraw_Callback";
  suspendRedraw_Callback_0_(mthis) => suspendRedraw_Callback_0(mthis);

  static suspendRedraw_Callback_1(mthis, __arg_0) native "SVGSVGElement_suspendRedraw_Callback";
  suspendRedraw_Callback_1_(mthis, __arg_0) => suspendRedraw_Callback_1(mthis, __arg_0);

  static suspendRedraw_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_suspendRedraw_Callback";
  suspendRedraw_Callback_2_(mthis, __arg_0, __arg_1) => suspendRedraw_Callback_2(mthis, __arg_0, __arg_1);

  static suspendRedraw_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGSVGElement_suspendRedraw_Callback";
  suspendRedraw_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => suspendRedraw_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static unpauseAnimations_Callback_0(mthis) native "SVGSVGElement_unpauseAnimations_Callback";
  unpauseAnimations_Callback_0_(mthis) => unpauseAnimations_Callback_0(mthis);

  static unpauseAnimations_Callback_1(mthis, __arg_0) native "SVGSVGElement_unpauseAnimations_Callback";
  unpauseAnimations_Callback_1_(mthis, __arg_0) => unpauseAnimations_Callback_1(mthis, __arg_0);

  static unpauseAnimations_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_unpauseAnimations_Callback";
  unpauseAnimations_Callback_2_(mthis, __arg_0, __arg_1) => unpauseAnimations_Callback_2(mthis, __arg_0, __arg_1);

  static unsuspendRedrawAll_Callback_0(mthis) native "SVGSVGElement_unsuspendRedrawAll_Callback";
  unsuspendRedrawAll_Callback_0_(mthis) => unsuspendRedrawAll_Callback_0(mthis);

  static unsuspendRedrawAll_Callback_1(mthis, __arg_0) native "SVGSVGElement_unsuspendRedrawAll_Callback";
  unsuspendRedrawAll_Callback_1_(mthis, __arg_0) => unsuspendRedrawAll_Callback_1(mthis, __arg_0);

  static unsuspendRedrawAll_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_unsuspendRedrawAll_Callback";
  unsuspendRedrawAll_Callback_2_(mthis, __arg_0, __arg_1) => unsuspendRedrawAll_Callback_2(mthis, __arg_0, __arg_1);

  static unsuspendRedraw_Callback_0(mthis) native "SVGSVGElement_unsuspendRedraw_Callback";
  unsuspendRedraw_Callback_0_(mthis) => unsuspendRedraw_Callback_0(mthis);

  static unsuspendRedraw_Callback_1(mthis, __arg_0) native "SVGSVGElement_unsuspendRedraw_Callback";
  unsuspendRedraw_Callback_1_(mthis, __arg_0) => unsuspendRedraw_Callback_1(mthis, __arg_0);

  static unsuspendRedraw_Callback_2(mthis, __arg_0, __arg_1) native "SVGSVGElement_unsuspendRedraw_Callback";
  unsuspendRedraw_Callback_2_(mthis, __arg_0, __arg_1) => unsuspendRedraw_Callback_2(mthis, __arg_0, __arg_1);

  static unsuspendRedraw_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGSVGElement_unsuspendRedraw_Callback";
  unsuspendRedraw_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => unsuspendRedraw_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static useCurrentView_Getter(mthis) native "SVGSVGElement_useCurrentView_Getter";
  useCurrentView_Getter_(mthis) => useCurrentView_Getter(mthis);

  static viewBox_Getter(mthis) native "SVGSVGElement_viewBox_Getter";
  viewBox_Getter_(mthis) => viewBox_Getter(mthis);

  static viewport_Getter(mthis) native "SVGSVGElement_viewport_Getter";
  viewport_Getter_(mthis) => viewport_Getter(mthis);

  static width_Getter(mthis) native "SVGSVGElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGSVGElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGSVGElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

  static zoomAndPan_Getter(mthis) native "SVGSVGElement_zoomAndPan_Getter";
  zoomAndPan_Getter_(mthis) => zoomAndPan_Getter(mthis);

  static zoomAndPan_Setter(mthis, __arg_0) native "SVGSVGElement_zoomAndPan_Setter";
  zoomAndPan_Setter_(mthis, __arg_0) => zoomAndPan_Setter(mthis, __arg_0);

}

class BlinkSVGScriptElement extends BlinkSVGElement {
  static final instance = new BlinkSVGScriptElement();

  static href_Getter(mthis) native "SVGScriptElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static type_Getter(mthis) native "SVGScriptElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "SVGScriptElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkSVGSetElement extends BlinkSVGAnimationElement {
  static final instance = new BlinkSVGSetElement();

}

class BlinkSVGStopElement extends BlinkSVGElement {
  static final instance = new BlinkSVGStopElement();

  static offset_Getter(mthis) native "SVGStopElement_offset_Getter";
  offset_Getter_(mthis) => offset_Getter(mthis);

}

class BlinkSVGStringList {
  static final instance = new BlinkSVGStringList();

  static $__getter___Callback_1(mthis, __arg_0) native "SVGStringList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "SVGStringList___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_0(mthis) native "SVGStringList_appendItem_Callback";
  appendItem_Callback_0_(mthis) => appendItem_Callback_0(mthis);

  static appendItem_Callback_1(mthis, __arg_0) native "SVGStringList_appendItem_Callback";
  appendItem_Callback_1_(mthis, __arg_0) => appendItem_Callback_1(mthis, __arg_0);

  static appendItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGStringList_appendItem_Callback";
  appendItem_Callback_2_(mthis, __arg_0, __arg_1) => appendItem_Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGStringList_appendItem_Callback";
  appendItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clear_Callback_0(mthis) native "SVGStringList_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "SVGStringList_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "SVGStringList_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_0(mthis) native "SVGStringList_getItem_Callback";
  getItem_Callback_0_(mthis) => getItem_Callback_0(mthis);

  static getItem_Callback_1(mthis, __arg_0) native "SVGStringList_getItem_Callback";
  getItem_Callback_1_(mthis, __arg_0) => getItem_Callback_1(mthis, __arg_0);

  static getItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGStringList_getItem_Callback";
  getItem_Callback_2_(mthis, __arg_0, __arg_1) => getItem_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGStringList_getItem_Callback";
  getItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initialize_Callback_0(mthis) native "SVGStringList_initialize_Callback";
  initialize_Callback_0_(mthis) => initialize_Callback_0(mthis);

  static initialize_Callback_1(mthis, __arg_0) native "SVGStringList_initialize_Callback";
  initialize_Callback_1_(mthis, __arg_0) => initialize_Callback_1(mthis, __arg_0);

  static initialize_Callback_2(mthis, __arg_0, __arg_1) native "SVGStringList_initialize_Callback";
  initialize_Callback_2_(mthis, __arg_0, __arg_1) => initialize_Callback_2(mthis, __arg_0, __arg_1);

  static initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGStringList_initialize_Callback";
  initialize_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_0(mthis) native "SVGStringList_insertItemBefore_Callback";
  insertItemBefore_Callback_0_(mthis) => insertItemBefore_Callback_0(mthis);

  static insertItemBefore_Callback_1(mthis, __arg_0) native "SVGStringList_insertItemBefore_Callback";
  insertItemBefore_Callback_1_(mthis, __arg_0) => insertItemBefore_Callback_1(mthis, __arg_0);

  static insertItemBefore_Callback_2(mthis, __arg_0, __arg_1) native "SVGStringList_insertItemBefore_Callback";
  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => insertItemBefore_Callback_2(mthis, __arg_0, __arg_1);

  static insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGStringList_insertItemBefore_Callback";
  insertItemBefore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGStringList_insertItemBefore_Callback";
  insertItemBefore_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static length_Getter(mthis) native "SVGStringList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static numberOfItems_Getter(mthis) native "SVGStringList_numberOfItems_Getter";
  numberOfItems_Getter_(mthis) => numberOfItems_Getter(mthis);

  static removeItem_Callback_0(mthis) native "SVGStringList_removeItem_Callback";
  removeItem_Callback_0_(mthis) => removeItem_Callback_0(mthis);

  static removeItem_Callback_1(mthis, __arg_0) native "SVGStringList_removeItem_Callback";
  removeItem_Callback_1_(mthis, __arg_0) => removeItem_Callback_1(mthis, __arg_0);

  static removeItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGStringList_removeItem_Callback";
  removeItem_Callback_2_(mthis, __arg_0, __arg_1) => removeItem_Callback_2(mthis, __arg_0, __arg_1);

  static removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGStringList_removeItem_Callback";
  removeItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_0(mthis) native "SVGStringList_replaceItem_Callback";
  replaceItem_Callback_0_(mthis) => replaceItem_Callback_0(mthis);

  static replaceItem_Callback_1(mthis, __arg_0) native "SVGStringList_replaceItem_Callback";
  replaceItem_Callback_1_(mthis, __arg_0) => replaceItem_Callback_1(mthis, __arg_0);

  static replaceItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGStringList_replaceItem_Callback";
  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => replaceItem_Callback_2(mthis, __arg_0, __arg_1);

  static replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGStringList_replaceItem_Callback";
  replaceItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGStringList_replaceItem_Callback";
  replaceItem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkSVGStyleElement extends BlinkSVGElement {
  static final instance = new BlinkSVGStyleElement();

  static disabled_Getter(mthis) native "SVGStyleElement_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "SVGStyleElement_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static media_Getter(mthis) native "SVGStyleElement_media_Getter";
  media_Getter_(mthis) => media_Getter(mthis);

  static media_Setter(mthis, __arg_0) native "SVGStyleElement_media_Setter";
  media_Setter_(mthis, __arg_0) => media_Setter(mthis, __arg_0);

  static sheet_Getter(mthis) native "SVGStyleElement_sheet_Getter";
  sheet_Getter_(mthis) => sheet_Getter(mthis);

  static title_Getter(mthis) native "SVGStyleElement_title_Getter";
  title_Getter_(mthis) => title_Getter(mthis);

  static title_Setter(mthis, __arg_0) native "SVGStyleElement_title_Setter";
  title_Setter_(mthis, __arg_0) => title_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "SVGStyleElement_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static type_Setter(mthis, __arg_0) native "SVGStyleElement_type_Setter";
  type_Setter_(mthis, __arg_0) => type_Setter(mthis, __arg_0);

}

class BlinkSVGSwitchElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGSwitchElement();

}

class BlinkSVGSymbolElement extends BlinkSVGElement {
  static final instance = new BlinkSVGSymbolElement();

  static preserveAspectRatio_Getter(mthis) native "SVGSymbolElement_preserveAspectRatio_Getter";
  preserveAspectRatio_Getter_(mthis) => preserveAspectRatio_Getter(mthis);

  static viewBox_Getter(mthis) native "SVGSymbolElement_viewBox_Getter";
  viewBox_Getter_(mthis) => viewBox_Getter(mthis);

}

class BlinkSVGTSpanElement extends BlinkSVGTextPositioningElement {
  static final instance = new BlinkSVGTSpanElement();

}

class BlinkSVGTextContentElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGTextContentElement();

  static getCharNumAtPosition_Callback_0(mthis) native "SVGTextContentElement_getCharNumAtPosition_Callback";
  getCharNumAtPosition_Callback_0_(mthis) => getCharNumAtPosition_Callback_0(mthis);

  static getCharNumAtPosition_Callback_1(mthis, __arg_0) native "SVGTextContentElement_getCharNumAtPosition_Callback";
  getCharNumAtPosition_Callback_1_(mthis, __arg_0) => getCharNumAtPosition_Callback_1(mthis, __arg_0);

  static getCharNumAtPosition_Callback_2(mthis, __arg_0, __arg_1) native "SVGTextContentElement_getCharNumAtPosition_Callback";
  getCharNumAtPosition_Callback_2_(mthis, __arg_0, __arg_1) => getCharNumAtPosition_Callback_2(mthis, __arg_0, __arg_1);

  static getCharNumAtPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTextContentElement_getCharNumAtPosition_Callback";
  getCharNumAtPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getCharNumAtPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getComputedTextLength_Callback_0(mthis) native "SVGTextContentElement_getComputedTextLength_Callback";
  getComputedTextLength_Callback_0_(mthis) => getComputedTextLength_Callback_0(mthis);

  static getComputedTextLength_Callback_1(mthis, __arg_0) native "SVGTextContentElement_getComputedTextLength_Callback";
  getComputedTextLength_Callback_1_(mthis, __arg_0) => getComputedTextLength_Callback_1(mthis, __arg_0);

  static getComputedTextLength_Callback_2(mthis, __arg_0, __arg_1) native "SVGTextContentElement_getComputedTextLength_Callback";
  getComputedTextLength_Callback_2_(mthis, __arg_0, __arg_1) => getComputedTextLength_Callback_2(mthis, __arg_0, __arg_1);

  static getEndPositionOfChar_Callback_0(mthis) native "SVGTextContentElement_getEndPositionOfChar_Callback";
  getEndPositionOfChar_Callback_0_(mthis) => getEndPositionOfChar_Callback_0(mthis);

  static getEndPositionOfChar_Callback_1(mthis, __arg_0) native "SVGTextContentElement_getEndPositionOfChar_Callback";
  getEndPositionOfChar_Callback_1_(mthis, __arg_0) => getEndPositionOfChar_Callback_1(mthis, __arg_0);

  static getEndPositionOfChar_Callback_2(mthis, __arg_0, __arg_1) native "SVGTextContentElement_getEndPositionOfChar_Callback";
  getEndPositionOfChar_Callback_2_(mthis, __arg_0, __arg_1) => getEndPositionOfChar_Callback_2(mthis, __arg_0, __arg_1);

  static getEndPositionOfChar_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTextContentElement_getEndPositionOfChar_Callback";
  getEndPositionOfChar_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getEndPositionOfChar_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getExtentOfChar_Callback_0(mthis) native "SVGTextContentElement_getExtentOfChar_Callback";
  getExtentOfChar_Callback_0_(mthis) => getExtentOfChar_Callback_0(mthis);

  static getExtentOfChar_Callback_1(mthis, __arg_0) native "SVGTextContentElement_getExtentOfChar_Callback";
  getExtentOfChar_Callback_1_(mthis, __arg_0) => getExtentOfChar_Callback_1(mthis, __arg_0);

  static getExtentOfChar_Callback_2(mthis, __arg_0, __arg_1) native "SVGTextContentElement_getExtentOfChar_Callback";
  getExtentOfChar_Callback_2_(mthis, __arg_0, __arg_1) => getExtentOfChar_Callback_2(mthis, __arg_0, __arg_1);

  static getExtentOfChar_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTextContentElement_getExtentOfChar_Callback";
  getExtentOfChar_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getExtentOfChar_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getNumberOfChars_Callback_0(mthis) native "SVGTextContentElement_getNumberOfChars_Callback";
  getNumberOfChars_Callback_0_(mthis) => getNumberOfChars_Callback_0(mthis);

  static getNumberOfChars_Callback_1(mthis, __arg_0) native "SVGTextContentElement_getNumberOfChars_Callback";
  getNumberOfChars_Callback_1_(mthis, __arg_0) => getNumberOfChars_Callback_1(mthis, __arg_0);

  static getNumberOfChars_Callback_2(mthis, __arg_0, __arg_1) native "SVGTextContentElement_getNumberOfChars_Callback";
  getNumberOfChars_Callback_2_(mthis, __arg_0, __arg_1) => getNumberOfChars_Callback_2(mthis, __arg_0, __arg_1);

  static getRotationOfChar_Callback_0(mthis) native "SVGTextContentElement_getRotationOfChar_Callback";
  getRotationOfChar_Callback_0_(mthis) => getRotationOfChar_Callback_0(mthis);

  static getRotationOfChar_Callback_1(mthis, __arg_0) native "SVGTextContentElement_getRotationOfChar_Callback";
  getRotationOfChar_Callback_1_(mthis, __arg_0) => getRotationOfChar_Callback_1(mthis, __arg_0);

  static getRotationOfChar_Callback_2(mthis, __arg_0, __arg_1) native "SVGTextContentElement_getRotationOfChar_Callback";
  getRotationOfChar_Callback_2_(mthis, __arg_0, __arg_1) => getRotationOfChar_Callback_2(mthis, __arg_0, __arg_1);

  static getRotationOfChar_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTextContentElement_getRotationOfChar_Callback";
  getRotationOfChar_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getRotationOfChar_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getStartPositionOfChar_Callback_0(mthis) native "SVGTextContentElement_getStartPositionOfChar_Callback";
  getStartPositionOfChar_Callback_0_(mthis) => getStartPositionOfChar_Callback_0(mthis);

  static getStartPositionOfChar_Callback_1(mthis, __arg_0) native "SVGTextContentElement_getStartPositionOfChar_Callback";
  getStartPositionOfChar_Callback_1_(mthis, __arg_0) => getStartPositionOfChar_Callback_1(mthis, __arg_0);

  static getStartPositionOfChar_Callback_2(mthis, __arg_0, __arg_1) native "SVGTextContentElement_getStartPositionOfChar_Callback";
  getStartPositionOfChar_Callback_2_(mthis, __arg_0, __arg_1) => getStartPositionOfChar_Callback_2(mthis, __arg_0, __arg_1);

  static getStartPositionOfChar_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTextContentElement_getStartPositionOfChar_Callback";
  getStartPositionOfChar_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getStartPositionOfChar_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getSubStringLength_Callback_0(mthis) native "SVGTextContentElement_getSubStringLength_Callback";
  getSubStringLength_Callback_0_(mthis) => getSubStringLength_Callback_0(mthis);

  static getSubStringLength_Callback_1(mthis, __arg_0) native "SVGTextContentElement_getSubStringLength_Callback";
  getSubStringLength_Callback_1_(mthis, __arg_0) => getSubStringLength_Callback_1(mthis, __arg_0);

  static getSubStringLength_Callback_2(mthis, __arg_0, __arg_1) native "SVGTextContentElement_getSubStringLength_Callback";
  getSubStringLength_Callback_2_(mthis, __arg_0, __arg_1) => getSubStringLength_Callback_2(mthis, __arg_0, __arg_1);

  static getSubStringLength_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTextContentElement_getSubStringLength_Callback";
  getSubStringLength_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getSubStringLength_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getSubStringLength_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGTextContentElement_getSubStringLength_Callback";
  getSubStringLength_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getSubStringLength_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static lengthAdjust_Getter(mthis) native "SVGTextContentElement_lengthAdjust_Getter";
  lengthAdjust_Getter_(mthis) => lengthAdjust_Getter(mthis);

  static selectSubString_Callback_0(mthis) native "SVGTextContentElement_selectSubString_Callback";
  selectSubString_Callback_0_(mthis) => selectSubString_Callback_0(mthis);

  static selectSubString_Callback_1(mthis, __arg_0) native "SVGTextContentElement_selectSubString_Callback";
  selectSubString_Callback_1_(mthis, __arg_0) => selectSubString_Callback_1(mthis, __arg_0);

  static selectSubString_Callback_2(mthis, __arg_0, __arg_1) native "SVGTextContentElement_selectSubString_Callback";
  selectSubString_Callback_2_(mthis, __arg_0, __arg_1) => selectSubString_Callback_2(mthis, __arg_0, __arg_1);

  static selectSubString_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTextContentElement_selectSubString_Callback";
  selectSubString_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => selectSubString_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static selectSubString_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGTextContentElement_selectSubString_Callback";
  selectSubString_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => selectSubString_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static textLength_Getter(mthis) native "SVGTextContentElement_textLength_Getter";
  textLength_Getter_(mthis) => textLength_Getter(mthis);

}

class BlinkSVGTextElement extends BlinkSVGTextPositioningElement {
  static final instance = new BlinkSVGTextElement();

}

class BlinkSVGTextPathElement extends BlinkSVGTextContentElement {
  static final instance = new BlinkSVGTextPathElement();

  static href_Getter(mthis) native "SVGTextPathElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static method_Getter(mthis) native "SVGTextPathElement_method_Getter";
  method_Getter_(mthis) => method_Getter(mthis);

  static spacing_Getter(mthis) native "SVGTextPathElement_spacing_Getter";
  spacing_Getter_(mthis) => spacing_Getter(mthis);

  static startOffset_Getter(mthis) native "SVGTextPathElement_startOffset_Getter";
  startOffset_Getter_(mthis) => startOffset_Getter(mthis);

}

class BlinkSVGTextPositioningElement extends BlinkSVGTextContentElement {
  static final instance = new BlinkSVGTextPositioningElement();

  static dx_Getter(mthis) native "SVGTextPositioningElement_dx_Getter";
  dx_Getter_(mthis) => dx_Getter(mthis);

  static dy_Getter(mthis) native "SVGTextPositioningElement_dy_Getter";
  dy_Getter_(mthis) => dy_Getter(mthis);

  static rotate_Getter(mthis) native "SVGTextPositioningElement_rotate_Getter";
  rotate_Getter_(mthis) => rotate_Getter(mthis);

  static x_Getter(mthis) native "SVGTextPositioningElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGTextPositioningElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGTitleElement extends BlinkSVGElement {
  static final instance = new BlinkSVGTitleElement();

}

class BlinkSVGTransform {
  static final instance = new BlinkSVGTransform();

  static angle_Getter(mthis) native "SVGTransform_angle_Getter";
  angle_Getter_(mthis) => angle_Getter(mthis);

  static matrix_Getter(mthis) native "SVGTransform_matrix_Getter";
  matrix_Getter_(mthis) => matrix_Getter(mthis);

  static setMatrix_Callback_0(mthis) native "SVGTransform_setMatrix_Callback";
  setMatrix_Callback_0_(mthis) => setMatrix_Callback_0(mthis);

  static setMatrix_Callback_1(mthis, __arg_0) native "SVGTransform_setMatrix_Callback";
  setMatrix_Callback_1_(mthis, __arg_0) => setMatrix_Callback_1(mthis, __arg_0);

  static setMatrix_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransform_setMatrix_Callback";
  setMatrix_Callback_2_(mthis, __arg_0, __arg_1) => setMatrix_Callback_2(mthis, __arg_0, __arg_1);

  static setMatrix_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransform_setMatrix_Callback";
  setMatrix_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setMatrix_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setRotate_Callback_1(mthis, __arg_0) native "SVGTransform_setRotate_Callback";
  setRotate_Callback_1_(mthis, __arg_0) => setRotate_Callback_1(mthis, __arg_0);

  static setRotate_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransform_setRotate_Callback";
  setRotate_Callback_2_(mthis, __arg_0, __arg_1) => setRotate_Callback_2(mthis, __arg_0, __arg_1);

  static setRotate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransform_setRotate_Callback";
  setRotate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setRotate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setRotate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGTransform_setRotate_Callback";
  setRotate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setRotate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setRotate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SVGTransform_setRotate_Callback";
  setRotate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setRotate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setScale_Callback_0(mthis) native "SVGTransform_setScale_Callback";
  setScale_Callback_0_(mthis) => setScale_Callback_0(mthis);

  static setScale_Callback_1(mthis, __arg_0) native "SVGTransform_setScale_Callback";
  setScale_Callback_1_(mthis, __arg_0) => setScale_Callback_1(mthis, __arg_0);

  static setScale_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransform_setScale_Callback";
  setScale_Callback_2_(mthis, __arg_0, __arg_1) => setScale_Callback_2(mthis, __arg_0, __arg_1);

  static setScale_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransform_setScale_Callback";
  setScale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setScale_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setScale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGTransform_setScale_Callback";
  setScale_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setScale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setSkewX_Callback_0(mthis) native "SVGTransform_setSkewX_Callback";
  setSkewX_Callback_0_(mthis) => setSkewX_Callback_0(mthis);

  static setSkewX_Callback_1(mthis, __arg_0) native "SVGTransform_setSkewX_Callback";
  setSkewX_Callback_1_(mthis, __arg_0) => setSkewX_Callback_1(mthis, __arg_0);

  static setSkewX_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransform_setSkewX_Callback";
  setSkewX_Callback_2_(mthis, __arg_0, __arg_1) => setSkewX_Callback_2(mthis, __arg_0, __arg_1);

  static setSkewX_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransform_setSkewX_Callback";
  setSkewX_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setSkewX_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setSkewY_Callback_0(mthis) native "SVGTransform_setSkewY_Callback";
  setSkewY_Callback_0_(mthis) => setSkewY_Callback_0(mthis);

  static setSkewY_Callback_1(mthis, __arg_0) native "SVGTransform_setSkewY_Callback";
  setSkewY_Callback_1_(mthis, __arg_0) => setSkewY_Callback_1(mthis, __arg_0);

  static setSkewY_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransform_setSkewY_Callback";
  setSkewY_Callback_2_(mthis, __arg_0, __arg_1) => setSkewY_Callback_2(mthis, __arg_0, __arg_1);

  static setSkewY_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransform_setSkewY_Callback";
  setSkewY_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setSkewY_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setTranslate_Callback_0(mthis) native "SVGTransform_setTranslate_Callback";
  setTranslate_Callback_0_(mthis) => setTranslate_Callback_0(mthis);

  static setTranslate_Callback_1(mthis, __arg_0) native "SVGTransform_setTranslate_Callback";
  setTranslate_Callback_1_(mthis, __arg_0) => setTranslate_Callback_1(mthis, __arg_0);

  static setTranslate_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransform_setTranslate_Callback";
  setTranslate_Callback_2_(mthis, __arg_0, __arg_1) => setTranslate_Callback_2(mthis, __arg_0, __arg_1);

  static setTranslate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransform_setTranslate_Callback";
  setTranslate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setTranslate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setTranslate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGTransform_setTranslate_Callback";
  setTranslate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setTranslate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static type_Getter(mthis) native "SVGTransform_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkSVGTransformList {
  static final instance = new BlinkSVGTransformList();

  static $__getter___Callback_1(mthis, __arg_0) native "SVGTransformList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_0(mthis) native "SVGTransformList_appendItem_Callback";
  appendItem_Callback_0_(mthis) => appendItem_Callback_0(mthis);

  static appendItem_Callback_1(mthis, __arg_0) native "SVGTransformList_appendItem_Callback";
  appendItem_Callback_1_(mthis, __arg_0) => appendItem_Callback_1(mthis, __arg_0);

  static appendItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList_appendItem_Callback";
  appendItem_Callback_2_(mthis, __arg_0, __arg_1) => appendItem_Callback_2(mthis, __arg_0, __arg_1);

  static appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransformList_appendItem_Callback";
  appendItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clear_Callback_0(mthis) native "SVGTransformList_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "SVGTransformList_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static consolidate_Callback_0(mthis) native "SVGTransformList_consolidate_Callback";
  consolidate_Callback_0_(mthis) => consolidate_Callback_0(mthis);

  static consolidate_Callback_1(mthis, __arg_0) native "SVGTransformList_consolidate_Callback";
  consolidate_Callback_1_(mthis, __arg_0) => consolidate_Callback_1(mthis, __arg_0);

  static consolidate_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList_consolidate_Callback";
  consolidate_Callback_2_(mthis, __arg_0, __arg_1) => consolidate_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGTransformFromMatrix_Callback_0(mthis) native "SVGTransformList_createSVGTransformFromMatrix_Callback";
  createSVGTransformFromMatrix_Callback_0_(mthis) => createSVGTransformFromMatrix_Callback_0(mthis);

  static createSVGTransformFromMatrix_Callback_1(mthis, __arg_0) native "SVGTransformList_createSVGTransformFromMatrix_Callback";
  createSVGTransformFromMatrix_Callback_1_(mthis, __arg_0) => createSVGTransformFromMatrix_Callback_1(mthis, __arg_0);

  static createSVGTransformFromMatrix_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList_createSVGTransformFromMatrix_Callback";
  createSVGTransformFromMatrix_Callback_2_(mthis, __arg_0, __arg_1) => createSVGTransformFromMatrix_Callback_2(mthis, __arg_0, __arg_1);

  static createSVGTransformFromMatrix_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransformList_createSVGTransformFromMatrix_Callback";
  createSVGTransformFromMatrix_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createSVGTransformFromMatrix_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getItem_Callback_0(mthis) native "SVGTransformList_getItem_Callback";
  getItem_Callback_0_(mthis) => getItem_Callback_0(mthis);

  static getItem_Callback_1(mthis, __arg_0) native "SVGTransformList_getItem_Callback";
  getItem_Callback_1_(mthis, __arg_0) => getItem_Callback_1(mthis, __arg_0);

  static getItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList_getItem_Callback";
  getItem_Callback_2_(mthis, __arg_0, __arg_1) => getItem_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransformList_getItem_Callback";
  getItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initialize_Callback_0(mthis) native "SVGTransformList_initialize_Callback";
  initialize_Callback_0_(mthis) => initialize_Callback_0(mthis);

  static initialize_Callback_1(mthis, __arg_0) native "SVGTransformList_initialize_Callback";
  initialize_Callback_1_(mthis, __arg_0) => initialize_Callback_1(mthis, __arg_0);

  static initialize_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList_initialize_Callback";
  initialize_Callback_2_(mthis, __arg_0, __arg_1) => initialize_Callback_2(mthis, __arg_0, __arg_1);

  static initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransformList_initialize_Callback";
  initialize_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initialize_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_0(mthis) native "SVGTransformList_insertItemBefore_Callback";
  insertItemBefore_Callback_0_(mthis) => insertItemBefore_Callback_0(mthis);

  static insertItemBefore_Callback_1(mthis, __arg_0) native "SVGTransformList_insertItemBefore_Callback";
  insertItemBefore_Callback_1_(mthis, __arg_0) => insertItemBefore_Callback_1(mthis, __arg_0);

  static insertItemBefore_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList_insertItemBefore_Callback";
  insertItemBefore_Callback_2_(mthis, __arg_0, __arg_1) => insertItemBefore_Callback_2(mthis, __arg_0, __arg_1);

  static insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransformList_insertItemBefore_Callback";
  insertItemBefore_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => insertItemBefore_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGTransformList_insertItemBefore_Callback";
  insertItemBefore_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => insertItemBefore_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static length_Getter(mthis) native "SVGTransformList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static numberOfItems_Getter(mthis) native "SVGTransformList_numberOfItems_Getter";
  numberOfItems_Getter_(mthis) => numberOfItems_Getter(mthis);

  static removeItem_Callback_0(mthis) native "SVGTransformList_removeItem_Callback";
  removeItem_Callback_0_(mthis) => removeItem_Callback_0(mthis);

  static removeItem_Callback_1(mthis, __arg_0) native "SVGTransformList_removeItem_Callback";
  removeItem_Callback_1_(mthis, __arg_0) => removeItem_Callback_1(mthis, __arg_0);

  static removeItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList_removeItem_Callback";
  removeItem_Callback_2_(mthis, __arg_0, __arg_1) => removeItem_Callback_2(mthis, __arg_0, __arg_1);

  static removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransformList_removeItem_Callback";
  removeItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_0(mthis) native "SVGTransformList_replaceItem_Callback";
  replaceItem_Callback_0_(mthis) => replaceItem_Callback_0(mthis);

  static replaceItem_Callback_1(mthis, __arg_0) native "SVGTransformList_replaceItem_Callback";
  replaceItem_Callback_1_(mthis, __arg_0) => replaceItem_Callback_1(mthis, __arg_0);

  static replaceItem_Callback_2(mthis, __arg_0, __arg_1) native "SVGTransformList_replaceItem_Callback";
  replaceItem_Callback_2_(mthis, __arg_0, __arg_1) => replaceItem_Callback_2(mthis, __arg_0, __arg_1);

  static replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SVGTransformList_replaceItem_Callback";
  replaceItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SVGTransformList_replaceItem_Callback";
  replaceItem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => replaceItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkSVGUnitTypes {
  static final instance = new BlinkSVGUnitTypes();

}

class BlinkSVGUseElement extends BlinkSVGGraphicsElement {
  static final instance = new BlinkSVGUseElement();

  static height_Getter(mthis) native "SVGUseElement_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static href_Getter(mthis) native "SVGUseElement_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static width_Getter(mthis) native "SVGUseElement_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static x_Getter(mthis) native "SVGUseElement_x_Getter";
  x_Getter_(mthis) => x_Getter(mthis);

  static y_Getter(mthis) native "SVGUseElement_y_Getter";
  y_Getter_(mthis) => y_Getter(mthis);

}

class BlinkSVGVKernElement extends BlinkSVGElement {
  static final instance = new BlinkSVGVKernElement();

}

class BlinkSVGViewElement extends BlinkSVGElement {
  static final instance = new BlinkSVGViewElement();

  static preserveAspectRatio_Getter(mthis) native "SVGViewElement_preserveAspectRatio_Getter";
  preserveAspectRatio_Getter_(mthis) => preserveAspectRatio_Getter(mthis);

  static viewBox_Getter(mthis) native "SVGViewElement_viewBox_Getter";
  viewBox_Getter_(mthis) => viewBox_Getter(mthis);

  static viewTarget_Getter(mthis) native "SVGViewElement_viewTarget_Getter";
  viewTarget_Getter_(mthis) => viewTarget_Getter(mthis);

  static zoomAndPan_Getter(mthis) native "SVGViewElement_zoomAndPan_Getter";
  zoomAndPan_Getter_(mthis) => zoomAndPan_Getter(mthis);

  static zoomAndPan_Setter(mthis, __arg_0) native "SVGViewElement_zoomAndPan_Setter";
  zoomAndPan_Setter_(mthis, __arg_0) => zoomAndPan_Setter(mthis, __arg_0);

}

class BlinkSVGViewSpec {
  static final instance = new BlinkSVGViewSpec();

  static preserveAspectRatioString_Getter(mthis) native "SVGViewSpec_preserveAspectRatioString_Getter";
  preserveAspectRatioString_Getter_(mthis) => preserveAspectRatioString_Getter(mthis);

  static preserveAspectRatio_Getter(mthis) native "SVGViewSpec_preserveAspectRatio_Getter";
  preserveAspectRatio_Getter_(mthis) => preserveAspectRatio_Getter(mthis);

  static transformString_Getter(mthis) native "SVGViewSpec_transformString_Getter";
  transformString_Getter_(mthis) => transformString_Getter(mthis);

  static transform_Getter(mthis) native "SVGViewSpec_transform_Getter";
  transform_Getter_(mthis) => transform_Getter(mthis);

  static viewBoxString_Getter(mthis) native "SVGViewSpec_viewBoxString_Getter";
  viewBoxString_Getter_(mthis) => viewBoxString_Getter(mthis);

  static viewBox_Getter(mthis) native "SVGViewSpec_viewBox_Getter";
  viewBox_Getter_(mthis) => viewBox_Getter(mthis);

  static viewTargetString_Getter(mthis) native "SVGViewSpec_viewTargetString_Getter";
  viewTargetString_Getter_(mthis) => viewTargetString_Getter(mthis);

  static viewTarget_Getter(mthis) native "SVGViewSpec_viewTarget_Getter";
  viewTarget_Getter_(mthis) => viewTarget_Getter(mthis);

  static zoomAndPan_Getter(mthis) native "SVGViewSpec_zoomAndPan_Getter";
  zoomAndPan_Getter_(mthis) => zoomAndPan_Getter(mthis);

  static zoomAndPan_Setter(mthis, __arg_0) native "SVGViewSpec_zoomAndPan_Setter";
  zoomAndPan_Setter_(mthis, __arg_0) => zoomAndPan_Setter(mthis, __arg_0);

}

class BlinkSVGZoomEvent extends BlinkUIEvent {
  static final instance = new BlinkSVGZoomEvent();

  static newScale_Getter(mthis) native "SVGZoomEvent_newScale_Getter";
  newScale_Getter_(mthis) => newScale_Getter(mthis);

  static newTranslate_Getter(mthis) native "SVGZoomEvent_newTranslate_Getter";
  newTranslate_Getter_(mthis) => newTranslate_Getter(mthis);

  static previousScale_Getter(mthis) native "SVGZoomEvent_previousScale_Getter";
  previousScale_Getter_(mthis) => previousScale_Getter(mthis);

  static previousTranslate_Getter(mthis) native "SVGZoomEvent_previousTranslate_Getter";
  previousTranslate_Getter_(mthis) => previousTranslate_Getter(mthis);

  static zoomRectScreen_Getter(mthis) native "SVGZoomEvent_zoomRectScreen_Getter";
  zoomRectScreen_Getter_(mthis) => zoomRectScreen_Getter(mthis);

}

class BlinkScreen {
  static final instance = new BlinkScreen();

  static availHeight_Getter(mthis) native "Screen_availHeight_Getter";
  availHeight_Getter_(mthis) => availHeight_Getter(mthis);

  static availLeft_Getter(mthis) native "Screen_availLeft_Getter";
  availLeft_Getter_(mthis) => availLeft_Getter(mthis);

  static availTop_Getter(mthis) native "Screen_availTop_Getter";
  availTop_Getter_(mthis) => availTop_Getter(mthis);

  static availWidth_Getter(mthis) native "Screen_availWidth_Getter";
  availWidth_Getter_(mthis) => availWidth_Getter(mthis);

  static colorDepth_Getter(mthis) native "Screen_colorDepth_Getter";
  colorDepth_Getter_(mthis) => colorDepth_Getter(mthis);

  static height_Getter(mthis) native "Screen_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static orientation_Getter(mthis) native "Screen_orientation_Getter";
  orientation_Getter_(mthis) => orientation_Getter(mthis);

  static pixelDepth_Getter(mthis) native "Screen_pixelDepth_Getter";
  pixelDepth_Getter_(mthis) => pixelDepth_Getter(mthis);

  static width_Getter(mthis) native "Screen_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

}

class BlinkScreenOrientation extends BlinkEventTarget {
  static final instance = new BlinkScreenOrientation();

  static angle_Getter(mthis) native "ScreenOrientation_angle_Getter";
  angle_Getter_(mthis) => angle_Getter(mthis);

  static lock_Callback_0(mthis) native "ScreenOrientation_lock_Callback";
  lock_Callback_0_(mthis) => lock_Callback_0(mthis);

  static lock_Callback_1(mthis, __arg_0) native "ScreenOrientation_lock_Callback";
  lock_Callback_1_(mthis, __arg_0) => lock_Callback_1(mthis, __arg_0);

  static lock_Callback_2(mthis, __arg_0, __arg_1) native "ScreenOrientation_lock_Callback";
  lock_Callback_2_(mthis, __arg_0, __arg_1) => lock_Callback_2(mthis, __arg_0, __arg_1);

  static lock_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ScreenOrientation_lock_Callback";
  lock_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => lock_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static onchange_Getter(mthis) native "ScreenOrientation_onchange_Getter";
  onchange_Getter_(mthis) => onchange_Getter(mthis);

  static onchange_Setter(mthis, __arg_0) native "ScreenOrientation_onchange_Setter";
  onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);

  static type_Getter(mthis) native "ScreenOrientation_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

  static unlock_Callback_0(mthis) native "ScreenOrientation_unlock_Callback";
  unlock_Callback_0_(mthis) => unlock_Callback_0(mthis);

  static unlock_Callback_1(mthis, __arg_0) native "ScreenOrientation_unlock_Callback";
  unlock_Callback_1_(mthis, __arg_0) => unlock_Callback_1(mthis, __arg_0);

  static unlock_Callback_2(mthis, __arg_0, __arg_1) native "ScreenOrientation_unlock_Callback";
  unlock_Callback_2_(mthis, __arg_0, __arg_1) => unlock_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkScriptProcessorNode extends BlinkAudioNode {
  static final instance = new BlinkScriptProcessorNode();

  static bufferSize_Getter(mthis) native "ScriptProcessorNode_bufferSize_Getter";
  bufferSize_Getter_(mthis) => bufferSize_Getter(mthis);

  static onaudioprocess_Getter(mthis) native "ScriptProcessorNode_onaudioprocess_Getter";
  onaudioprocess_Getter_(mthis) => onaudioprocess_Getter(mthis);

  static onaudioprocess_Setter(mthis, __arg_0) native "ScriptProcessorNode_onaudioprocess_Setter";
  onaudioprocess_Setter_(mthis, __arg_0) => onaudioprocess_Setter(mthis, __arg_0);

  static setEventListener_Callback_0(mthis) native "ScriptProcessorNode_setEventListener_Callback";
  setEventListener_Callback_0_(mthis) => setEventListener_Callback_0(mthis);

  static setEventListener_Callback_1(mthis, __arg_0) native "ScriptProcessorNode_setEventListener_Callback";
  setEventListener_Callback_1_(mthis, __arg_0) => setEventListener_Callback_1(mthis, __arg_0);

  static setEventListener_Callback_2(mthis, __arg_0, __arg_1) native "ScriptProcessorNode_setEventListener_Callback";
  setEventListener_Callback_2_(mthis, __arg_0, __arg_1) => setEventListener_Callback_2(mthis, __arg_0, __arg_1);

  static setEventListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ScriptProcessorNode_setEventListener_Callback";
  setEventListener_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setEventListener_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkSecurityPolicyViolationEvent extends BlinkEvent {
  static final instance = new BlinkSecurityPolicyViolationEvent();

  static blockedURI_Getter(mthis) native "SecurityPolicyViolationEvent_blockedURI_Getter";
  blockedURI_Getter_(mthis) => blockedURI_Getter(mthis);

  static columnNumber_Getter(mthis) native "SecurityPolicyViolationEvent_columnNumber_Getter";
  columnNumber_Getter_(mthis) => columnNumber_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "SecurityPolicyViolationEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static documentURI_Getter(mthis) native "SecurityPolicyViolationEvent_documentURI_Getter";
  documentURI_Getter_(mthis) => documentURI_Getter(mthis);

  static effectiveDirective_Getter(mthis) native "SecurityPolicyViolationEvent_effectiveDirective_Getter";
  effectiveDirective_Getter_(mthis) => effectiveDirective_Getter(mthis);

  static lineNumber_Getter(mthis) native "SecurityPolicyViolationEvent_lineNumber_Getter";
  lineNumber_Getter_(mthis) => lineNumber_Getter(mthis);

  static originalPolicy_Getter(mthis) native "SecurityPolicyViolationEvent_originalPolicy_Getter";
  originalPolicy_Getter_(mthis) => originalPolicy_Getter(mthis);

  static referrer_Getter(mthis) native "SecurityPolicyViolationEvent_referrer_Getter";
  referrer_Getter_(mthis) => referrer_Getter(mthis);

  static sourceFile_Getter(mthis) native "SecurityPolicyViolationEvent_sourceFile_Getter";
  sourceFile_Getter_(mthis) => sourceFile_Getter(mthis);

  static statusCode_Getter(mthis) native "SecurityPolicyViolationEvent_statusCode_Getter";
  statusCode_Getter_(mthis) => statusCode_Getter(mthis);

  static violatedDirective_Getter(mthis) native "SecurityPolicyViolationEvent_violatedDirective_Getter";
  violatedDirective_Getter_(mthis) => violatedDirective_Getter(mthis);

}

class BlinkSelection {
  static final instance = new BlinkSelection();

  static addRange_Callback_0(mthis) native "Selection_addRange_Callback";
  addRange_Callback_0_(mthis) => addRange_Callback_0(mthis);

  static addRange_Callback_1(mthis, __arg_0) native "Selection_addRange_Callback";
  addRange_Callback_1_(mthis, __arg_0) => addRange_Callback_1(mthis, __arg_0);

  static addRange_Callback_2(mthis, __arg_0, __arg_1) native "Selection_addRange_Callback";
  addRange_Callback_2_(mthis, __arg_0, __arg_1) => addRange_Callback_2(mthis, __arg_0, __arg_1);

  static addRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Selection_addRange_Callback";
  addRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static anchorNode_Getter(mthis) native "Selection_anchorNode_Getter";
  anchorNode_Getter_(mthis) => anchorNode_Getter(mthis);

  static anchorOffset_Getter(mthis) native "Selection_anchorOffset_Getter";
  anchorOffset_Getter_(mthis) => anchorOffset_Getter(mthis);

  static baseNode_Getter(mthis) native "Selection_baseNode_Getter";
  baseNode_Getter_(mthis) => baseNode_Getter(mthis);

  static baseOffset_Getter(mthis) native "Selection_baseOffset_Getter";
  baseOffset_Getter_(mthis) => baseOffset_Getter(mthis);

  static collapseToEnd_Callback_0(mthis) native "Selection_collapseToEnd_Callback";
  collapseToEnd_Callback_0_(mthis) => collapseToEnd_Callback_0(mthis);

  static collapseToEnd_Callback_1(mthis, __arg_0) native "Selection_collapseToEnd_Callback";
  collapseToEnd_Callback_1_(mthis, __arg_0) => collapseToEnd_Callback_1(mthis, __arg_0);

  static collapseToEnd_Callback_2(mthis, __arg_0, __arg_1) native "Selection_collapseToEnd_Callback";
  collapseToEnd_Callback_2_(mthis, __arg_0, __arg_1) => collapseToEnd_Callback_2(mthis, __arg_0, __arg_1);

  static collapseToStart_Callback_0(mthis) native "Selection_collapseToStart_Callback";
  collapseToStart_Callback_0_(mthis) => collapseToStart_Callback_0(mthis);

  static collapseToStart_Callback_1(mthis, __arg_0) native "Selection_collapseToStart_Callback";
  collapseToStart_Callback_1_(mthis, __arg_0) => collapseToStart_Callback_1(mthis, __arg_0);

  static collapseToStart_Callback_2(mthis, __arg_0, __arg_1) native "Selection_collapseToStart_Callback";
  collapseToStart_Callback_2_(mthis, __arg_0, __arg_1) => collapseToStart_Callback_2(mthis, __arg_0, __arg_1);

  static collapse_Callback_0(mthis) native "Selection_collapse_Callback";
  collapse_Callback_0_(mthis) => collapse_Callback_0(mthis);

  static collapse_Callback_1(mthis, __arg_0) native "Selection_collapse_Callback";
  collapse_Callback_1_(mthis, __arg_0) => collapse_Callback_1(mthis, __arg_0);

  static collapse_Callback_2(mthis, __arg_0, __arg_1) native "Selection_collapse_Callback";
  collapse_Callback_2_(mthis, __arg_0, __arg_1) => collapse_Callback_2(mthis, __arg_0, __arg_1);

  static collapse_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Selection_collapse_Callback";
  collapse_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => collapse_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static collapse_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Selection_collapse_Callback";
  collapse_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => collapse_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static containsNode_Callback_0(mthis) native "Selection_containsNode_Callback";
  containsNode_Callback_0_(mthis) => containsNode_Callback_0(mthis);

  static containsNode_Callback_1(mthis, __arg_0) native "Selection_containsNode_Callback";
  containsNode_Callback_1_(mthis, __arg_0) => containsNode_Callback_1(mthis, __arg_0);

  static containsNode_Callback_2(mthis, __arg_0, __arg_1) native "Selection_containsNode_Callback";
  containsNode_Callback_2_(mthis, __arg_0, __arg_1) => containsNode_Callback_2(mthis, __arg_0, __arg_1);

  static containsNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Selection_containsNode_Callback";
  containsNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => containsNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static containsNode_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Selection_containsNode_Callback";
  containsNode_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => containsNode_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static deleteFromDocument_Callback_0(mthis) native "Selection_deleteFromDocument_Callback";
  deleteFromDocument_Callback_0_(mthis) => deleteFromDocument_Callback_0(mthis);

  static deleteFromDocument_Callback_1(mthis, __arg_0) native "Selection_deleteFromDocument_Callback";
  deleteFromDocument_Callback_1_(mthis, __arg_0) => deleteFromDocument_Callback_1(mthis, __arg_0);

  static deleteFromDocument_Callback_2(mthis, __arg_0, __arg_1) native "Selection_deleteFromDocument_Callback";
  deleteFromDocument_Callback_2_(mthis, __arg_0, __arg_1) => deleteFromDocument_Callback_2(mthis, __arg_0, __arg_1);

  static empty_Callback_0(mthis) native "Selection_empty_Callback";
  empty_Callback_0_(mthis) => empty_Callback_0(mthis);

  static empty_Callback_1(mthis, __arg_0) native "Selection_empty_Callback";
  empty_Callback_1_(mthis, __arg_0) => empty_Callback_1(mthis, __arg_0);

  static empty_Callback_2(mthis, __arg_0, __arg_1) native "Selection_empty_Callback";
  empty_Callback_2_(mthis, __arg_0, __arg_1) => empty_Callback_2(mthis, __arg_0, __arg_1);

  static extend_Callback_0(mthis) native "Selection_extend_Callback";
  extend_Callback_0_(mthis) => extend_Callback_0(mthis);

  static extend_Callback_1(mthis, __arg_0) native "Selection_extend_Callback";
  extend_Callback_1_(mthis, __arg_0) => extend_Callback_1(mthis, __arg_0);

  static extend_Callback_2(mthis, __arg_0, __arg_1) native "Selection_extend_Callback";
  extend_Callback_2_(mthis, __arg_0, __arg_1) => extend_Callback_2(mthis, __arg_0, __arg_1);

  static extend_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Selection_extend_Callback";
  extend_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => extend_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static extend_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Selection_extend_Callback";
  extend_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => extend_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static extentNode_Getter(mthis) native "Selection_extentNode_Getter";
  extentNode_Getter_(mthis) => extentNode_Getter(mthis);

  static extentOffset_Getter(mthis) native "Selection_extentOffset_Getter";
  extentOffset_Getter_(mthis) => extentOffset_Getter(mthis);

  static focusNode_Getter(mthis) native "Selection_focusNode_Getter";
  focusNode_Getter_(mthis) => focusNode_Getter(mthis);

  static focusOffset_Getter(mthis) native "Selection_focusOffset_Getter";
  focusOffset_Getter_(mthis) => focusOffset_Getter(mthis);

  static getRangeAt_Callback_0(mthis) native "Selection_getRangeAt_Callback";
  getRangeAt_Callback_0_(mthis) => getRangeAt_Callback_0(mthis);

  static getRangeAt_Callback_1(mthis, __arg_0) native "Selection_getRangeAt_Callback";
  getRangeAt_Callback_1_(mthis, __arg_0) => getRangeAt_Callback_1(mthis, __arg_0);

  static getRangeAt_Callback_2(mthis, __arg_0, __arg_1) native "Selection_getRangeAt_Callback";
  getRangeAt_Callback_2_(mthis, __arg_0, __arg_1) => getRangeAt_Callback_2(mthis, __arg_0, __arg_1);

  static getRangeAt_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Selection_getRangeAt_Callback";
  getRangeAt_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getRangeAt_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isCollapsed_Getter(mthis) native "Selection_isCollapsed_Getter";
  isCollapsed_Getter_(mthis) => isCollapsed_Getter(mthis);

  static modify_Callback_0(mthis) native "Selection_modify_Callback";
  modify_Callback_0_(mthis) => modify_Callback_0(mthis);

  static modify_Callback_1(mthis, __arg_0) native "Selection_modify_Callback";
  modify_Callback_1_(mthis, __arg_0) => modify_Callback_1(mthis, __arg_0);

  static modify_Callback_2(mthis, __arg_0, __arg_1) native "Selection_modify_Callback";
  modify_Callback_2_(mthis, __arg_0, __arg_1) => modify_Callback_2(mthis, __arg_0, __arg_1);

  static modify_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Selection_modify_Callback";
  modify_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => modify_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static modify_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Selection_modify_Callback";
  modify_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => modify_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static modify_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Selection_modify_Callback";
  modify_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => modify_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static rangeCount_Getter(mthis) native "Selection_rangeCount_Getter";
  rangeCount_Getter_(mthis) => rangeCount_Getter(mthis);

  static removeAllRanges_Callback_0(mthis) native "Selection_removeAllRanges_Callback";
  removeAllRanges_Callback_0_(mthis) => removeAllRanges_Callback_0(mthis);

  static removeAllRanges_Callback_1(mthis, __arg_0) native "Selection_removeAllRanges_Callback";
  removeAllRanges_Callback_1_(mthis, __arg_0) => removeAllRanges_Callback_1(mthis, __arg_0);

  static removeAllRanges_Callback_2(mthis, __arg_0, __arg_1) native "Selection_removeAllRanges_Callback";
  removeAllRanges_Callback_2_(mthis, __arg_0, __arg_1) => removeAllRanges_Callback_2(mthis, __arg_0, __arg_1);

  static selectAllChildren_Callback_0(mthis) native "Selection_selectAllChildren_Callback";
  selectAllChildren_Callback_0_(mthis) => selectAllChildren_Callback_0(mthis);

  static selectAllChildren_Callback_1(mthis, __arg_0) native "Selection_selectAllChildren_Callback";
  selectAllChildren_Callback_1_(mthis, __arg_0) => selectAllChildren_Callback_1(mthis, __arg_0);

  static selectAllChildren_Callback_2(mthis, __arg_0, __arg_1) native "Selection_selectAllChildren_Callback";
  selectAllChildren_Callback_2_(mthis, __arg_0, __arg_1) => selectAllChildren_Callback_2(mthis, __arg_0, __arg_1);

  static selectAllChildren_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Selection_selectAllChildren_Callback";
  selectAllChildren_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => selectAllChildren_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setBaseAndExtent_Callback_0(mthis) native "Selection_setBaseAndExtent_Callback";
  setBaseAndExtent_Callback_0_(mthis) => setBaseAndExtent_Callback_0(mthis);

  static setBaseAndExtent_Callback_1(mthis, __arg_0) native "Selection_setBaseAndExtent_Callback";
  setBaseAndExtent_Callback_1_(mthis, __arg_0) => setBaseAndExtent_Callback_1(mthis, __arg_0);

  static setBaseAndExtent_Callback_2(mthis, __arg_0, __arg_1) native "Selection_setBaseAndExtent_Callback";
  setBaseAndExtent_Callback_2_(mthis, __arg_0, __arg_1) => setBaseAndExtent_Callback_2(mthis, __arg_0, __arg_1);

  static setBaseAndExtent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Selection_setBaseAndExtent_Callback";
  setBaseAndExtent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setBaseAndExtent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setBaseAndExtent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Selection_setBaseAndExtent_Callback";
  setBaseAndExtent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setBaseAndExtent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setBaseAndExtent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Selection_setBaseAndExtent_Callback";
  setBaseAndExtent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setBaseAndExtent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setBaseAndExtent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Selection_setBaseAndExtent_Callback";
  setBaseAndExtent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => setBaseAndExtent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static setPosition_Callback_0(mthis) native "Selection_setPosition_Callback";
  setPosition_Callback_0_(mthis) => setPosition_Callback_0(mthis);

  static setPosition_Callback_1(mthis, __arg_0) native "Selection_setPosition_Callback";
  setPosition_Callback_1_(mthis, __arg_0) => setPosition_Callback_1(mthis, __arg_0);

  static setPosition_Callback_2(mthis, __arg_0, __arg_1) native "Selection_setPosition_Callback";
  setPosition_Callback_2_(mthis, __arg_0, __arg_1) => setPosition_Callback_2(mthis, __arg_0, __arg_1);

  static setPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Selection_setPosition_Callback";
  setPosition_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setPosition_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Selection_setPosition_Callback";
  setPosition_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setPosition_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static type_Getter(mthis) native "Selection_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkServiceWorker extends BlinkEventTarget {
  static final instance = new BlinkServiceWorker();

  static onerror_Getter(mthis) native "ServiceWorker_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "ServiceWorker_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onstatechange_Getter(mthis) native "ServiceWorker_onstatechange_Getter";
  onstatechange_Getter_(mthis) => onstatechange_Getter(mthis);

  static onstatechange_Setter(mthis, __arg_0) native "ServiceWorker_onstatechange_Setter";
  onstatechange_Setter_(mthis, __arg_0) => onstatechange_Setter(mthis, __arg_0);

  static postMessage_Callback_0(mthis) native "ServiceWorker_postMessage_Callback";
  postMessage_Callback_0_(mthis) => postMessage_Callback_0(mthis);

  static postMessage_Callback_1(mthis, __arg_0) native "ServiceWorker_postMessage_Callback";
  postMessage_Callback_1_(mthis, __arg_0) => postMessage_Callback_1(mthis, __arg_0);

  static postMessage_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorker_postMessage_Callback";
  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => postMessage_Callback_2(mthis, __arg_0, __arg_1);

  static postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ServiceWorker_postMessage_Callback";
  postMessage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ServiceWorker_postMessage_Callback";
  postMessage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scriptURL_Getter(mthis) native "ServiceWorker_scriptURL_Getter";
  scriptURL_Getter_(mthis) => scriptURL_Getter(mthis);

  static state_Getter(mthis) native "ServiceWorker_state_Getter";
  state_Getter_(mthis) => state_Getter(mthis);

  static terminate_Callback_0(mthis) native "ServiceWorker_terminate_Callback";
  terminate_Callback_0_(mthis) => terminate_Callback_0(mthis);

  static terminate_Callback_1(mthis, __arg_0) native "ServiceWorker_terminate_Callback";
  terminate_Callback_1_(mthis, __arg_0) => terminate_Callback_1(mthis, __arg_0);

  static terminate_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorker_terminate_Callback";
  terminate_Callback_2_(mthis, __arg_0, __arg_1) => terminate_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkServiceWorkerClient {
  static final instance = new BlinkServiceWorkerClient();

  static id_Getter(mthis) native "ServiceWorkerClient_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static postMessage_Callback_0(mthis) native "ServiceWorkerClient_postMessage_Callback";
  postMessage_Callback_0_(mthis) => postMessage_Callback_0(mthis);

  static postMessage_Callback_1(mthis, __arg_0) native "ServiceWorkerClient_postMessage_Callback";
  postMessage_Callback_1_(mthis, __arg_0) => postMessage_Callback_1(mthis, __arg_0);

  static postMessage_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerClient_postMessage_Callback";
  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => postMessage_Callback_2(mthis, __arg_0, __arg_1);

  static postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ServiceWorkerClient_postMessage_Callback";
  postMessage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ServiceWorkerClient_postMessage_Callback";
  postMessage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkServiceWorkerClients {
  static final instance = new BlinkServiceWorkerClients();

  static getAll_Callback_0(mthis) native "ServiceWorkerClients_getAll_Callback";
  getAll_Callback_0_(mthis) => getAll_Callback_0(mthis);

  static getAll_Callback_1(mthis, __arg_0) native "ServiceWorkerClients_getAll_Callback";
  getAll_Callback_1_(mthis, __arg_0) => getAll_Callback_1(mthis, __arg_0);

  static getAll_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerClients_getAll_Callback";
  getAll_Callback_2_(mthis, __arg_0, __arg_1) => getAll_Callback_2(mthis, __arg_0, __arg_1);

  static getAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ServiceWorkerClients_getAll_Callback";
  getAll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getAll_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkServiceWorkerContainer {
  static final instance = new BlinkServiceWorkerContainer();

  static controller_Getter(mthis) native "ServiceWorkerContainer_controller_Getter";
  controller_Getter_(mthis) => controller_Getter(mthis);

  static getRegistration_Callback_0(mthis) native "ServiceWorkerContainer_getRegistration_Callback";
  getRegistration_Callback_0_(mthis) => getRegistration_Callback_0(mthis);

  static getRegistration_Callback_1(mthis, __arg_0) native "ServiceWorkerContainer_getRegistration_Callback";
  getRegistration_Callback_1_(mthis, __arg_0) => getRegistration_Callback_1(mthis, __arg_0);

  static getRegistration_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerContainer_getRegistration_Callback";
  getRegistration_Callback_2_(mthis, __arg_0, __arg_1) => getRegistration_Callback_2(mthis, __arg_0, __arg_1);

  static getRegistration_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ServiceWorkerContainer_getRegistration_Callback";
  getRegistration_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getRegistration_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static ready_Getter(mthis) native "ServiceWorkerContainer_ready_Getter";
  ready_Getter_(mthis) => ready_Getter(mthis);

  static register_Callback_0(mthis) native "ServiceWorkerContainer_register_Callback";
  register_Callback_0_(mthis) => register_Callback_0(mthis);

  static register_Callback_1(mthis, __arg_0) native "ServiceWorkerContainer_register_Callback";
  register_Callback_1_(mthis, __arg_0) => register_Callback_1(mthis, __arg_0);

  static register_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerContainer_register_Callback";
  register_Callback_2_(mthis, __arg_0, __arg_1) => register_Callback_2(mthis, __arg_0, __arg_1);

  static register_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ServiceWorkerContainer_register_Callback";
  register_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => register_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static register_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ServiceWorkerContainer_register_Callback";
  register_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => register_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkServiceWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkServiceWorkerGlobalScope();

  static caches_Getter(mthis) native "ServiceWorkerGlobalScope_caches_Getter";
  caches_Getter_(mthis) => caches_Getter(mthis);

  static clients_Getter(mthis) native "ServiceWorkerGlobalScope_clients_Getter";
  clients_Getter_(mthis) => clients_Getter(mthis);

  static close_Callback_0(mthis) native "ServiceWorkerGlobalScope_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "ServiceWorkerGlobalScope_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerGlobalScope_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static fetch_Callback_0(mthis) native "ServiceWorkerGlobalScope_fetch_Callback";
  fetch_Callback_0_(mthis) => fetch_Callback_0(mthis);

  static fetch_Callback_1(mthis, __arg_0) native "ServiceWorkerGlobalScope_fetch_Callback";
  fetch_Callback_1_(mthis, __arg_0) => fetch_Callback_1(mthis, __arg_0);

  static fetch_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerGlobalScope_fetch_Callback";
  fetch_Callback_2_(mthis, __arg_0, __arg_1) => fetch_Callback_2(mthis, __arg_0, __arg_1);

  static fetch_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ServiceWorkerGlobalScope_fetch_Callback";
  fetch_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => fetch_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static fetch_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ServiceWorkerGlobalScope_fetch_Callback";
  fetch_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => fetch_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static onactivate_Getter(mthis) native "ServiceWorkerGlobalScope_onactivate_Getter";
  onactivate_Getter_(mthis) => onactivate_Getter(mthis);

  static onactivate_Setter(mthis, __arg_0) native "ServiceWorkerGlobalScope_onactivate_Setter";
  onactivate_Setter_(mthis, __arg_0) => onactivate_Setter(mthis, __arg_0);

  static onfetch_Getter(mthis) native "ServiceWorkerGlobalScope_onfetch_Getter";
  onfetch_Getter_(mthis) => onfetch_Getter(mthis);

  static onfetch_Setter(mthis, __arg_0) native "ServiceWorkerGlobalScope_onfetch_Setter";
  onfetch_Setter_(mthis, __arg_0) => onfetch_Setter(mthis, __arg_0);

  static oninstall_Getter(mthis) native "ServiceWorkerGlobalScope_oninstall_Getter";
  oninstall_Getter_(mthis) => oninstall_Getter(mthis);

  static oninstall_Setter(mthis, __arg_0) native "ServiceWorkerGlobalScope_oninstall_Setter";
  oninstall_Setter_(mthis, __arg_0) => oninstall_Setter(mthis, __arg_0);

  static onmessage_Getter(mthis) native "ServiceWorkerGlobalScope_onmessage_Getter";
  onmessage_Getter_(mthis) => onmessage_Getter(mthis);

  static onmessage_Setter(mthis, __arg_0) native "ServiceWorkerGlobalScope_onmessage_Setter";
  onmessage_Setter_(mthis, __arg_0) => onmessage_Setter(mthis, __arg_0);

  static onpush_Getter(mthis) native "ServiceWorkerGlobalScope_onpush_Getter";
  onpush_Getter_(mthis) => onpush_Getter(mthis);

  static onpush_Setter(mthis, __arg_0) native "ServiceWorkerGlobalScope_onpush_Setter";
  onpush_Setter_(mthis, __arg_0) => onpush_Setter(mthis, __arg_0);

  static onsync_Getter(mthis) native "ServiceWorkerGlobalScope_onsync_Getter";
  onsync_Getter_(mthis) => onsync_Getter(mthis);

  static onsync_Setter(mthis, __arg_0) native "ServiceWorkerGlobalScope_onsync_Setter";
  onsync_Setter_(mthis, __arg_0) => onsync_Setter(mthis, __arg_0);

  static scope_Getter(mthis) native "ServiceWorkerGlobalScope_scope_Getter";
  scope_Getter_(mthis) => scope_Getter(mthis);

}

class BlinkServiceWorkerRegistration extends BlinkEventTarget {
  static final instance = new BlinkServiceWorkerRegistration();

  static active_Getter(mthis) native "ServiceWorkerRegistration_active_Getter";
  active_Getter_(mthis) => active_Getter(mthis);

  static installing_Getter(mthis) native "ServiceWorkerRegistration_installing_Getter";
  installing_Getter_(mthis) => installing_Getter(mthis);

  static onupdatefound_Getter(mthis) native "ServiceWorkerRegistration_onupdatefound_Getter";
  onupdatefound_Getter_(mthis) => onupdatefound_Getter(mthis);

  static onupdatefound_Setter(mthis, __arg_0) native "ServiceWorkerRegistration_onupdatefound_Setter";
  onupdatefound_Setter_(mthis, __arg_0) => onupdatefound_Setter(mthis, __arg_0);

  static scope_Getter(mthis) native "ServiceWorkerRegistration_scope_Getter";
  scope_Getter_(mthis) => scope_Getter(mthis);

  static unregister_Callback_0(mthis) native "ServiceWorkerRegistration_unregister_Callback";
  unregister_Callback_0_(mthis) => unregister_Callback_0(mthis);

  static unregister_Callback_1(mthis, __arg_0) native "ServiceWorkerRegistration_unregister_Callback";
  unregister_Callback_1_(mthis, __arg_0) => unregister_Callback_1(mthis, __arg_0);

  static unregister_Callback_2(mthis, __arg_0, __arg_1) native "ServiceWorkerRegistration_unregister_Callback";
  unregister_Callback_2_(mthis, __arg_0, __arg_1) => unregister_Callback_2(mthis, __arg_0, __arg_1);

  static waiting_Getter(mthis) native "ServiceWorkerRegistration_waiting_Getter";
  waiting_Getter_(mthis) => waiting_Getter(mthis);

}

class BlinkShadowRoot extends BlinkDocumentFragment {
  static final instance = new BlinkShadowRoot();

  static activeElement_Getter(mthis) native "ShadowRoot_activeElement_Getter";
  activeElement_Getter_(mthis) => activeElement_Getter(mthis);

  static cloneNode_Callback_0(mthis) native "ShadowRoot_cloneNode_Callback";
  cloneNode_Callback_0_(mthis) => cloneNode_Callback_0(mthis);

  static cloneNode_Callback_1(mthis, __arg_0) native "ShadowRoot_cloneNode_Callback";
  cloneNode_Callback_1_(mthis, __arg_0) => cloneNode_Callback_1(mthis, __arg_0);

  static cloneNode_Callback_2(mthis, __arg_0, __arg_1) native "ShadowRoot_cloneNode_Callback";
  cloneNode_Callback_2_(mthis, __arg_0, __arg_1) => cloneNode_Callback_2(mthis, __arg_0, __arg_1);

  static cloneNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ShadowRoot_cloneNode_Callback";
  cloneNode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => cloneNode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static elementFromPoint_Callback_0(mthis) native "ShadowRoot_elementFromPoint_Callback";
  elementFromPoint_Callback_0_(mthis) => elementFromPoint_Callback_0(mthis);

  static elementFromPoint_Callback_1(mthis, __arg_0) native "ShadowRoot_elementFromPoint_Callback";
  elementFromPoint_Callback_1_(mthis, __arg_0) => elementFromPoint_Callback_1(mthis, __arg_0);

  static elementFromPoint_Callback_2(mthis, __arg_0, __arg_1) native "ShadowRoot_elementFromPoint_Callback";
  elementFromPoint_Callback_2_(mthis, __arg_0, __arg_1) => elementFromPoint_Callback_2(mthis, __arg_0, __arg_1);

  static elementFromPoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ShadowRoot_elementFromPoint_Callback";
  elementFromPoint_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => elementFromPoint_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static elementFromPoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "ShadowRoot_elementFromPoint_Callback";
  elementFromPoint_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => elementFromPoint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getElementById_Callback_0(mthis) native "ShadowRoot_getElementById_Callback";
  getElementById_Callback_0_(mthis) => getElementById_Callback_0(mthis);

  static getElementById_Callback_1(mthis, __arg_0) native "ShadowRoot_getElementById_Callback";
  getElementById_Callback_1_(mthis, __arg_0) => getElementById_Callback_1(mthis, __arg_0);

  static getElementById_Callback_2(mthis, __arg_0, __arg_1) native "ShadowRoot_getElementById_Callback";
  getElementById_Callback_2_(mthis, __arg_0, __arg_1) => getElementById_Callback_2(mthis, __arg_0, __arg_1);

  static getElementById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ShadowRoot_getElementById_Callback";
  getElementById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getElementsByClassName_Callback_0(mthis) native "ShadowRoot_getElementsByClassName_Callback";
  getElementsByClassName_Callback_0_(mthis) => getElementsByClassName_Callback_0(mthis);

  static getElementsByClassName_Callback_1(mthis, __arg_0) native "ShadowRoot_getElementsByClassName_Callback";
  getElementsByClassName_Callback_1_(mthis, __arg_0) => getElementsByClassName_Callback_1(mthis, __arg_0);

  static getElementsByClassName_Callback_2(mthis, __arg_0, __arg_1) native "ShadowRoot_getElementsByClassName_Callback";
  getElementsByClassName_Callback_2_(mthis, __arg_0, __arg_1) => getElementsByClassName_Callback_2(mthis, __arg_0, __arg_1);

  static getElementsByClassName_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ShadowRoot_getElementsByClassName_Callback";
  getElementsByClassName_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementsByClassName_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getElementsByTagName_Callback_0(mthis) native "ShadowRoot_getElementsByTagName_Callback";
  getElementsByTagName_Callback_0_(mthis) => getElementsByTagName_Callback_0(mthis);

  static getElementsByTagName_Callback_1(mthis, __arg_0) native "ShadowRoot_getElementsByTagName_Callback";
  getElementsByTagName_Callback_1_(mthis, __arg_0) => getElementsByTagName_Callback_1(mthis, __arg_0);

  static getElementsByTagName_Callback_2(mthis, __arg_0, __arg_1) native "ShadowRoot_getElementsByTagName_Callback";
  getElementsByTagName_Callback_2_(mthis, __arg_0, __arg_1) => getElementsByTagName_Callback_2(mthis, __arg_0, __arg_1);

  static getElementsByTagName_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "ShadowRoot_getElementsByTagName_Callback";
  getElementsByTagName_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getElementsByTagName_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getSelection_Callback_0(mthis) native "ShadowRoot_getSelection_Callback";
  getSelection_Callback_0_(mthis) => getSelection_Callback_0(mthis);

  static getSelection_Callback_1(mthis, __arg_0) native "ShadowRoot_getSelection_Callback";
  getSelection_Callback_1_(mthis, __arg_0) => getSelection_Callback_1(mthis, __arg_0);

  static getSelection_Callback_2(mthis, __arg_0, __arg_1) native "ShadowRoot_getSelection_Callback";
  getSelection_Callback_2_(mthis, __arg_0, __arg_1) => getSelection_Callback_2(mthis, __arg_0, __arg_1);

  static host_Getter(mthis) native "ShadowRoot_host_Getter";
  host_Getter_(mthis) => host_Getter(mthis);

  static innerHTML_Getter(mthis) native "ShadowRoot_innerHTML_Getter";
  innerHTML_Getter_(mthis) => innerHTML_Getter(mthis);

  static innerHTML_Setter(mthis, __arg_0) native "ShadowRoot_innerHTML_Setter";
  innerHTML_Setter_(mthis, __arg_0) => innerHTML_Setter(mthis, __arg_0);

  static olderShadowRoot_Getter(mthis) native "ShadowRoot_olderShadowRoot_Getter";
  olderShadowRoot_Getter_(mthis) => olderShadowRoot_Getter(mthis);

  static styleSheets_Getter(mthis) native "ShadowRoot_styleSheets_Getter";
  styleSheets_Getter_(mthis) => styleSheets_Getter(mthis);

}

class BlinkSharedWorker extends BlinkEventTarget {
  static final instance = new BlinkSharedWorker();

  static constructorCallback_0() native "SharedWorker_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "SharedWorker_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "SharedWorker_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "SharedWorker_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "SharedWorker_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static onerror_Getter(mthis) native "SharedWorker_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "SharedWorker_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static port_Getter(mthis) native "SharedWorker_port_Getter";
  port_Getter_(mthis) => port_Getter(mthis);

  static workerStart_Getter(mthis) native "SharedWorker_workerStart_Getter";
  workerStart_Getter_(mthis) => workerStart_Getter(mthis);

}

class BlinkSharedWorkerGlobalScope extends BlinkWorkerGlobalScope {
  static final instance = new BlinkSharedWorkerGlobalScope();

  static name_Getter(mthis) native "SharedWorkerGlobalScope_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static onconnect_Getter(mthis) native "SharedWorkerGlobalScope_onconnect_Getter";
  onconnect_Getter_(mthis) => onconnect_Getter(mthis);

  static onconnect_Setter(mthis, __arg_0) native "SharedWorkerGlobalScope_onconnect_Setter";
  onconnect_Setter_(mthis, __arg_0) => onconnect_Setter(mthis, __arg_0);

}

class BlinkSourceBuffer extends BlinkEventTarget {
  static final instance = new BlinkSourceBuffer();

  static abort_Callback_0(mthis) native "SourceBuffer_abort_Callback";
  abort_Callback_0_(mthis) => abort_Callback_0(mthis);

  static abort_Callback_1(mthis, __arg_0) native "SourceBuffer_abort_Callback";
  abort_Callback_1_(mthis, __arg_0) => abort_Callback_1(mthis, __arg_0);

  static abort_Callback_2(mthis, __arg_0, __arg_1) native "SourceBuffer_abort_Callback";
  abort_Callback_2_(mthis, __arg_0, __arg_1) => abort_Callback_2(mthis, __arg_0, __arg_1);

  static appendBuffer_Callback_0(mthis) native "SourceBuffer_appendBuffer_Callback";
  appendBuffer_Callback_0_(mthis) => appendBuffer_Callback_0(mthis);

  static appendBuffer_Callback_1(mthis, __arg_0) native "SourceBuffer_appendBuffer_Callback";
  appendBuffer_Callback_1_(mthis, __arg_0) => appendBuffer_Callback_1(mthis, __arg_0);

  static appendBuffer_Callback_2(mthis, __arg_0, __arg_1) native "SourceBuffer_appendBuffer_Callback";
  appendBuffer_Callback_2_(mthis, __arg_0, __arg_1) => appendBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static appendBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SourceBuffer_appendBuffer_Callback";
  appendBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static appendStream_Callback_0(mthis) native "SourceBuffer_appendStream_Callback";
  appendStream_Callback_0_(mthis) => appendStream_Callback_0(mthis);

  static appendStream_Callback_1(mthis, __arg_0) native "SourceBuffer_appendStream_Callback";
  appendStream_Callback_1_(mthis, __arg_0) => appendStream_Callback_1(mthis, __arg_0);

  static appendStream_Callback_2(mthis, __arg_0, __arg_1) native "SourceBuffer_appendStream_Callback";
  appendStream_Callback_2_(mthis, __arg_0, __arg_1) => appendStream_Callback_2(mthis, __arg_0, __arg_1);

  static appendStream_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SourceBuffer_appendStream_Callback";
  appendStream_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => appendStream_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static appendStream_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SourceBuffer_appendStream_Callback";
  appendStream_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => appendStream_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static appendWindowEnd_Getter(mthis) native "SourceBuffer_appendWindowEnd_Getter";
  appendWindowEnd_Getter_(mthis) => appendWindowEnd_Getter(mthis);

  static appendWindowEnd_Setter(mthis, __arg_0) native "SourceBuffer_appendWindowEnd_Setter";
  appendWindowEnd_Setter_(mthis, __arg_0) => appendWindowEnd_Setter(mthis, __arg_0);

  static appendWindowStart_Getter(mthis) native "SourceBuffer_appendWindowStart_Getter";
  appendWindowStart_Getter_(mthis) => appendWindowStart_Getter(mthis);

  static appendWindowStart_Setter(mthis, __arg_0) native "SourceBuffer_appendWindowStart_Setter";
  appendWindowStart_Setter_(mthis, __arg_0) => appendWindowStart_Setter(mthis, __arg_0);

  static buffered_Getter(mthis) native "SourceBuffer_buffered_Getter";
  buffered_Getter_(mthis) => buffered_Getter(mthis);

  static mode_Getter(mthis) native "SourceBuffer_mode_Getter";
  mode_Getter_(mthis) => mode_Getter(mthis);

  static mode_Setter(mthis, __arg_0) native "SourceBuffer_mode_Setter";
  mode_Setter_(mthis, __arg_0) => mode_Setter(mthis, __arg_0);

  static remove_Callback_0(mthis) native "SourceBuffer_remove_Callback";
  remove_Callback_0_(mthis) => remove_Callback_0(mthis);

  static remove_Callback_1(mthis, __arg_0) native "SourceBuffer_remove_Callback";
  remove_Callback_1_(mthis, __arg_0) => remove_Callback_1(mthis, __arg_0);

  static remove_Callback_2(mthis, __arg_0, __arg_1) native "SourceBuffer_remove_Callback";
  remove_Callback_2_(mthis, __arg_0, __arg_1) => remove_Callback_2(mthis, __arg_0, __arg_1);

  static remove_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SourceBuffer_remove_Callback";
  remove_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => remove_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static remove_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SourceBuffer_remove_Callback";
  remove_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => remove_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static timestampOffset_Getter(mthis) native "SourceBuffer_timestampOffset_Getter";
  timestampOffset_Getter_(mthis) => timestampOffset_Getter(mthis);

  static timestampOffset_Setter(mthis, __arg_0) native "SourceBuffer_timestampOffset_Setter";
  timestampOffset_Setter_(mthis, __arg_0) => timestampOffset_Setter(mthis, __arg_0);

  static updating_Getter(mthis) native "SourceBuffer_updating_Getter";
  updating_Getter_(mthis) => updating_Getter(mthis);

}

class BlinkSourceBufferList extends BlinkEventTarget {
  static final instance = new BlinkSourceBufferList();

  static $__getter___Callback_1(mthis, __arg_0) native "SourceBufferList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "SourceBufferList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "SourceBufferList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "SourceBufferList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SourceBufferList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "SourceBufferList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkSourceInfo {
  static final instance = new BlinkSourceInfo();

  static facing_Getter(mthis) native "SourceInfo_facing_Getter";
  facing_Getter_(mthis) => facing_Getter(mthis);

  static id_Getter(mthis) native "SourceInfo_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static kind_Getter(mthis) native "SourceInfo_kind_Getter";
  kind_Getter_(mthis) => kind_Getter(mthis);

  static label_Getter(mthis) native "SourceInfo_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

}

class BlinkSpeechGrammar {
  static final instance = new BlinkSpeechGrammar();

  static constructorCallback_0() native "SpeechGrammar_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "SpeechGrammar_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "SpeechGrammar_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static src_Getter(mthis) native "SpeechGrammar_src_Getter";
  src_Getter_(mthis) => src_Getter(mthis);

  static src_Setter(mthis, __arg_0) native "SpeechGrammar_src_Setter";
  src_Setter_(mthis, __arg_0) => src_Setter(mthis, __arg_0);

  static weight_Getter(mthis) native "SpeechGrammar_weight_Getter";
  weight_Getter_(mthis) => weight_Getter(mthis);

  static weight_Setter(mthis, __arg_0) native "SpeechGrammar_weight_Setter";
  weight_Setter_(mthis, __arg_0) => weight_Setter(mthis, __arg_0);

}

class BlinkSpeechGrammarList {
  static final instance = new BlinkSpeechGrammarList();

  static $__getter___Callback_1(mthis, __arg_0) native "SpeechGrammarList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static addFromString_Callback_0(mthis) native "SpeechGrammarList_addFromString_Callback";
  addFromString_Callback_0_(mthis) => addFromString_Callback_0(mthis);

  static addFromString_Callback_1(mthis, __arg_0) native "SpeechGrammarList_addFromString_Callback";
  addFromString_Callback_1_(mthis, __arg_0) => addFromString_Callback_1(mthis, __arg_0);

  static addFromString_Callback_2(mthis, __arg_0, __arg_1) native "SpeechGrammarList_addFromString_Callback";
  addFromString_Callback_2_(mthis, __arg_0, __arg_1) => addFromString_Callback_2(mthis, __arg_0, __arg_1);

  static addFromString_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SpeechGrammarList_addFromString_Callback";
  addFromString_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addFromString_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addFromString_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SpeechGrammarList_addFromString_Callback";
  addFromString_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => addFromString_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static addFromUri_Callback_0(mthis) native "SpeechGrammarList_addFromUri_Callback";
  addFromUri_Callback_0_(mthis) => addFromUri_Callback_0(mthis);

  static addFromUri_Callback_1(mthis, __arg_0) native "SpeechGrammarList_addFromUri_Callback";
  addFromUri_Callback_1_(mthis, __arg_0) => addFromUri_Callback_1(mthis, __arg_0);

  static addFromUri_Callback_2(mthis, __arg_0, __arg_1) native "SpeechGrammarList_addFromUri_Callback";
  addFromUri_Callback_2_(mthis, __arg_0, __arg_1) => addFromUri_Callback_2(mthis, __arg_0, __arg_1);

  static addFromUri_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SpeechGrammarList_addFromUri_Callback";
  addFromUri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addFromUri_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addFromUri_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SpeechGrammarList_addFromUri_Callback";
  addFromUri_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => addFromUri_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_0() native "SpeechGrammarList_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "SpeechGrammarList_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "SpeechGrammarList_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static item_Callback_0(mthis) native "SpeechGrammarList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "SpeechGrammarList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "SpeechGrammarList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SpeechGrammarList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "SpeechGrammarList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkSpeechRecognition extends BlinkEventTarget {
  static final instance = new BlinkSpeechRecognition();

  static abort_Callback_0(mthis) native "SpeechRecognition_abort_Callback";
  abort_Callback_0_(mthis) => abort_Callback_0(mthis);

  static abort_Callback_1(mthis, __arg_0) native "SpeechRecognition_abort_Callback";
  abort_Callback_1_(mthis, __arg_0) => abort_Callback_1(mthis, __arg_0);

  static abort_Callback_2(mthis, __arg_0, __arg_1) native "SpeechRecognition_abort_Callback";
  abort_Callback_2_(mthis, __arg_0, __arg_1) => abort_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "SpeechRecognition_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "SpeechRecognition_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "SpeechRecognition_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static continuous_Getter(mthis) native "SpeechRecognition_continuous_Getter";
  continuous_Getter_(mthis) => continuous_Getter(mthis);

  static continuous_Setter(mthis, __arg_0) native "SpeechRecognition_continuous_Setter";
  continuous_Setter_(mthis, __arg_0) => continuous_Setter(mthis, __arg_0);

  static grammars_Getter(mthis) native "SpeechRecognition_grammars_Getter";
  grammars_Getter_(mthis) => grammars_Getter(mthis);

  static grammars_Setter(mthis, __arg_0) native "SpeechRecognition_grammars_Setter";
  grammars_Setter_(mthis, __arg_0) => grammars_Setter(mthis, __arg_0);

  static interimResults_Getter(mthis) native "SpeechRecognition_interimResults_Getter";
  interimResults_Getter_(mthis) => interimResults_Getter(mthis);

  static interimResults_Setter(mthis, __arg_0) native "SpeechRecognition_interimResults_Setter";
  interimResults_Setter_(mthis, __arg_0) => interimResults_Setter(mthis, __arg_0);

  static lang_Getter(mthis) native "SpeechRecognition_lang_Getter";
  lang_Getter_(mthis) => lang_Getter(mthis);

  static lang_Setter(mthis, __arg_0) native "SpeechRecognition_lang_Setter";
  lang_Setter_(mthis, __arg_0) => lang_Setter(mthis, __arg_0);

  static maxAlternatives_Getter(mthis) native "SpeechRecognition_maxAlternatives_Getter";
  maxAlternatives_Getter_(mthis) => maxAlternatives_Getter(mthis);

  static maxAlternatives_Setter(mthis, __arg_0) native "SpeechRecognition_maxAlternatives_Setter";
  maxAlternatives_Setter_(mthis, __arg_0) => maxAlternatives_Setter(mthis, __arg_0);

  static onaudioend_Getter(mthis) native "SpeechRecognition_onaudioend_Getter";
  onaudioend_Getter_(mthis) => onaudioend_Getter(mthis);

  static onaudioend_Setter(mthis, __arg_0) native "SpeechRecognition_onaudioend_Setter";
  onaudioend_Setter_(mthis, __arg_0) => onaudioend_Setter(mthis, __arg_0);

  static onaudiostart_Getter(mthis) native "SpeechRecognition_onaudiostart_Getter";
  onaudiostart_Getter_(mthis) => onaudiostart_Getter(mthis);

  static onaudiostart_Setter(mthis, __arg_0) native "SpeechRecognition_onaudiostart_Setter";
  onaudiostart_Setter_(mthis, __arg_0) => onaudiostart_Setter(mthis, __arg_0);

  static onend_Getter(mthis) native "SpeechRecognition_onend_Getter";
  onend_Getter_(mthis) => onend_Getter(mthis);

  static onend_Setter(mthis, __arg_0) native "SpeechRecognition_onend_Setter";
  onend_Setter_(mthis, __arg_0) => onend_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "SpeechRecognition_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "SpeechRecognition_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onnomatch_Getter(mthis) native "SpeechRecognition_onnomatch_Getter";
  onnomatch_Getter_(mthis) => onnomatch_Getter(mthis);

  static onnomatch_Setter(mthis, __arg_0) native "SpeechRecognition_onnomatch_Setter";
  onnomatch_Setter_(mthis, __arg_0) => onnomatch_Setter(mthis, __arg_0);

  static onresult_Getter(mthis) native "SpeechRecognition_onresult_Getter";
  onresult_Getter_(mthis) => onresult_Getter(mthis);

  static onresult_Setter(mthis, __arg_0) native "SpeechRecognition_onresult_Setter";
  onresult_Setter_(mthis, __arg_0) => onresult_Setter(mthis, __arg_0);

  static onsoundend_Getter(mthis) native "SpeechRecognition_onsoundend_Getter";
  onsoundend_Getter_(mthis) => onsoundend_Getter(mthis);

  static onsoundend_Setter(mthis, __arg_0) native "SpeechRecognition_onsoundend_Setter";
  onsoundend_Setter_(mthis, __arg_0) => onsoundend_Setter(mthis, __arg_0);

  static onsoundstart_Getter(mthis) native "SpeechRecognition_onsoundstart_Getter";
  onsoundstart_Getter_(mthis) => onsoundstart_Getter(mthis);

  static onsoundstart_Setter(mthis, __arg_0) native "SpeechRecognition_onsoundstart_Setter";
  onsoundstart_Setter_(mthis, __arg_0) => onsoundstart_Setter(mthis, __arg_0);

  static onspeechend_Getter(mthis) native "SpeechRecognition_onspeechend_Getter";
  onspeechend_Getter_(mthis) => onspeechend_Getter(mthis);

  static onspeechend_Setter(mthis, __arg_0) native "SpeechRecognition_onspeechend_Setter";
  onspeechend_Setter_(mthis, __arg_0) => onspeechend_Setter(mthis, __arg_0);

  static onspeechstart_Getter(mthis) native "SpeechRecognition_onspeechstart_Getter";
  onspeechstart_Getter_(mthis) => onspeechstart_Getter(mthis);

  static onspeechstart_Setter(mthis, __arg_0) native "SpeechRecognition_onspeechstart_Setter";
  onspeechstart_Setter_(mthis, __arg_0) => onspeechstart_Setter(mthis, __arg_0);

  static onstart_Getter(mthis) native "SpeechRecognition_onstart_Getter";
  onstart_Getter_(mthis) => onstart_Getter(mthis);

  static onstart_Setter(mthis, __arg_0) native "SpeechRecognition_onstart_Setter";
  onstart_Setter_(mthis, __arg_0) => onstart_Setter(mthis, __arg_0);

  static start_Callback_0(mthis) native "SpeechRecognition_start_Callback";
  start_Callback_0_(mthis) => start_Callback_0(mthis);

  static start_Callback_1(mthis, __arg_0) native "SpeechRecognition_start_Callback";
  start_Callback_1_(mthis, __arg_0) => start_Callback_1(mthis, __arg_0);

  static start_Callback_2(mthis, __arg_0, __arg_1) native "SpeechRecognition_start_Callback";
  start_Callback_2_(mthis, __arg_0, __arg_1) => start_Callback_2(mthis, __arg_0, __arg_1);

  static stop_Callback_0(mthis) native "SpeechRecognition_stop_Callback";
  stop_Callback_0_(mthis) => stop_Callback_0(mthis);

  static stop_Callback_1(mthis, __arg_0) native "SpeechRecognition_stop_Callback";
  stop_Callback_1_(mthis, __arg_0) => stop_Callback_1(mthis, __arg_0);

  static stop_Callback_2(mthis, __arg_0, __arg_1) native "SpeechRecognition_stop_Callback";
  stop_Callback_2_(mthis, __arg_0, __arg_1) => stop_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkSpeechRecognitionAlternative {
  static final instance = new BlinkSpeechRecognitionAlternative();

  static confidence_Getter(mthis) native "SpeechRecognitionAlternative_confidence_Getter";
  confidence_Getter_(mthis) => confidence_Getter(mthis);

  static transcript_Getter(mthis) native "SpeechRecognitionAlternative_transcript_Getter";
  transcript_Getter_(mthis) => transcript_Getter(mthis);

}

class BlinkSpeechRecognitionError extends BlinkEvent {
  static final instance = new BlinkSpeechRecognitionError();

  static constructorCallback_2(__arg_0, __arg_1) native "SpeechRecognitionError_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static error_Getter(mthis) native "SpeechRecognitionError_error_Getter";
  error_Getter_(mthis) => error_Getter(mthis);

  static message_Getter(mthis) native "SpeechRecognitionError_message_Getter";
  message_Getter_(mthis) => message_Getter(mthis);

}

class BlinkSpeechRecognitionEvent extends BlinkEvent {
  static final instance = new BlinkSpeechRecognitionEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "SpeechRecognitionEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static emma_Getter(mthis) native "SpeechRecognitionEvent_emma_Getter";
  emma_Getter_(mthis) => emma_Getter(mthis);

  static interpretation_Getter(mthis) native "SpeechRecognitionEvent_interpretation_Getter";
  interpretation_Getter_(mthis) => interpretation_Getter(mthis);

  static resultIndex_Getter(mthis) native "SpeechRecognitionEvent_resultIndex_Getter";
  resultIndex_Getter_(mthis) => resultIndex_Getter(mthis);

  static results_Getter(mthis) native "SpeechRecognitionEvent_results_Getter";
  results_Getter_(mthis) => results_Getter(mthis);

}

class BlinkSpeechRecognitionResult {
  static final instance = new BlinkSpeechRecognitionResult();

  static $__getter___Callback_1(mthis, __arg_0) native "SpeechRecognitionResult___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static isFinal_Getter(mthis) native "SpeechRecognitionResult_isFinal_Getter";
  isFinal_Getter_(mthis) => isFinal_Getter(mthis);

  static item_Callback_0(mthis) native "SpeechRecognitionResult_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "SpeechRecognitionResult_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "SpeechRecognitionResult_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SpeechRecognitionResult_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "SpeechRecognitionResult_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkSpeechRecognitionResultList {
  static final instance = new BlinkSpeechRecognitionResultList();

  static $__getter___Callback_1(mthis, __arg_0) native "SpeechRecognitionResultList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "SpeechRecognitionResultList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "SpeechRecognitionResultList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "SpeechRecognitionResultList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SpeechRecognitionResultList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "SpeechRecognitionResultList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkSpeechSynthesis extends BlinkEventTarget {
  static final instance = new BlinkSpeechSynthesis();

  static cancel_Callback_0(mthis) native "SpeechSynthesis_cancel_Callback";
  cancel_Callback_0_(mthis) => cancel_Callback_0(mthis);

  static cancel_Callback_1(mthis, __arg_0) native "SpeechSynthesis_cancel_Callback";
  cancel_Callback_1_(mthis, __arg_0) => cancel_Callback_1(mthis, __arg_0);

  static cancel_Callback_2(mthis, __arg_0, __arg_1) native "SpeechSynthesis_cancel_Callback";
  cancel_Callback_2_(mthis, __arg_0, __arg_1) => cancel_Callback_2(mthis, __arg_0, __arg_1);

  static getVoices_Callback_0(mthis) native "SpeechSynthesis_getVoices_Callback";
  getVoices_Callback_0_(mthis) => getVoices_Callback_0(mthis);

  static getVoices_Callback_1(mthis, __arg_0) native "SpeechSynthesis_getVoices_Callback";
  getVoices_Callback_1_(mthis, __arg_0) => getVoices_Callback_1(mthis, __arg_0);

  static getVoices_Callback_2(mthis, __arg_0, __arg_1) native "SpeechSynthesis_getVoices_Callback";
  getVoices_Callback_2_(mthis, __arg_0, __arg_1) => getVoices_Callback_2(mthis, __arg_0, __arg_1);

  static onvoiceschanged_Getter(mthis) native "SpeechSynthesis_onvoiceschanged_Getter";
  onvoiceschanged_Getter_(mthis) => onvoiceschanged_Getter(mthis);

  static onvoiceschanged_Setter(mthis, __arg_0) native "SpeechSynthesis_onvoiceschanged_Setter";
  onvoiceschanged_Setter_(mthis, __arg_0) => onvoiceschanged_Setter(mthis, __arg_0);

  static pause_Callback_0(mthis) native "SpeechSynthesis_pause_Callback";
  pause_Callback_0_(mthis) => pause_Callback_0(mthis);

  static pause_Callback_1(mthis, __arg_0) native "SpeechSynthesis_pause_Callback";
  pause_Callback_1_(mthis, __arg_0) => pause_Callback_1(mthis, __arg_0);

  static pause_Callback_2(mthis, __arg_0, __arg_1) native "SpeechSynthesis_pause_Callback";
  pause_Callback_2_(mthis, __arg_0, __arg_1) => pause_Callback_2(mthis, __arg_0, __arg_1);

  static paused_Getter(mthis) native "SpeechSynthesis_paused_Getter";
  paused_Getter_(mthis) => paused_Getter(mthis);

  static pending_Getter(mthis) native "SpeechSynthesis_pending_Getter";
  pending_Getter_(mthis) => pending_Getter(mthis);

  static resume_Callback_0(mthis) native "SpeechSynthesis_resume_Callback";
  resume_Callback_0_(mthis) => resume_Callback_0(mthis);

  static resume_Callback_1(mthis, __arg_0) native "SpeechSynthesis_resume_Callback";
  resume_Callback_1_(mthis, __arg_0) => resume_Callback_1(mthis, __arg_0);

  static resume_Callback_2(mthis, __arg_0, __arg_1) native "SpeechSynthesis_resume_Callback";
  resume_Callback_2_(mthis, __arg_0, __arg_1) => resume_Callback_2(mthis, __arg_0, __arg_1);

  static speak_Callback_0(mthis) native "SpeechSynthesis_speak_Callback";
  speak_Callback_0_(mthis) => speak_Callback_0(mthis);

  static speak_Callback_1(mthis, __arg_0) native "SpeechSynthesis_speak_Callback";
  speak_Callback_1_(mthis, __arg_0) => speak_Callback_1(mthis, __arg_0);

  static speak_Callback_2(mthis, __arg_0, __arg_1) native "SpeechSynthesis_speak_Callback";
  speak_Callback_2_(mthis, __arg_0, __arg_1) => speak_Callback_2(mthis, __arg_0, __arg_1);

  static speak_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SpeechSynthesis_speak_Callback";
  speak_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => speak_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static speaking_Getter(mthis) native "SpeechSynthesis_speaking_Getter";
  speaking_Getter_(mthis) => speaking_Getter(mthis);

}

class BlinkSpeechSynthesisEvent extends BlinkEvent {
  static final instance = new BlinkSpeechSynthesisEvent();

  static charIndex_Getter(mthis) native "SpeechSynthesisEvent_charIndex_Getter";
  charIndex_Getter_(mthis) => charIndex_Getter(mthis);

  static elapsedTime_Getter(mthis) native "SpeechSynthesisEvent_elapsedTime_Getter";
  elapsedTime_Getter_(mthis) => elapsedTime_Getter(mthis);

  static name_Getter(mthis) native "SpeechSynthesisEvent_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

}

class BlinkSpeechSynthesisUtterance extends BlinkEventTarget {
  static final instance = new BlinkSpeechSynthesisUtterance();

  static constructorCallback_0() native "SpeechSynthesisUtterance_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "SpeechSynthesisUtterance_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "SpeechSynthesisUtterance_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "SpeechSynthesisUtterance_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static lang_Getter(mthis) native "SpeechSynthesisUtterance_lang_Getter";
  lang_Getter_(mthis) => lang_Getter(mthis);

  static lang_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_lang_Setter";
  lang_Setter_(mthis, __arg_0) => lang_Setter(mthis, __arg_0);

  static onboundary_Getter(mthis) native "SpeechSynthesisUtterance_onboundary_Getter";
  onboundary_Getter_(mthis) => onboundary_Getter(mthis);

  static onboundary_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_onboundary_Setter";
  onboundary_Setter_(mthis, __arg_0) => onboundary_Setter(mthis, __arg_0);

  static onend_Getter(mthis) native "SpeechSynthesisUtterance_onend_Getter";
  onend_Getter_(mthis) => onend_Getter(mthis);

  static onend_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_onend_Setter";
  onend_Setter_(mthis, __arg_0) => onend_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "SpeechSynthesisUtterance_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onmark_Getter(mthis) native "SpeechSynthesisUtterance_onmark_Getter";
  onmark_Getter_(mthis) => onmark_Getter(mthis);

  static onmark_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_onmark_Setter";
  onmark_Setter_(mthis, __arg_0) => onmark_Setter(mthis, __arg_0);

  static onpause_Getter(mthis) native "SpeechSynthesisUtterance_onpause_Getter";
  onpause_Getter_(mthis) => onpause_Getter(mthis);

  static onpause_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_onpause_Setter";
  onpause_Setter_(mthis, __arg_0) => onpause_Setter(mthis, __arg_0);

  static onresume_Getter(mthis) native "SpeechSynthesisUtterance_onresume_Getter";
  onresume_Getter_(mthis) => onresume_Getter(mthis);

  static onresume_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_onresume_Setter";
  onresume_Setter_(mthis, __arg_0) => onresume_Setter(mthis, __arg_0);

  static onstart_Getter(mthis) native "SpeechSynthesisUtterance_onstart_Getter";
  onstart_Getter_(mthis) => onstart_Getter(mthis);

  static onstart_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_onstart_Setter";
  onstart_Setter_(mthis, __arg_0) => onstart_Setter(mthis, __arg_0);

  static pitch_Getter(mthis) native "SpeechSynthesisUtterance_pitch_Getter";
  pitch_Getter_(mthis) => pitch_Getter(mthis);

  static pitch_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_pitch_Setter";
  pitch_Setter_(mthis, __arg_0) => pitch_Setter(mthis, __arg_0);

  static rate_Getter(mthis) native "SpeechSynthesisUtterance_rate_Getter";
  rate_Getter_(mthis) => rate_Getter(mthis);

  static rate_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_rate_Setter";
  rate_Setter_(mthis, __arg_0) => rate_Setter(mthis, __arg_0);

  static text_Getter(mthis) native "SpeechSynthesisUtterance_text_Getter";
  text_Getter_(mthis) => text_Getter(mthis);

  static text_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_text_Setter";
  text_Setter_(mthis, __arg_0) => text_Setter(mthis, __arg_0);

  static voice_Getter(mthis) native "SpeechSynthesisUtterance_voice_Getter";
  voice_Getter_(mthis) => voice_Getter(mthis);

  static voice_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_voice_Setter";
  voice_Setter_(mthis, __arg_0) => voice_Setter(mthis, __arg_0);

  static volume_Getter(mthis) native "SpeechSynthesisUtterance_volume_Getter";
  volume_Getter_(mthis) => volume_Getter(mthis);

  static volume_Setter(mthis, __arg_0) native "SpeechSynthesisUtterance_volume_Setter";
  volume_Setter_(mthis, __arg_0) => volume_Setter(mthis, __arg_0);

}

class BlinkSpeechSynthesisVoice {
  static final instance = new BlinkSpeechSynthesisVoice();

  static default_Getter(mthis) native "SpeechSynthesisVoice_default_Getter";
  default_Getter_(mthis) => default_Getter(mthis);

  static lang_Getter(mthis) native "SpeechSynthesisVoice_lang_Getter";
  lang_Getter_(mthis) => lang_Getter(mthis);

  static localService_Getter(mthis) native "SpeechSynthesisVoice_localService_Getter";
  localService_Getter_(mthis) => localService_Getter(mthis);

  static name_Getter(mthis) native "SpeechSynthesisVoice_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static voiceURI_Getter(mthis) native "SpeechSynthesisVoice_voiceURI_Getter";
  voiceURI_Getter_(mthis) => voiceURI_Getter(mthis);

}

class BlinkStorage {
  static final instance = new BlinkStorage();

  static $__delete___Callback_1(mthis, __arg_0) native "Storage___delete___Callback";
  $__delete___Callback_1_(mthis, __arg_0) => $__delete___Callback_1(mthis, __arg_0);

  static $__getter___Callback_1(mthis, __arg_0) native "Storage___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "Storage___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static clear_Callback_0(mthis) native "Storage_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "Storage_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "Storage_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_0(mthis) native "Storage_getItem_Callback";
  getItem_Callback_0_(mthis) => getItem_Callback_0(mthis);

  static getItem_Callback_1(mthis, __arg_0) native "Storage_getItem_Callback";
  getItem_Callback_1_(mthis, __arg_0) => getItem_Callback_1(mthis, __arg_0);

  static getItem_Callback_2(mthis, __arg_0, __arg_1) native "Storage_getItem_Callback";
  getItem_Callback_2_(mthis, __arg_0, __arg_1) => getItem_Callback_2(mthis, __arg_0, __arg_1);

  static getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Storage_getItem_Callback";
  getItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static key_Callback_0(mthis) native "Storage_key_Callback";
  key_Callback_0_(mthis) => key_Callback_0(mthis);

  static key_Callback_1(mthis, __arg_0) native "Storage_key_Callback";
  key_Callback_1_(mthis, __arg_0) => key_Callback_1(mthis, __arg_0);

  static key_Callback_2(mthis, __arg_0, __arg_1) native "Storage_key_Callback";
  key_Callback_2_(mthis, __arg_0, __arg_1) => key_Callback_2(mthis, __arg_0, __arg_1);

  static key_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Storage_key_Callback";
  key_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => key_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "Storage_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static removeItem_Callback_0(mthis) native "Storage_removeItem_Callback";
  removeItem_Callback_0_(mthis) => removeItem_Callback_0(mthis);

  static removeItem_Callback_1(mthis, __arg_0) native "Storage_removeItem_Callback";
  removeItem_Callback_1_(mthis, __arg_0) => removeItem_Callback_1(mthis, __arg_0);

  static removeItem_Callback_2(mthis, __arg_0, __arg_1) native "Storage_removeItem_Callback";
  removeItem_Callback_2_(mthis, __arg_0, __arg_1) => removeItem_Callback_2(mthis, __arg_0, __arg_1);

  static removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Storage_removeItem_Callback";
  removeItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setItem_Callback_0(mthis) native "Storage_setItem_Callback";
  setItem_Callback_0_(mthis) => setItem_Callback_0(mthis);

  static setItem_Callback_1(mthis, __arg_0) native "Storage_setItem_Callback";
  setItem_Callback_1_(mthis, __arg_0) => setItem_Callback_1(mthis, __arg_0);

  static setItem_Callback_2(mthis, __arg_0, __arg_1) native "Storage_setItem_Callback";
  setItem_Callback_2_(mthis, __arg_0, __arg_1) => setItem_Callback_2(mthis, __arg_0, __arg_1);

  static setItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Storage_setItem_Callback";
  setItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Storage_setItem_Callback";
  setItem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setItem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}

class BlinkStorageEvent extends BlinkEvent {
  static final instance = new BlinkStorageEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "StorageEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static initStorageEvent_Callback_0(mthis) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_0_(mthis) => initStorageEvent_Callback_0(mthis);

  static initStorageEvent_Callback_1(mthis, __arg_0) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_1_(mthis, __arg_0) => initStorageEvent_Callback_1(mthis, __arg_0);

  static initStorageEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => initStorageEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static initStorageEvent_Callback_2(mthis, __arg_0, __arg_1) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_2_(mthis, __arg_0, __arg_1) => initStorageEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initStorageEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initStorageEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initStorageEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initStorageEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initStorageEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initStorageEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initStorageEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initStorageEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initStorageEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initStorageEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static initStorageEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => initStorageEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static initStorageEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "StorageEvent_initStorageEvent_Callback";
  initStorageEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => initStorageEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static key_Getter(mthis) native "StorageEvent_key_Getter";
  key_Getter_(mthis) => key_Getter(mthis);

  static newValue_Getter(mthis) native "StorageEvent_newValue_Getter";
  newValue_Getter_(mthis) => newValue_Getter(mthis);

  static oldValue_Getter(mthis) native "StorageEvent_oldValue_Getter";
  oldValue_Getter_(mthis) => oldValue_Getter(mthis);

  static storageArea_Getter(mthis) native "StorageEvent_storageArea_Getter";
  storageArea_Getter_(mthis) => storageArea_Getter(mthis);

  static url_Getter(mthis) native "StorageEvent_url_Getter";
  url_Getter_(mthis) => url_Getter(mthis);

}

class BlinkStorageInfo {
  static final instance = new BlinkStorageInfo();

  static quota_Getter(mthis) native "StorageInfo_quota_Getter";
  quota_Getter_(mthis) => quota_Getter(mthis);

  static usage_Getter(mthis) native "StorageInfo_usage_Getter";
  usage_Getter_(mthis) => usage_Getter(mthis);

}

class BlinkStorageQuota {
  static final instance = new BlinkStorageQuota();

  static queryInfo_Callback_0(mthis) native "StorageQuota_queryInfo_Callback";
  queryInfo_Callback_0_(mthis) => queryInfo_Callback_0(mthis);

  static queryInfo_Callback_1(mthis, __arg_0) native "StorageQuota_queryInfo_Callback";
  queryInfo_Callback_1_(mthis, __arg_0) => queryInfo_Callback_1(mthis, __arg_0);

  static queryInfo_Callback_2(mthis, __arg_0, __arg_1) native "StorageQuota_queryInfo_Callback";
  queryInfo_Callback_2_(mthis, __arg_0, __arg_1) => queryInfo_Callback_2(mthis, __arg_0, __arg_1);

  static queryInfo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "StorageQuota_queryInfo_Callback";
  queryInfo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => queryInfo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static requestPersistentQuota_Callback_0(mthis) native "StorageQuota_requestPersistentQuota_Callback";
  requestPersistentQuota_Callback_0_(mthis) => requestPersistentQuota_Callback_0(mthis);

  static requestPersistentQuota_Callback_1(mthis, __arg_0) native "StorageQuota_requestPersistentQuota_Callback";
  requestPersistentQuota_Callback_1_(mthis, __arg_0) => requestPersistentQuota_Callback_1(mthis, __arg_0);

  static requestPersistentQuota_Callback_2(mthis, __arg_0, __arg_1) native "StorageQuota_requestPersistentQuota_Callback";
  requestPersistentQuota_Callback_2_(mthis, __arg_0, __arg_1) => requestPersistentQuota_Callback_2(mthis, __arg_0, __arg_1);

  static requestPersistentQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "StorageQuota_requestPersistentQuota_Callback";
  requestPersistentQuota_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => requestPersistentQuota_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static supportedTypes_Getter(mthis) native "StorageQuota_supportedTypes_Getter";
  supportedTypes_Getter_(mthis) => supportedTypes_Getter(mthis);

}

class BlinkStream {
  static final instance = new BlinkStream();

  static type_Getter(mthis) native "Stream_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkStyleMedia {
  static final instance = new BlinkStyleMedia();

  static matchMedium_Callback_0(mthis) native "StyleMedia_matchMedium_Callback";
  matchMedium_Callback_0_(mthis) => matchMedium_Callback_0(mthis);

  static matchMedium_Callback_1(mthis, __arg_0) native "StyleMedia_matchMedium_Callback";
  matchMedium_Callback_1_(mthis, __arg_0) => matchMedium_Callback_1(mthis, __arg_0);

  static matchMedium_Callback_2(mthis, __arg_0, __arg_1) native "StyleMedia_matchMedium_Callback";
  matchMedium_Callback_2_(mthis, __arg_0, __arg_1) => matchMedium_Callback_2(mthis, __arg_0, __arg_1);

  static matchMedium_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "StyleMedia_matchMedium_Callback";
  matchMedium_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => matchMedium_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static type_Getter(mthis) native "StyleMedia_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkStyleSheet {
  static final instance = new BlinkStyleSheet();

  static disabled_Getter(mthis) native "StyleSheet_disabled_Getter";
  disabled_Getter_(mthis) => disabled_Getter(mthis);

  static disabled_Setter(mthis, __arg_0) native "StyleSheet_disabled_Setter";
  disabled_Setter_(mthis, __arg_0) => disabled_Setter(mthis, __arg_0);

  static href_Getter(mthis) native "StyleSheet_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static media_Getter(mthis) native "StyleSheet_media_Getter";
  media_Getter_(mthis) => media_Getter(mthis);

  static ownerNode_Getter(mthis) native "StyleSheet_ownerNode_Getter";
  ownerNode_Getter_(mthis) => ownerNode_Getter(mthis);

  static parentStyleSheet_Getter(mthis) native "StyleSheet_parentStyleSheet_Getter";
  parentStyleSheet_Getter_(mthis) => parentStyleSheet_Getter(mthis);

  static title_Getter(mthis) native "StyleSheet_title_Getter";
  title_Getter_(mthis) => title_Getter(mthis);

  static type_Getter(mthis) native "StyleSheet_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkStyleSheetList {
  static final instance = new BlinkStyleSheetList();

  static $__getter___Callback_1(mthis, __arg_0) native "StyleSheetList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "StyleSheetList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "StyleSheetList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "StyleSheetList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "StyleSheetList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "StyleSheetList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkSubtleCrypto {
  static final instance = new BlinkSubtleCrypto();

  static decrypt_Callback_1(mthis, __arg_0) native "SubtleCrypto_decrypt_Callback";
  decrypt_Callback_1_(mthis, __arg_0) => decrypt_Callback_1(mthis, __arg_0);

  static decrypt_Callback_2(mthis, __arg_0, __arg_1) native "SubtleCrypto_decrypt_Callback";
  decrypt_Callback_2_(mthis, __arg_0, __arg_1) => decrypt_Callback_2(mthis, __arg_0, __arg_1);

  static decrypt_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SubtleCrypto_decrypt_Callback";
  decrypt_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => decrypt_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static decrypt_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SubtleCrypto_decrypt_Callback";
  decrypt_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => decrypt_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static decrypt_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SubtleCrypto_decrypt_Callback";
  decrypt_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => decrypt_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static digest_Callback_0(mthis) native "SubtleCrypto_digest_Callback";
  digest_Callback_0_(mthis) => digest_Callback_0(mthis);

  static digest_Callback_1(mthis, __arg_0) native "SubtleCrypto_digest_Callback";
  digest_Callback_1_(mthis, __arg_0) => digest_Callback_1(mthis, __arg_0);

  static digest_Callback_2(mthis, __arg_0, __arg_1) native "SubtleCrypto_digest_Callback";
  digest_Callback_2_(mthis, __arg_0, __arg_1) => digest_Callback_2(mthis, __arg_0, __arg_1);

  static digest_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SubtleCrypto_digest_Callback";
  digest_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => digest_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static digest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SubtleCrypto_digest_Callback";
  digest_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => digest_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static encrypt_Callback_1(mthis, __arg_0) native "SubtleCrypto_encrypt_Callback";
  encrypt_Callback_1_(mthis, __arg_0) => encrypt_Callback_1(mthis, __arg_0);

  static encrypt_Callback_2(mthis, __arg_0, __arg_1) native "SubtleCrypto_encrypt_Callback";
  encrypt_Callback_2_(mthis, __arg_0, __arg_1) => encrypt_Callback_2(mthis, __arg_0, __arg_1);

  static encrypt_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SubtleCrypto_encrypt_Callback";
  encrypt_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => encrypt_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static encrypt_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SubtleCrypto_encrypt_Callback";
  encrypt_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => encrypt_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static encrypt_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SubtleCrypto_encrypt_Callback";
  encrypt_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => encrypt_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static exportKey_Callback_0(mthis) native "SubtleCrypto_exportKey_Callback";
  exportKey_Callback_0_(mthis) => exportKey_Callback_0(mthis);

  static exportKey_Callback_1(mthis, __arg_0) native "SubtleCrypto_exportKey_Callback";
  exportKey_Callback_1_(mthis, __arg_0) => exportKey_Callback_1(mthis, __arg_0);

  static exportKey_Callback_2(mthis, __arg_0, __arg_1) native "SubtleCrypto_exportKey_Callback";
  exportKey_Callback_2_(mthis, __arg_0, __arg_1) => exportKey_Callback_2(mthis, __arg_0, __arg_1);

  static exportKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SubtleCrypto_exportKey_Callback";
  exportKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => exportKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static exportKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SubtleCrypto_exportKey_Callback";
  exportKey_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => exportKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static generateKey_Callback_1(mthis, __arg_0) native "SubtleCrypto_generateKey_Callback";
  generateKey_Callback_1_(mthis, __arg_0) => generateKey_Callback_1(mthis, __arg_0);

  static generateKey_Callback_2(mthis, __arg_0, __arg_1) native "SubtleCrypto_generateKey_Callback";
  generateKey_Callback_2_(mthis, __arg_0, __arg_1) => generateKey_Callback_2(mthis, __arg_0, __arg_1);

  static generateKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SubtleCrypto_generateKey_Callback";
  generateKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => generateKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static generateKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SubtleCrypto_generateKey_Callback";
  generateKey_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => generateKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static generateKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SubtleCrypto_generateKey_Callback";
  generateKey_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => generateKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static importKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SubtleCrypto_importKey_Callback";
  importKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => importKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static importKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SubtleCrypto_importKey_Callback";
  importKey_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => importKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static importKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SubtleCrypto_importKey_Callback";
  importKey_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => importKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static importKey_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SubtleCrypto_importKey_Callback";
  importKey_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => importKey_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static importKey_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "SubtleCrypto_importKey_Callback";
  importKey_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => importKey_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static sign_Callback_1(mthis, __arg_0) native "SubtleCrypto_sign_Callback";
  sign_Callback_1_(mthis, __arg_0) => sign_Callback_1(mthis, __arg_0);

  static sign_Callback_2(mthis, __arg_0, __arg_1) native "SubtleCrypto_sign_Callback";
  sign_Callback_2_(mthis, __arg_0, __arg_1) => sign_Callback_2(mthis, __arg_0, __arg_1);

  static sign_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SubtleCrypto_sign_Callback";
  sign_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => sign_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static sign_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SubtleCrypto_sign_Callback";
  sign_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => sign_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static sign_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SubtleCrypto_sign_Callback";
  sign_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => sign_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static unwrapKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SubtleCrypto_unwrapKey_Callback";
  unwrapKey_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => unwrapKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static unwrapKey_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SubtleCrypto_unwrapKey_Callback";
  unwrapKey_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => unwrapKey_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static unwrapKey_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "SubtleCrypto_unwrapKey_Callback";
  unwrapKey_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => unwrapKey_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static unwrapKey_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "SubtleCrypto_unwrapKey_Callback";
  unwrapKey_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => unwrapKey_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static unwrapKey_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "SubtleCrypto_unwrapKey_Callback";
  unwrapKey_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => unwrapKey_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static verify_Callback_2(mthis, __arg_0, __arg_1) native "SubtleCrypto_verify_Callback";
  verify_Callback_2_(mthis, __arg_0, __arg_1) => verify_Callback_2(mthis, __arg_0, __arg_1);

  static verify_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SubtleCrypto_verify_Callback";
  verify_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => verify_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static verify_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SubtleCrypto_verify_Callback";
  verify_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => verify_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static verify_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SubtleCrypto_verify_Callback";
  verify_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => verify_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static verify_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SubtleCrypto_verify_Callback";
  verify_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => verify_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static wrapKey_Callback_2(mthis, __arg_0, __arg_1) native "SubtleCrypto_wrapKey_Callback";
  wrapKey_Callback_2_(mthis, __arg_0, __arg_1) => wrapKey_Callback_2(mthis, __arg_0, __arg_1);

  static wrapKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "SubtleCrypto_wrapKey_Callback";
  wrapKey_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => wrapKey_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static wrapKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "SubtleCrypto_wrapKey_Callback";
  wrapKey_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => wrapKey_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static wrapKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "SubtleCrypto_wrapKey_Callback";
  wrapKey_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => wrapKey_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static wrapKey_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "SubtleCrypto_wrapKey_Callback";
  wrapKey_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => wrapKey_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

}

class BlinkText extends BlinkCharacterData {
  static final instance = new BlinkText();

  static constructorCallback_0() native "Text_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Text_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Text_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Text_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static getDestinationInsertionPoints_Callback_0(mthis) native "Text_getDestinationInsertionPoints_Callback";
  getDestinationInsertionPoints_Callback_0_(mthis) => getDestinationInsertionPoints_Callback_0(mthis);

  static getDestinationInsertionPoints_Callback_1(mthis, __arg_0) native "Text_getDestinationInsertionPoints_Callback";
  getDestinationInsertionPoints_Callback_1_(mthis, __arg_0) => getDestinationInsertionPoints_Callback_1(mthis, __arg_0);

  static getDestinationInsertionPoints_Callback_2(mthis, __arg_0, __arg_1) native "Text_getDestinationInsertionPoints_Callback";
  getDestinationInsertionPoints_Callback_2_(mthis, __arg_0, __arg_1) => getDestinationInsertionPoints_Callback_2(mthis, __arg_0, __arg_1);

  static replaceWholeText_Callback_0(mthis) native "Text_replaceWholeText_Callback";
  replaceWholeText_Callback_0_(mthis) => replaceWholeText_Callback_0(mthis);

  static replaceWholeText_Callback_1(mthis, __arg_0) native "Text_replaceWholeText_Callback";
  replaceWholeText_Callback_1_(mthis, __arg_0) => replaceWholeText_Callback_1(mthis, __arg_0);

  static replaceWholeText_Callback_2(mthis, __arg_0, __arg_1) native "Text_replaceWholeText_Callback";
  replaceWholeText_Callback_2_(mthis, __arg_0, __arg_1) => replaceWholeText_Callback_2(mthis, __arg_0, __arg_1);

  static replaceWholeText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Text_replaceWholeText_Callback";
  replaceWholeText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => replaceWholeText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static splitText_Callback_0(mthis) native "Text_splitText_Callback";
  splitText_Callback_0_(mthis) => splitText_Callback_0(mthis);

  static splitText_Callback_1(mthis, __arg_0) native "Text_splitText_Callback";
  splitText_Callback_1_(mthis, __arg_0) => splitText_Callback_1(mthis, __arg_0);

  static splitText_Callback_2(mthis, __arg_0, __arg_1) native "Text_splitText_Callback";
  splitText_Callback_2_(mthis, __arg_0, __arg_1) => splitText_Callback_2(mthis, __arg_0, __arg_1);

  static splitText_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Text_splitText_Callback";
  splitText_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => splitText_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static wholeText_Getter(mthis) native "Text_wholeText_Getter";
  wholeText_Getter_(mthis) => wholeText_Getter(mthis);

}

class BlinkTextDecoder {
  static final instance = new BlinkTextDecoder();

  static constructorCallback_0() native "TextDecoder_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "TextDecoder_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "TextDecoder_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "TextDecoder_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "TextDecoder_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static decode_Callback_0(mthis) native "TextDecoder_decode_Callback";
  decode_Callback_0_(mthis) => decode_Callback_0(mthis);

  static decode_Callback_1(mthis, __arg_0) native "TextDecoder_decode_Callback";
  decode_Callback_1_(mthis, __arg_0) => decode_Callback_1(mthis, __arg_0);

  static decode_Callback_2(mthis, __arg_0, __arg_1) native "TextDecoder_decode_Callback";
  decode_Callback_2_(mthis, __arg_0, __arg_1) => decode_Callback_2(mthis, __arg_0, __arg_1);

  static decode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextDecoder_decode_Callback";
  decode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => decode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static decode_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "TextDecoder_decode_Callback";
  decode_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => decode_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static encoding_Getter(mthis) native "TextDecoder_encoding_Getter";
  encoding_Getter_(mthis) => encoding_Getter(mthis);

  static fatal_Getter(mthis) native "TextDecoder_fatal_Getter";
  fatal_Getter_(mthis) => fatal_Getter(mthis);

  static ignoreBOM_Getter(mthis) native "TextDecoder_ignoreBOM_Getter";
  ignoreBOM_Getter_(mthis) => ignoreBOM_Getter(mthis);

}

class BlinkTextEncoder {
  static final instance = new BlinkTextEncoder();

  static constructorCallback_0() native "TextEncoder_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "TextEncoder_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "TextEncoder_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "TextEncoder_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static encode_Callback_0(mthis) native "TextEncoder_encode_Callback";
  encode_Callback_0_(mthis) => encode_Callback_0(mthis);

  static encode_Callback_1(mthis, __arg_0) native "TextEncoder_encode_Callback";
  encode_Callback_1_(mthis, __arg_0) => encode_Callback_1(mthis, __arg_0);

  static encode_Callback_2(mthis, __arg_0, __arg_1) native "TextEncoder_encode_Callback";
  encode_Callback_2_(mthis, __arg_0, __arg_1) => encode_Callback_2(mthis, __arg_0, __arg_1);

  static encode_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextEncoder_encode_Callback";
  encode_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => encode_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static encoding_Getter(mthis) native "TextEncoder_encoding_Getter";
  encoding_Getter_(mthis) => encoding_Getter(mthis);

}

class BlinkTextEvent extends BlinkUIEvent {
  static final instance = new BlinkTextEvent();

  static data_Getter(mthis) native "TextEvent_data_Getter";
  data_Getter_(mthis) => data_Getter(mthis);

  static initTextEvent_Callback_0(mthis) native "TextEvent_initTextEvent_Callback";
  initTextEvent_Callback_0_(mthis) => initTextEvent_Callback_0(mthis);

  static initTextEvent_Callback_1(mthis, __arg_0) native "TextEvent_initTextEvent_Callback";
  initTextEvent_Callback_1_(mthis, __arg_0) => initTextEvent_Callback_1(mthis, __arg_0);

  static initTextEvent_Callback_2(mthis, __arg_0, __arg_1) native "TextEvent_initTextEvent_Callback";
  initTextEvent_Callback_2_(mthis, __arg_0, __arg_1) => initTextEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initTextEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextEvent_initTextEvent_Callback";
  initTextEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initTextEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initTextEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "TextEvent_initTextEvent_Callback";
  initTextEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initTextEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initTextEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "TextEvent_initTextEvent_Callback";
  initTextEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initTextEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initTextEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "TextEvent_initTextEvent_Callback";
  initTextEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initTextEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initTextEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "TextEvent_initTextEvent_Callback";
  initTextEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initTextEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

}

class BlinkTextMetrics {
  static final instance = new BlinkTextMetrics();

  static actualBoundingBoxAscent_Getter(mthis) native "TextMetrics_actualBoundingBoxAscent_Getter";
  actualBoundingBoxAscent_Getter_(mthis) => actualBoundingBoxAscent_Getter(mthis);

  static actualBoundingBoxDescent_Getter(mthis) native "TextMetrics_actualBoundingBoxDescent_Getter";
  actualBoundingBoxDescent_Getter_(mthis) => actualBoundingBoxDescent_Getter(mthis);

  static actualBoundingBoxLeft_Getter(mthis) native "TextMetrics_actualBoundingBoxLeft_Getter";
  actualBoundingBoxLeft_Getter_(mthis) => actualBoundingBoxLeft_Getter(mthis);

  static actualBoundingBoxRight_Getter(mthis) native "TextMetrics_actualBoundingBoxRight_Getter";
  actualBoundingBoxRight_Getter_(mthis) => actualBoundingBoxRight_Getter(mthis);

  static alphabeticBaseline_Getter(mthis) native "TextMetrics_alphabeticBaseline_Getter";
  alphabeticBaseline_Getter_(mthis) => alphabeticBaseline_Getter(mthis);

  static emHeightAscent_Getter(mthis) native "TextMetrics_emHeightAscent_Getter";
  emHeightAscent_Getter_(mthis) => emHeightAscent_Getter(mthis);

  static emHeightDescent_Getter(mthis) native "TextMetrics_emHeightDescent_Getter";
  emHeightDescent_Getter_(mthis) => emHeightDescent_Getter(mthis);

  static fontBoundingBoxAscent_Getter(mthis) native "TextMetrics_fontBoundingBoxAscent_Getter";
  fontBoundingBoxAscent_Getter_(mthis) => fontBoundingBoxAscent_Getter(mthis);

  static fontBoundingBoxDescent_Getter(mthis) native "TextMetrics_fontBoundingBoxDescent_Getter";
  fontBoundingBoxDescent_Getter_(mthis) => fontBoundingBoxDescent_Getter(mthis);

  static hangingBaseline_Getter(mthis) native "TextMetrics_hangingBaseline_Getter";
  hangingBaseline_Getter_(mthis) => hangingBaseline_Getter(mthis);

  static ideographicBaseline_Getter(mthis) native "TextMetrics_ideographicBaseline_Getter";
  ideographicBaseline_Getter_(mthis) => ideographicBaseline_Getter(mthis);

  static width_Getter(mthis) native "TextMetrics_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

}

class BlinkTextTrack extends BlinkEventTarget {
  static final instance = new BlinkTextTrack();

  static activeCues_Getter(mthis) native "TextTrack_activeCues_Getter";
  activeCues_Getter_(mthis) => activeCues_Getter(mthis);

  static addCue_Callback_0(mthis) native "TextTrack_addCue_Callback";
  addCue_Callback_0_(mthis) => addCue_Callback_0(mthis);

  static addCue_Callback_1(mthis, __arg_0) native "TextTrack_addCue_Callback";
  addCue_Callback_1_(mthis, __arg_0) => addCue_Callback_1(mthis, __arg_0);

  static addCue_Callback_2(mthis, __arg_0, __arg_1) native "TextTrack_addCue_Callback";
  addCue_Callback_2_(mthis, __arg_0, __arg_1) => addCue_Callback_2(mthis, __arg_0, __arg_1);

  static addCue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextTrack_addCue_Callback";
  addCue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addCue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static addRegion_Callback_0(mthis) native "TextTrack_addRegion_Callback";
  addRegion_Callback_0_(mthis) => addRegion_Callback_0(mthis);

  static addRegion_Callback_1(mthis, __arg_0) native "TextTrack_addRegion_Callback";
  addRegion_Callback_1_(mthis, __arg_0) => addRegion_Callback_1(mthis, __arg_0);

  static addRegion_Callback_2(mthis, __arg_0, __arg_1) native "TextTrack_addRegion_Callback";
  addRegion_Callback_2_(mthis, __arg_0, __arg_1) => addRegion_Callback_2(mthis, __arg_0, __arg_1);

  static addRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextTrack_addRegion_Callback";
  addRegion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => addRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static cues_Getter(mthis) native "TextTrack_cues_Getter";
  cues_Getter_(mthis) => cues_Getter(mthis);

  static id_Getter(mthis) native "TextTrack_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static kind_Getter(mthis) native "TextTrack_kind_Getter";
  kind_Getter_(mthis) => kind_Getter(mthis);

  static label_Getter(mthis) native "TextTrack_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static language_Getter(mthis) native "TextTrack_language_Getter";
  language_Getter_(mthis) => language_Getter(mthis);

  static mode_Getter(mthis) native "TextTrack_mode_Getter";
  mode_Getter_(mthis) => mode_Getter(mthis);

  static mode_Setter(mthis, __arg_0) native "TextTrack_mode_Setter";
  mode_Setter_(mthis, __arg_0) => mode_Setter(mthis, __arg_0);

  static oncuechange_Getter(mthis) native "TextTrack_oncuechange_Getter";
  oncuechange_Getter_(mthis) => oncuechange_Getter(mthis);

  static oncuechange_Setter(mthis, __arg_0) native "TextTrack_oncuechange_Setter";
  oncuechange_Setter_(mthis, __arg_0) => oncuechange_Setter(mthis, __arg_0);

  static regions_Getter(mthis) native "TextTrack_regions_Getter";
  regions_Getter_(mthis) => regions_Getter(mthis);

  static removeCue_Callback_0(mthis) native "TextTrack_removeCue_Callback";
  removeCue_Callback_0_(mthis) => removeCue_Callback_0(mthis);

  static removeCue_Callback_1(mthis, __arg_0) native "TextTrack_removeCue_Callback";
  removeCue_Callback_1_(mthis, __arg_0) => removeCue_Callback_1(mthis, __arg_0);

  static removeCue_Callback_2(mthis, __arg_0, __arg_1) native "TextTrack_removeCue_Callback";
  removeCue_Callback_2_(mthis, __arg_0, __arg_1) => removeCue_Callback_2(mthis, __arg_0, __arg_1);

  static removeCue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextTrack_removeCue_Callback";
  removeCue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeCue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static removeRegion_Callback_0(mthis) native "TextTrack_removeRegion_Callback";
  removeRegion_Callback_0_(mthis) => removeRegion_Callback_0(mthis);

  static removeRegion_Callback_1(mthis, __arg_0) native "TextTrack_removeRegion_Callback";
  removeRegion_Callback_1_(mthis, __arg_0) => removeRegion_Callback_1(mthis, __arg_0);

  static removeRegion_Callback_2(mthis, __arg_0, __arg_1) native "TextTrack_removeRegion_Callback";
  removeRegion_Callback_2_(mthis, __arg_0, __arg_1) => removeRegion_Callback_2(mthis, __arg_0, __arg_1);

  static removeRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextTrack_removeRegion_Callback";
  removeRegion_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeRegion_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkTextTrackCue extends BlinkEventTarget {
  static final instance = new BlinkTextTrackCue();

  static endTime_Getter(mthis) native "TextTrackCue_endTime_Getter";
  endTime_Getter_(mthis) => endTime_Getter(mthis);

  static endTime_Setter(mthis, __arg_0) native "TextTrackCue_endTime_Setter";
  endTime_Setter_(mthis, __arg_0) => endTime_Setter(mthis, __arg_0);

  static id_Getter(mthis) native "TextTrackCue_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static id_Setter(mthis, __arg_0) native "TextTrackCue_id_Setter";
  id_Setter_(mthis, __arg_0) => id_Setter(mthis, __arg_0);

  static onenter_Getter(mthis) native "TextTrackCue_onenter_Getter";
  onenter_Getter_(mthis) => onenter_Getter(mthis);

  static onenter_Setter(mthis, __arg_0) native "TextTrackCue_onenter_Setter";
  onenter_Setter_(mthis, __arg_0) => onenter_Setter(mthis, __arg_0);

  static onexit_Getter(mthis) native "TextTrackCue_onexit_Getter";
  onexit_Getter_(mthis) => onexit_Getter(mthis);

  static onexit_Setter(mthis, __arg_0) native "TextTrackCue_onexit_Setter";
  onexit_Setter_(mthis, __arg_0) => onexit_Setter(mthis, __arg_0);

  static pauseOnExit_Getter(mthis) native "TextTrackCue_pauseOnExit_Getter";
  pauseOnExit_Getter_(mthis) => pauseOnExit_Getter(mthis);

  static pauseOnExit_Setter(mthis, __arg_0) native "TextTrackCue_pauseOnExit_Setter";
  pauseOnExit_Setter_(mthis, __arg_0) => pauseOnExit_Setter(mthis, __arg_0);

  static startTime_Getter(mthis) native "TextTrackCue_startTime_Getter";
  startTime_Getter_(mthis) => startTime_Getter(mthis);

  static startTime_Setter(mthis, __arg_0) native "TextTrackCue_startTime_Setter";
  startTime_Setter_(mthis, __arg_0) => startTime_Setter(mthis, __arg_0);

  static track_Getter(mthis) native "TextTrackCue_track_Getter";
  track_Getter_(mthis) => track_Getter(mthis);

}

class BlinkTextTrackCueList {
  static final instance = new BlinkTextTrackCueList();

  static $__getter___Callback_1(mthis, __arg_0) native "TextTrackCueList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static getCueById_Callback_0(mthis) native "TextTrackCueList_getCueById_Callback";
  getCueById_Callback_0_(mthis) => getCueById_Callback_0(mthis);

  static getCueById_Callback_1(mthis, __arg_0) native "TextTrackCueList_getCueById_Callback";
  getCueById_Callback_1_(mthis, __arg_0) => getCueById_Callback_1(mthis, __arg_0);

  static getCueById_Callback_2(mthis, __arg_0, __arg_1) native "TextTrackCueList_getCueById_Callback";
  getCueById_Callback_2_(mthis, __arg_0, __arg_1) => getCueById_Callback_2(mthis, __arg_0, __arg_1);

  static getCueById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextTrackCueList_getCueById_Callback";
  getCueById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getCueById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static item_Callback_0(mthis) native "TextTrackCueList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "TextTrackCueList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "TextTrackCueList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextTrackCueList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "TextTrackCueList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkTextTrackList extends BlinkEventTarget {
  static final instance = new BlinkTextTrackList();

  static $__getter___Callback_1(mthis, __arg_0) native "TextTrackList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static getTrackById_Callback_0(mthis) native "TextTrackList_getTrackById_Callback";
  getTrackById_Callback_0_(mthis) => getTrackById_Callback_0(mthis);

  static getTrackById_Callback_1(mthis, __arg_0) native "TextTrackList_getTrackById_Callback";
  getTrackById_Callback_1_(mthis, __arg_0) => getTrackById_Callback_1(mthis, __arg_0);

  static getTrackById_Callback_2(mthis, __arg_0, __arg_1) native "TextTrackList_getTrackById_Callback";
  getTrackById_Callback_2_(mthis, __arg_0, __arg_1) => getTrackById_Callback_2(mthis, __arg_0, __arg_1);

  static getTrackById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextTrackList_getTrackById_Callback";
  getTrackById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getTrackById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static item_Callback_0(mthis) native "TextTrackList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "TextTrackList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "TextTrackList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TextTrackList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "TextTrackList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static onaddtrack_Getter(mthis) native "TextTrackList_onaddtrack_Getter";
  onaddtrack_Getter_(mthis) => onaddtrack_Getter(mthis);

  static onaddtrack_Setter(mthis, __arg_0) native "TextTrackList_onaddtrack_Setter";
  onaddtrack_Setter_(mthis, __arg_0) => onaddtrack_Setter(mthis, __arg_0);

  static onchange_Getter(mthis) native "TextTrackList_onchange_Getter";
  onchange_Getter_(mthis) => onchange_Getter(mthis);

  static onchange_Setter(mthis, __arg_0) native "TextTrackList_onchange_Setter";
  onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);

  static onremovetrack_Getter(mthis) native "TextTrackList_onremovetrack_Getter";
  onremovetrack_Getter_(mthis) => onremovetrack_Getter(mthis);

  static onremovetrack_Setter(mthis, __arg_0) native "TextTrackList_onremovetrack_Setter";
  onremovetrack_Setter_(mthis, __arg_0) => onremovetrack_Setter(mthis, __arg_0);

}

class BlinkTimeRanges {
  static final instance = new BlinkTimeRanges();

  static end_Callback_0(mthis) native "TimeRanges_end_Callback";
  end_Callback_0_(mthis) => end_Callback_0(mthis);

  static end_Callback_1(mthis, __arg_0) native "TimeRanges_end_Callback";
  end_Callback_1_(mthis, __arg_0) => end_Callback_1(mthis, __arg_0);

  static end_Callback_2(mthis, __arg_0, __arg_1) native "TimeRanges_end_Callback";
  end_Callback_2_(mthis, __arg_0, __arg_1) => end_Callback_2(mthis, __arg_0, __arg_1);

  static end_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TimeRanges_end_Callback";
  end_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => end_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "TimeRanges_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static start_Callback_0(mthis) native "TimeRanges_start_Callback";
  start_Callback_0_(mthis) => start_Callback_0(mthis);

  static start_Callback_1(mthis, __arg_0) native "TimeRanges_start_Callback";
  start_Callback_1_(mthis, __arg_0) => start_Callback_1(mthis, __arg_0);

  static start_Callback_2(mthis, __arg_0, __arg_1) native "TimeRanges_start_Callback";
  start_Callback_2_(mthis, __arg_0, __arg_1) => start_Callback_2(mthis, __arg_0, __arg_1);

  static start_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TimeRanges_start_Callback";
  start_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => start_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkTiming {
  static final instance = new BlinkTiming();

  static $__getter___Callback_1(mthis, __arg_0) native "Timing___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static $__setter___Callback_2(mthis, __arg_0, __arg_1) native "Timing___setter___Callback";
  $__setter___Callback_2_(mthis, __arg_0, __arg_1) => $__setter___Callback_2(mthis, __arg_0, __arg_1);

  static delay_Getter(mthis) native "Timing_delay_Getter";
  delay_Getter_(mthis) => delay_Getter(mthis);

  static delay_Setter(mthis, __arg_0) native "Timing_delay_Setter";
  delay_Setter_(mthis, __arg_0) => delay_Setter(mthis, __arg_0);

  static direction_Getter(mthis) native "Timing_direction_Getter";
  direction_Getter_(mthis) => direction_Getter(mthis);

  static direction_Setter(mthis, __arg_0) native "Timing_direction_Setter";
  direction_Setter_(mthis, __arg_0) => direction_Setter(mthis, __arg_0);

  static easing_Getter(mthis) native "Timing_easing_Getter";
  easing_Getter_(mthis) => easing_Getter(mthis);

  static easing_Setter(mthis, __arg_0) native "Timing_easing_Setter";
  easing_Setter_(mthis, __arg_0) => easing_Setter(mthis, __arg_0);

  static endDelay_Getter(mthis) native "Timing_endDelay_Getter";
  endDelay_Getter_(mthis) => endDelay_Getter(mthis);

  static endDelay_Setter(mthis, __arg_0) native "Timing_endDelay_Setter";
  endDelay_Setter_(mthis, __arg_0) => endDelay_Setter(mthis, __arg_0);

  static fill_Getter(mthis) native "Timing_fill_Getter";
  fill_Getter_(mthis) => fill_Getter(mthis);

  static fill_Setter(mthis, __arg_0) native "Timing_fill_Setter";
  fill_Setter_(mthis, __arg_0) => fill_Setter(mthis, __arg_0);

  static iterationStart_Getter(mthis) native "Timing_iterationStart_Getter";
  iterationStart_Getter_(mthis) => iterationStart_Getter(mthis);

  static iterationStart_Setter(mthis, __arg_0) native "Timing_iterationStart_Setter";
  iterationStart_Setter_(mthis, __arg_0) => iterationStart_Setter(mthis, __arg_0);

  static iterations_Getter(mthis) native "Timing_iterations_Getter";
  iterations_Getter_(mthis) => iterations_Getter(mthis);

  static iterations_Setter(mthis, __arg_0) native "Timing_iterations_Setter";
  iterations_Setter_(mthis, __arg_0) => iterations_Setter(mthis, __arg_0);

  static playbackRate_Getter(mthis) native "Timing_playbackRate_Getter";
  playbackRate_Getter_(mthis) => playbackRate_Getter(mthis);

  static playbackRate_Setter(mthis, __arg_0) native "Timing_playbackRate_Setter";
  playbackRate_Setter_(mthis, __arg_0) => playbackRate_Setter(mthis, __arg_0);

}

class BlinkTouch {
  static final instance = new BlinkTouch();

  static clientX_Getter(mthis) native "Touch_clientX_Getter";
  clientX_Getter_(mthis) => clientX_Getter(mthis);

  static clientY_Getter(mthis) native "Touch_clientY_Getter";
  clientY_Getter_(mthis) => clientY_Getter(mthis);

  static force_Getter(mthis) native "Touch_force_Getter";
  force_Getter_(mthis) => force_Getter(mthis);

  static identifier_Getter(mthis) native "Touch_identifier_Getter";
  identifier_Getter_(mthis) => identifier_Getter(mthis);

  static pageX_Getter(mthis) native "Touch_pageX_Getter";
  pageX_Getter_(mthis) => pageX_Getter(mthis);

  static pageY_Getter(mthis) native "Touch_pageY_Getter";
  pageY_Getter_(mthis) => pageY_Getter(mthis);

  static radiusX_Getter(mthis) native "Touch_radiusX_Getter";
  radiusX_Getter_(mthis) => radiusX_Getter(mthis);

  static radiusY_Getter(mthis) native "Touch_radiusY_Getter";
  radiusY_Getter_(mthis) => radiusY_Getter(mthis);

  static screenX_Getter(mthis) native "Touch_screenX_Getter";
  screenX_Getter_(mthis) => screenX_Getter(mthis);

  static screenY_Getter(mthis) native "Touch_screenY_Getter";
  screenY_Getter_(mthis) => screenY_Getter(mthis);

  static target_Getter(mthis) native "Touch_target_Getter";
  target_Getter_(mthis) => target_Getter(mthis);

  static webkitForce_Getter(mthis) native "Touch_webkitForce_Getter";
  webkitForce_Getter_(mthis) => webkitForce_Getter(mthis);

  static webkitRadiusX_Getter(mthis) native "Touch_webkitRadiusX_Getter";
  webkitRadiusX_Getter_(mthis) => webkitRadiusX_Getter(mthis);

  static webkitRadiusY_Getter(mthis) native "Touch_webkitRadiusY_Getter";
  webkitRadiusY_Getter_(mthis) => webkitRadiusY_Getter(mthis);

  static webkitRotationAngle_Getter(mthis) native "Touch_webkitRotationAngle_Getter";
  webkitRotationAngle_Getter_(mthis) => webkitRotationAngle_Getter(mthis);

}

class BlinkTouchEvent extends BlinkUIEvent {
  static final instance = new BlinkTouchEvent();

  static altKey_Getter(mthis) native "TouchEvent_altKey_Getter";
  altKey_Getter_(mthis) => altKey_Getter(mthis);

  static changedTouches_Getter(mthis) native "TouchEvent_changedTouches_Getter";
  changedTouches_Getter_(mthis) => changedTouches_Getter(mthis);

  static ctrlKey_Getter(mthis) native "TouchEvent_ctrlKey_Getter";
  ctrlKey_Getter_(mthis) => ctrlKey_Getter(mthis);

  static initTouchEvent_Callback_0(mthis) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_0_(mthis) => initTouchEvent_Callback_0(mthis);

  static initTouchEvent_Callback_1(mthis, __arg_0) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_1_(mthis, __arg_0) => initTouchEvent_Callback_1(mthis, __arg_0);

  static initTouchEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => initTouchEvent_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static initTouchEvent_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => initTouchEvent_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10);

  static initTouchEvent_Callback_12(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_12_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11) => initTouchEvent_Callback_12(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11);

  static initTouchEvent_Callback_13(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_13_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12) => initTouchEvent_Callback_13(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12);

  static initTouchEvent_Callback_14(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_14_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13) => initTouchEvent_Callback_14(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13);

  static initTouchEvent_Callback_15(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_15_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14) => initTouchEvent_Callback_15(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10, __arg_11, __arg_12, __arg_13, __arg_14);

  static initTouchEvent_Callback_2(mthis, __arg_0, __arg_1) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_2_(mthis, __arg_0, __arg_1) => initTouchEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initTouchEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initTouchEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initTouchEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initTouchEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initTouchEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initTouchEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initTouchEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initTouchEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initTouchEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initTouchEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static initTouchEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => initTouchEvent_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static initTouchEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "TouchEvent_initTouchEvent_Callback";
  initTouchEvent_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => initTouchEvent_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static metaKey_Getter(mthis) native "TouchEvent_metaKey_Getter";
  metaKey_Getter_(mthis) => metaKey_Getter(mthis);

  static shiftKey_Getter(mthis) native "TouchEvent_shiftKey_Getter";
  shiftKey_Getter_(mthis) => shiftKey_Getter(mthis);

  static targetTouches_Getter(mthis) native "TouchEvent_targetTouches_Getter";
  targetTouches_Getter_(mthis) => targetTouches_Getter(mthis);

  static touches_Getter(mthis) native "TouchEvent_touches_Getter";
  touches_Getter_(mthis) => touches_Getter(mthis);

}

class BlinkTouchList {
  static final instance = new BlinkTouchList();

  static $__getter___Callback_1(mthis, __arg_0) native "TouchList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "TouchList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "TouchList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "TouchList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "TouchList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "TouchList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkTrackEvent extends BlinkEvent {
  static final instance = new BlinkTrackEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "TrackEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static track_Getter(mthis) native "TrackEvent_track_Getter";
  track_Getter_(mthis) => track_Getter(mthis);

}

class BlinkTransitionEvent extends BlinkEvent {
  static final instance = new BlinkTransitionEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "TransitionEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static elapsedTime_Getter(mthis) native "TransitionEvent_elapsedTime_Getter";
  elapsedTime_Getter_(mthis) => elapsedTime_Getter(mthis);

  static propertyName_Getter(mthis) native "TransitionEvent_propertyName_Getter";
  propertyName_Getter_(mthis) => propertyName_Getter(mthis);

  static pseudoElement_Getter(mthis) native "TransitionEvent_pseudoElement_Getter";
  pseudoElement_Getter_(mthis) => pseudoElement_Getter(mthis);

}

class BlinkTreeWalker {
  static final instance = new BlinkTreeWalker();

  static currentNode_Getter(mthis) native "TreeWalker_currentNode_Getter";
  currentNode_Getter_(mthis) => currentNode_Getter(mthis);

  static currentNode_Setter(mthis, __arg_0) native "TreeWalker_currentNode_Setter";
  currentNode_Setter_(mthis, __arg_0) => currentNode_Setter(mthis, __arg_0);

  static expandEntityReferences_Getter(mthis) native "TreeWalker_expandEntityReferences_Getter";
  expandEntityReferences_Getter_(mthis) => expandEntityReferences_Getter(mthis);

  static filter_Getter(mthis) native "TreeWalker_filter_Getter";
  filter_Getter_(mthis) => filter_Getter(mthis);

  static firstChild_Callback_0(mthis) native "TreeWalker_firstChild_Callback";
  firstChild_Callback_0_(mthis) => firstChild_Callback_0(mthis);

  static firstChild_Callback_1(mthis, __arg_0) native "TreeWalker_firstChild_Callback";
  firstChild_Callback_1_(mthis, __arg_0) => firstChild_Callback_1(mthis, __arg_0);

  static firstChild_Callback_2(mthis, __arg_0, __arg_1) native "TreeWalker_firstChild_Callback";
  firstChild_Callback_2_(mthis, __arg_0, __arg_1) => firstChild_Callback_2(mthis, __arg_0, __arg_1);

  static lastChild_Callback_0(mthis) native "TreeWalker_lastChild_Callback";
  lastChild_Callback_0_(mthis) => lastChild_Callback_0(mthis);

  static lastChild_Callback_1(mthis, __arg_0) native "TreeWalker_lastChild_Callback";
  lastChild_Callback_1_(mthis, __arg_0) => lastChild_Callback_1(mthis, __arg_0);

  static lastChild_Callback_2(mthis, __arg_0, __arg_1) native "TreeWalker_lastChild_Callback";
  lastChild_Callback_2_(mthis, __arg_0, __arg_1) => lastChild_Callback_2(mthis, __arg_0, __arg_1);

  static nextNode_Callback_0(mthis) native "TreeWalker_nextNode_Callback";
  nextNode_Callback_0_(mthis) => nextNode_Callback_0(mthis);

  static nextNode_Callback_1(mthis, __arg_0) native "TreeWalker_nextNode_Callback";
  nextNode_Callback_1_(mthis, __arg_0) => nextNode_Callback_1(mthis, __arg_0);

  static nextNode_Callback_2(mthis, __arg_0, __arg_1) native "TreeWalker_nextNode_Callback";
  nextNode_Callback_2_(mthis, __arg_0, __arg_1) => nextNode_Callback_2(mthis, __arg_0, __arg_1);

  static nextSibling_Callback_0(mthis) native "TreeWalker_nextSibling_Callback";
  nextSibling_Callback_0_(mthis) => nextSibling_Callback_0(mthis);

  static nextSibling_Callback_1(mthis, __arg_0) native "TreeWalker_nextSibling_Callback";
  nextSibling_Callback_1_(mthis, __arg_0) => nextSibling_Callback_1(mthis, __arg_0);

  static nextSibling_Callback_2(mthis, __arg_0, __arg_1) native "TreeWalker_nextSibling_Callback";
  nextSibling_Callback_2_(mthis, __arg_0, __arg_1) => nextSibling_Callback_2(mthis, __arg_0, __arg_1);

  static parentNode_Callback_0(mthis) native "TreeWalker_parentNode_Callback";
  parentNode_Callback_0_(mthis) => parentNode_Callback_0(mthis);

  static parentNode_Callback_1(mthis, __arg_0) native "TreeWalker_parentNode_Callback";
  parentNode_Callback_1_(mthis, __arg_0) => parentNode_Callback_1(mthis, __arg_0);

  static parentNode_Callback_2(mthis, __arg_0, __arg_1) native "TreeWalker_parentNode_Callback";
  parentNode_Callback_2_(mthis, __arg_0, __arg_1) => parentNode_Callback_2(mthis, __arg_0, __arg_1);

  static previousNode_Callback_0(mthis) native "TreeWalker_previousNode_Callback";
  previousNode_Callback_0_(mthis) => previousNode_Callback_0(mthis);

  static previousNode_Callback_1(mthis, __arg_0) native "TreeWalker_previousNode_Callback";
  previousNode_Callback_1_(mthis, __arg_0) => previousNode_Callback_1(mthis, __arg_0);

  static previousNode_Callback_2(mthis, __arg_0, __arg_1) native "TreeWalker_previousNode_Callback";
  previousNode_Callback_2_(mthis, __arg_0, __arg_1) => previousNode_Callback_2(mthis, __arg_0, __arg_1);

  static previousSibling_Callback_0(mthis) native "TreeWalker_previousSibling_Callback";
  previousSibling_Callback_0_(mthis) => previousSibling_Callback_0(mthis);

  static previousSibling_Callback_1(mthis, __arg_0) native "TreeWalker_previousSibling_Callback";
  previousSibling_Callback_1_(mthis, __arg_0) => previousSibling_Callback_1(mthis, __arg_0);

  static previousSibling_Callback_2(mthis, __arg_0, __arg_1) native "TreeWalker_previousSibling_Callback";
  previousSibling_Callback_2_(mthis, __arg_0, __arg_1) => previousSibling_Callback_2(mthis, __arg_0, __arg_1);

  static root_Getter(mthis) native "TreeWalker_root_Getter";
  root_Getter_(mthis) => root_Getter(mthis);

  static whatToShow_Getter(mthis) native "TreeWalker_whatToShow_Getter";
  whatToShow_Getter_(mthis) => whatToShow_Getter(mthis);

}

class BlinkUIEvent extends BlinkEvent {
  static final instance = new BlinkUIEvent();

  static charCode_Getter(mthis) native "UIEvent_charCode_Getter";
  charCode_Getter_(mthis) => charCode_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "UIEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static detail_Getter(mthis) native "UIEvent_detail_Getter";
  detail_Getter_(mthis) => detail_Getter(mthis);

  static initUIEvent_Callback_0(mthis) native "UIEvent_initUIEvent_Callback";
  initUIEvent_Callback_0_(mthis) => initUIEvent_Callback_0(mthis);

  static initUIEvent_Callback_1(mthis, __arg_0) native "UIEvent_initUIEvent_Callback";
  initUIEvent_Callback_1_(mthis, __arg_0) => initUIEvent_Callback_1(mthis, __arg_0);

  static initUIEvent_Callback_2(mthis, __arg_0, __arg_1) native "UIEvent_initUIEvent_Callback";
  initUIEvent_Callback_2_(mthis, __arg_0, __arg_1) => initUIEvent_Callback_2(mthis, __arg_0, __arg_1);

  static initUIEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "UIEvent_initUIEvent_Callback";
  initUIEvent_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => initUIEvent_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static initUIEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "UIEvent_initUIEvent_Callback";
  initUIEvent_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => initUIEvent_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static initUIEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "UIEvent_initUIEvent_Callback";
  initUIEvent_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => initUIEvent_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static initUIEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "UIEvent_initUIEvent_Callback";
  initUIEvent_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => initUIEvent_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static initUIEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "UIEvent_initUIEvent_Callback";
  initUIEvent_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => initUIEvent_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static keyCode_Getter(mthis) native "UIEvent_keyCode_Getter";
  keyCode_Getter_(mthis) => keyCode_Getter(mthis);

  static layerX_Getter(mthis) native "UIEvent_layerX_Getter";
  layerX_Getter_(mthis) => layerX_Getter(mthis);

  static layerY_Getter(mthis) native "UIEvent_layerY_Getter";
  layerY_Getter_(mthis) => layerY_Getter(mthis);

  static pageX_Getter(mthis) native "UIEvent_pageX_Getter";
  pageX_Getter_(mthis) => pageX_Getter(mthis);

  static pageY_Getter(mthis) native "UIEvent_pageY_Getter";
  pageY_Getter_(mthis) => pageY_Getter(mthis);

  static view_Getter(mthis) native "UIEvent_view_Getter";
  view_Getter_(mthis) => view_Getter(mthis);

  static which_Getter(mthis) native "UIEvent_which_Getter";
  which_Getter_(mthis) => which_Getter(mthis);

}

class BlinkURL {
  static final instance = new BlinkURL();

  static constructorCallback_0() native "URL_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "URL_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "URL_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "URL_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "URL_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static createObjectURL_Callback_0() native "URL_createObjectURL_Callback";
  createObjectURL_Callback_0_() => createObjectURL_Callback_0();

  static createObjectURL_Callback_1(__arg_0) native "URL_createObjectURL_Callback";
  createObjectURL_Callback_1_(__arg_0) => createObjectURL_Callback_1(__arg_0);

  static createObjectURL_Callback_2(__arg_0, __arg_1) native "URL_createObjectURL_Callback";
  createObjectURL_Callback_2_(__arg_0, __arg_1) => createObjectURL_Callback_2(__arg_0, __arg_1);

  static createObjectURL_Callback_3(__arg_0, __arg_1, __arg_2) native "URL_createObjectURL_Callback";
  createObjectURL_Callback_3_(__arg_0, __arg_1, __arg_2) => createObjectURL_Callback_3(__arg_0, __arg_1, __arg_2);

  static hash_Getter(mthis) native "URL_hash_Getter";
  hash_Getter_(mthis) => hash_Getter(mthis);

  static hash_Setter(mthis, __arg_0) native "URL_hash_Setter";
  hash_Setter_(mthis, __arg_0) => hash_Setter(mthis, __arg_0);

  static host_Getter(mthis) native "URL_host_Getter";
  host_Getter_(mthis) => host_Getter(mthis);

  static host_Setter(mthis, __arg_0) native "URL_host_Setter";
  host_Setter_(mthis, __arg_0) => host_Setter(mthis, __arg_0);

  static hostname_Getter(mthis) native "URL_hostname_Getter";
  hostname_Getter_(mthis) => hostname_Getter(mthis);

  static hostname_Setter(mthis, __arg_0) native "URL_hostname_Setter";
  hostname_Setter_(mthis, __arg_0) => hostname_Setter(mthis, __arg_0);

  static href_Getter(mthis) native "URL_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static href_Setter(mthis, __arg_0) native "URL_href_Setter";
  href_Setter_(mthis, __arg_0) => href_Setter(mthis, __arg_0);

  static origin_Getter(mthis) native "URL_origin_Getter";
  origin_Getter_(mthis) => origin_Getter(mthis);

  static password_Getter(mthis) native "URL_password_Getter";
  password_Getter_(mthis) => password_Getter(mthis);

  static password_Setter(mthis, __arg_0) native "URL_password_Setter";
  password_Setter_(mthis, __arg_0) => password_Setter(mthis, __arg_0);

  static pathname_Getter(mthis) native "URL_pathname_Getter";
  pathname_Getter_(mthis) => pathname_Getter(mthis);

  static pathname_Setter(mthis, __arg_0) native "URL_pathname_Setter";
  pathname_Setter_(mthis, __arg_0) => pathname_Setter(mthis, __arg_0);

  static port_Getter(mthis) native "URL_port_Getter";
  port_Getter_(mthis) => port_Getter(mthis);

  static port_Setter(mthis, __arg_0) native "URL_port_Setter";
  port_Setter_(mthis, __arg_0) => port_Setter(mthis, __arg_0);

  static protocol_Getter(mthis) native "URL_protocol_Getter";
  protocol_Getter_(mthis) => protocol_Getter(mthis);

  static protocol_Setter(mthis, __arg_0) native "URL_protocol_Setter";
  protocol_Setter_(mthis, __arg_0) => protocol_Setter(mthis, __arg_0);

  static revokeObjectURL_Callback_0() native "URL_revokeObjectURL_Callback";
  revokeObjectURL_Callback_0_() => revokeObjectURL_Callback_0();

  static revokeObjectURL_Callback_1(__arg_0) native "URL_revokeObjectURL_Callback";
  revokeObjectURL_Callback_1_(__arg_0) => revokeObjectURL_Callback_1(__arg_0);

  static revokeObjectURL_Callback_2(__arg_0, __arg_1) native "URL_revokeObjectURL_Callback";
  revokeObjectURL_Callback_2_(__arg_0, __arg_1) => revokeObjectURL_Callback_2(__arg_0, __arg_1);

  static revokeObjectURL_Callback_3(__arg_0, __arg_1, __arg_2) native "URL_revokeObjectURL_Callback";
  revokeObjectURL_Callback_3_(__arg_0, __arg_1, __arg_2) => revokeObjectURL_Callback_3(__arg_0, __arg_1, __arg_2);

  static search_Getter(mthis) native "URL_search_Getter";
  search_Getter_(mthis) => search_Getter(mthis);

  static search_Setter(mthis, __arg_0) native "URL_search_Setter";
  search_Setter_(mthis, __arg_0) => search_Setter(mthis, __arg_0);

  static toString_Callback_0(mthis) native "URL_toString_Callback";
  toString_Callback_0_(mthis) => toString_Callback_0(mthis);

  static toString_Callback_1(mthis, __arg_0) native "URL_toString_Callback";
  toString_Callback_1_(mthis, __arg_0) => toString_Callback_1(mthis, __arg_0);

  static toString_Callback_2(mthis, __arg_0, __arg_1) native "URL_toString_Callback";
  toString_Callback_2_(mthis, __arg_0, __arg_1) => toString_Callback_2(mthis, __arg_0, __arg_1);

  static username_Getter(mthis) native "URL_username_Getter";
  username_Getter_(mthis) => username_Getter(mthis);

  static username_Setter(mthis, __arg_0) native "URL_username_Setter";
  username_Setter_(mthis, __arg_0) => username_Setter(mthis, __arg_0);

}

class BlinkVTTCue extends BlinkTextTrackCue {
  static final instance = new BlinkVTTCue();

  static align_Getter(mthis) native "VTTCue_align_Getter";
  align_Getter_(mthis) => align_Getter(mthis);

  static align_Setter(mthis, __arg_0) native "VTTCue_align_Setter";
  align_Setter_(mthis, __arg_0) => align_Setter(mthis, __arg_0);

  static constructorCallback_1(__arg_0) native "VTTCue_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "VTTCue_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "VTTCue_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "VTTCue_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "VTTCue_constructorCallback";
  constructorCallback_5_(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => constructorCallback_5(__arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static getCueAsHTML_Callback_0(mthis) native "VTTCue_getCueAsHTML_Callback";
  getCueAsHTML_Callback_0_(mthis) => getCueAsHTML_Callback_0(mthis);

  static getCueAsHTML_Callback_1(mthis, __arg_0) native "VTTCue_getCueAsHTML_Callback";
  getCueAsHTML_Callback_1_(mthis, __arg_0) => getCueAsHTML_Callback_1(mthis, __arg_0);

  static getCueAsHTML_Callback_2(mthis, __arg_0, __arg_1) native "VTTCue_getCueAsHTML_Callback";
  getCueAsHTML_Callback_2_(mthis, __arg_0, __arg_1) => getCueAsHTML_Callback_2(mthis, __arg_0, __arg_1);

  static line_Getter(mthis) native "VTTCue_line_Getter";
  line_Getter_(mthis) => line_Getter(mthis);

  static line_Setter(mthis, __arg_0) native "VTTCue_line_Setter";
  line_Setter_(mthis, __arg_0) => line_Setter(mthis, __arg_0);

  static position_Getter(mthis) native "VTTCue_position_Getter";
  position_Getter_(mthis) => position_Getter(mthis);

  static position_Setter(mthis, __arg_0) native "VTTCue_position_Setter";
  position_Setter_(mthis, __arg_0) => position_Setter(mthis, __arg_0);

  static regionId_Getter(mthis) native "VTTCue_regionId_Getter";
  regionId_Getter_(mthis) => regionId_Getter(mthis);

  static regionId_Setter(mthis, __arg_0) native "VTTCue_regionId_Setter";
  regionId_Setter_(mthis, __arg_0) => regionId_Setter(mthis, __arg_0);

  static size_Getter(mthis) native "VTTCue_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

  static size_Setter(mthis, __arg_0) native "VTTCue_size_Setter";
  size_Setter_(mthis, __arg_0) => size_Setter(mthis, __arg_0);

  static snapToLines_Getter(mthis) native "VTTCue_snapToLines_Getter";
  snapToLines_Getter_(mthis) => snapToLines_Getter(mthis);

  static snapToLines_Setter(mthis, __arg_0) native "VTTCue_snapToLines_Setter";
  snapToLines_Setter_(mthis, __arg_0) => snapToLines_Setter(mthis, __arg_0);

  static text_Getter(mthis) native "VTTCue_text_Getter";
  text_Getter_(mthis) => text_Getter(mthis);

  static text_Setter(mthis, __arg_0) native "VTTCue_text_Setter";
  text_Setter_(mthis, __arg_0) => text_Setter(mthis, __arg_0);

  static vertical_Getter(mthis) native "VTTCue_vertical_Getter";
  vertical_Getter_(mthis) => vertical_Getter(mthis);

  static vertical_Setter(mthis, __arg_0) native "VTTCue_vertical_Setter";
  vertical_Setter_(mthis, __arg_0) => vertical_Setter(mthis, __arg_0);

}

class BlinkVTTRegion {
  static final instance = new BlinkVTTRegion();

  static constructorCallback_0() native "VTTRegion_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "VTTRegion_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "VTTRegion_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static height_Getter(mthis) native "VTTRegion_height_Getter";
  height_Getter_(mthis) => height_Getter(mthis);

  static height_Setter(mthis, __arg_0) native "VTTRegion_height_Setter";
  height_Setter_(mthis, __arg_0) => height_Setter(mthis, __arg_0);

  static id_Getter(mthis) native "VTTRegion_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static id_Setter(mthis, __arg_0) native "VTTRegion_id_Setter";
  id_Setter_(mthis, __arg_0) => id_Setter(mthis, __arg_0);

  static regionAnchorX_Getter(mthis) native "VTTRegion_regionAnchorX_Getter";
  regionAnchorX_Getter_(mthis) => regionAnchorX_Getter(mthis);

  static regionAnchorX_Setter(mthis, __arg_0) native "VTTRegion_regionAnchorX_Setter";
  regionAnchorX_Setter_(mthis, __arg_0) => regionAnchorX_Setter(mthis, __arg_0);

  static regionAnchorY_Getter(mthis) native "VTTRegion_regionAnchorY_Getter";
  regionAnchorY_Getter_(mthis) => regionAnchorY_Getter(mthis);

  static regionAnchorY_Setter(mthis, __arg_0) native "VTTRegion_regionAnchorY_Setter";
  regionAnchorY_Setter_(mthis, __arg_0) => regionAnchorY_Setter(mthis, __arg_0);

  static scroll_Getter(mthis) native "VTTRegion_scroll_Getter";
  scroll_Getter_(mthis) => scroll_Getter(mthis);

  static scroll_Setter(mthis, __arg_0) native "VTTRegion_scroll_Setter";
  scroll_Setter_(mthis, __arg_0) => scroll_Setter(mthis, __arg_0);

  static track_Getter(mthis) native "VTTRegion_track_Getter";
  track_Getter_(mthis) => track_Getter(mthis);

  static viewportAnchorX_Getter(mthis) native "VTTRegion_viewportAnchorX_Getter";
  viewportAnchorX_Getter_(mthis) => viewportAnchorX_Getter(mthis);

  static viewportAnchorX_Setter(mthis, __arg_0) native "VTTRegion_viewportAnchorX_Setter";
  viewportAnchorX_Setter_(mthis, __arg_0) => viewportAnchorX_Setter(mthis, __arg_0);

  static viewportAnchorY_Getter(mthis) native "VTTRegion_viewportAnchorY_Getter";
  viewportAnchorY_Getter_(mthis) => viewportAnchorY_Getter(mthis);

  static viewportAnchorY_Setter(mthis, __arg_0) native "VTTRegion_viewportAnchorY_Setter";
  viewportAnchorY_Setter_(mthis, __arg_0) => viewportAnchorY_Setter(mthis, __arg_0);

  static width_Getter(mthis) native "VTTRegion_width_Getter";
  width_Getter_(mthis) => width_Getter(mthis);

  static width_Setter(mthis, __arg_0) native "VTTRegion_width_Setter";
  width_Setter_(mthis, __arg_0) => width_Setter(mthis, __arg_0);

}

class BlinkVTTRegionList {
  static final instance = new BlinkVTTRegionList();

  static $__getter___Callback_1(mthis, __arg_0) native "VTTRegionList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static getRegionById_Callback_0(mthis) native "VTTRegionList_getRegionById_Callback";
  getRegionById_Callback_0_(mthis) => getRegionById_Callback_0(mthis);

  static getRegionById_Callback_1(mthis, __arg_0) native "VTTRegionList_getRegionById_Callback";
  getRegionById_Callback_1_(mthis, __arg_0) => getRegionById_Callback_1(mthis, __arg_0);

  static getRegionById_Callback_2(mthis, __arg_0, __arg_1) native "VTTRegionList_getRegionById_Callback";
  getRegionById_Callback_2_(mthis, __arg_0, __arg_1) => getRegionById_Callback_2(mthis, __arg_0, __arg_1);

  static getRegionById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "VTTRegionList_getRegionById_Callback";
  getRegionById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getRegionById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static item_Callback_0(mthis) native "VTTRegionList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "VTTRegionList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "VTTRegionList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "VTTRegionList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "VTTRegionList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkValidityState {
  static final instance = new BlinkValidityState();

  static badInput_Getter(mthis) native "ValidityState_badInput_Getter";
  badInput_Getter_(mthis) => badInput_Getter(mthis);

  static customError_Getter(mthis) native "ValidityState_customError_Getter";
  customError_Getter_(mthis) => customError_Getter(mthis);

  static patternMismatch_Getter(mthis) native "ValidityState_patternMismatch_Getter";
  patternMismatch_Getter_(mthis) => patternMismatch_Getter(mthis);

  static rangeOverflow_Getter(mthis) native "ValidityState_rangeOverflow_Getter";
  rangeOverflow_Getter_(mthis) => rangeOverflow_Getter(mthis);

  static rangeUnderflow_Getter(mthis) native "ValidityState_rangeUnderflow_Getter";
  rangeUnderflow_Getter_(mthis) => rangeUnderflow_Getter(mthis);

  static stepMismatch_Getter(mthis) native "ValidityState_stepMismatch_Getter";
  stepMismatch_Getter_(mthis) => stepMismatch_Getter(mthis);

  static tooLong_Getter(mthis) native "ValidityState_tooLong_Getter";
  tooLong_Getter_(mthis) => tooLong_Getter(mthis);

  static typeMismatch_Getter(mthis) native "ValidityState_typeMismatch_Getter";
  typeMismatch_Getter_(mthis) => typeMismatch_Getter(mthis);

  static valid_Getter(mthis) native "ValidityState_valid_Getter";
  valid_Getter_(mthis) => valid_Getter(mthis);

  static valueMissing_Getter(mthis) native "ValidityState_valueMissing_Getter";
  valueMissing_Getter_(mthis) => valueMissing_Getter(mthis);

}

class BlinkVideoPlaybackQuality {
  static final instance = new BlinkVideoPlaybackQuality();

  static corruptedVideoFrames_Getter(mthis) native "VideoPlaybackQuality_corruptedVideoFrames_Getter";
  corruptedVideoFrames_Getter_(mthis) => corruptedVideoFrames_Getter(mthis);

  static creationTime_Getter(mthis) native "VideoPlaybackQuality_creationTime_Getter";
  creationTime_Getter_(mthis) => creationTime_Getter(mthis);

  static droppedVideoFrames_Getter(mthis) native "VideoPlaybackQuality_droppedVideoFrames_Getter";
  droppedVideoFrames_Getter_(mthis) => droppedVideoFrames_Getter(mthis);

  static totalVideoFrames_Getter(mthis) native "VideoPlaybackQuality_totalVideoFrames_Getter";
  totalVideoFrames_Getter_(mthis) => totalVideoFrames_Getter(mthis);

}

class BlinkVideoTrack {
  static final instance = new BlinkVideoTrack();

  static id_Getter(mthis) native "VideoTrack_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static kind_Getter(mthis) native "VideoTrack_kind_Getter";
  kind_Getter_(mthis) => kind_Getter(mthis);

  static label_Getter(mthis) native "VideoTrack_label_Getter";
  label_Getter_(mthis) => label_Getter(mthis);

  static language_Getter(mthis) native "VideoTrack_language_Getter";
  language_Getter_(mthis) => language_Getter(mthis);

  static selected_Getter(mthis) native "VideoTrack_selected_Getter";
  selected_Getter_(mthis) => selected_Getter(mthis);

  static selected_Setter(mthis, __arg_0) native "VideoTrack_selected_Setter";
  selected_Setter_(mthis, __arg_0) => selected_Setter(mthis, __arg_0);

}

class BlinkVideoTrackList extends BlinkEventTarget {
  static final instance = new BlinkVideoTrackList();

  static $__getter___Callback_1(mthis, __arg_0) native "VideoTrackList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static getTrackById_Callback_0(mthis) native "VideoTrackList_getTrackById_Callback";
  getTrackById_Callback_0_(mthis) => getTrackById_Callback_0(mthis);

  static getTrackById_Callback_1(mthis, __arg_0) native "VideoTrackList_getTrackById_Callback";
  getTrackById_Callback_1_(mthis, __arg_0) => getTrackById_Callback_1(mthis, __arg_0);

  static getTrackById_Callback_2(mthis, __arg_0, __arg_1) native "VideoTrackList_getTrackById_Callback";
  getTrackById_Callback_2_(mthis, __arg_0, __arg_1) => getTrackById_Callback_2(mthis, __arg_0, __arg_1);

  static getTrackById_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "VideoTrackList_getTrackById_Callback";
  getTrackById_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getTrackById_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "VideoTrackList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static onaddtrack_Getter(mthis) native "VideoTrackList_onaddtrack_Getter";
  onaddtrack_Getter_(mthis) => onaddtrack_Getter(mthis);

  static onaddtrack_Setter(mthis, __arg_0) native "VideoTrackList_onaddtrack_Setter";
  onaddtrack_Setter_(mthis, __arg_0) => onaddtrack_Setter(mthis, __arg_0);

  static onchange_Getter(mthis) native "VideoTrackList_onchange_Getter";
  onchange_Getter_(mthis) => onchange_Getter(mthis);

  static onchange_Setter(mthis, __arg_0) native "VideoTrackList_onchange_Setter";
  onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);

  static onremovetrack_Getter(mthis) native "VideoTrackList_onremovetrack_Getter";
  onremovetrack_Getter_(mthis) => onremovetrack_Getter(mthis);

  static onremovetrack_Setter(mthis, __arg_0) native "VideoTrackList_onremovetrack_Setter";
  onremovetrack_Setter_(mthis, __arg_0) => onremovetrack_Setter(mthis, __arg_0);

  static selectedIndex_Getter(mthis) native "VideoTrackList_selectedIndex_Getter";
  selectedIndex_Getter_(mthis) => selectedIndex_Getter(mthis);

}

class BlinkWaveShaperNode extends BlinkAudioNode {
  static final instance = new BlinkWaveShaperNode();

  static curve_Getter(mthis) native "WaveShaperNode_curve_Getter";
  curve_Getter_(mthis) => curve_Getter(mthis);

  static curve_Setter(mthis, __arg_0) native "WaveShaperNode_curve_Setter";
  curve_Setter_(mthis, __arg_0) => curve_Setter(mthis, __arg_0);

  static oversample_Getter(mthis) native "WaveShaperNode_oversample_Getter";
  oversample_Getter_(mthis) => oversample_Getter(mthis);

  static oversample_Setter(mthis, __arg_0) native "WaveShaperNode_oversample_Setter";
  oversample_Setter_(mthis, __arg_0) => oversample_Setter(mthis, __arg_0);

}

class BlinkWebGLActiveInfo {
  static final instance = new BlinkWebGLActiveInfo();

  static name_Getter(mthis) native "WebGLActiveInfo_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static size_Getter(mthis) native "WebGLActiveInfo_size_Getter";
  size_Getter_(mthis) => size_Getter(mthis);

  static type_Getter(mthis) native "WebGLActiveInfo_type_Getter";
  type_Getter_(mthis) => type_Getter(mthis);

}

class BlinkWebGLBuffer {
  static final instance = new BlinkWebGLBuffer();

}

class BlinkWebGLCompressedTextureATC {
  static final instance = new BlinkWebGLCompressedTextureATC();

}

class BlinkWebGLCompressedTextureETC1 {
  static final instance = new BlinkWebGLCompressedTextureETC1();

}

class BlinkWebGLCompressedTexturePVRTC {
  static final instance = new BlinkWebGLCompressedTexturePVRTC();

}

class BlinkWebGLCompressedTextureS3TC {
  static final instance = new BlinkWebGLCompressedTextureS3TC();

}

class BlinkWebGLContextAttributes {
  static final instance = new BlinkWebGLContextAttributes();

  static alpha_Getter(mthis) native "WebGLContextAttributes_alpha_Getter";
  alpha_Getter_(mthis) => alpha_Getter(mthis);

  static alpha_Setter(mthis, __arg_0) native "WebGLContextAttributes_alpha_Setter";
  alpha_Setter_(mthis, __arg_0) => alpha_Setter(mthis, __arg_0);

  static antialias_Getter(mthis) native "WebGLContextAttributes_antialias_Getter";
  antialias_Getter_(mthis) => antialias_Getter(mthis);

  static antialias_Setter(mthis, __arg_0) native "WebGLContextAttributes_antialias_Setter";
  antialias_Setter_(mthis, __arg_0) => antialias_Setter(mthis, __arg_0);

  static depth_Getter(mthis) native "WebGLContextAttributes_depth_Getter";
  depth_Getter_(mthis) => depth_Getter(mthis);

  static depth_Setter(mthis, __arg_0) native "WebGLContextAttributes_depth_Setter";
  depth_Setter_(mthis, __arg_0) => depth_Setter(mthis, __arg_0);

  static failIfMajorPerformanceCaveat_Getter(mthis) native "WebGLContextAttributes_failIfMajorPerformanceCaveat_Getter";
  failIfMajorPerformanceCaveat_Getter_(mthis) => failIfMajorPerformanceCaveat_Getter(mthis);

  static failIfMajorPerformanceCaveat_Setter(mthis, __arg_0) native "WebGLContextAttributes_failIfMajorPerformanceCaveat_Setter";
  failIfMajorPerformanceCaveat_Setter_(mthis, __arg_0) => failIfMajorPerformanceCaveat_Setter(mthis, __arg_0);

  static premultipliedAlpha_Getter(mthis) native "WebGLContextAttributes_premultipliedAlpha_Getter";
  premultipliedAlpha_Getter_(mthis) => premultipliedAlpha_Getter(mthis);

  static premultipliedAlpha_Setter(mthis, __arg_0) native "WebGLContextAttributes_premultipliedAlpha_Setter";
  premultipliedAlpha_Setter_(mthis, __arg_0) => premultipliedAlpha_Setter(mthis, __arg_0);

  static preserveDrawingBuffer_Getter(mthis) native "WebGLContextAttributes_preserveDrawingBuffer_Getter";
  preserveDrawingBuffer_Getter_(mthis) => preserveDrawingBuffer_Getter(mthis);

  static preserveDrawingBuffer_Setter(mthis, __arg_0) native "WebGLContextAttributes_preserveDrawingBuffer_Setter";
  preserveDrawingBuffer_Setter_(mthis, __arg_0) => preserveDrawingBuffer_Setter(mthis, __arg_0);

  static stencil_Getter(mthis) native "WebGLContextAttributes_stencil_Getter";
  stencil_Getter_(mthis) => stencil_Getter(mthis);

  static stencil_Setter(mthis, __arg_0) native "WebGLContextAttributes_stencil_Setter";
  stencil_Setter_(mthis, __arg_0) => stencil_Setter(mthis, __arg_0);

}

class BlinkWebGLContextEvent extends BlinkEvent {
  static final instance = new BlinkWebGLContextEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "WebGLContextEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static statusMessage_Getter(mthis) native "WebGLContextEvent_statusMessage_Getter";
  statusMessage_Getter_(mthis) => statusMessage_Getter(mthis);

}

class BlinkWebGLDebugRendererInfo {
  static final instance = new BlinkWebGLDebugRendererInfo();

}

class BlinkWebGLDebugShaders {
  static final instance = new BlinkWebGLDebugShaders();

  static getTranslatedShaderSource_Callback_0(mthis) native "WebGLDebugShaders_getTranslatedShaderSource_Callback";
  getTranslatedShaderSource_Callback_0_(mthis) => getTranslatedShaderSource_Callback_0(mthis);

  static getTranslatedShaderSource_Callback_1(mthis, __arg_0) native "WebGLDebugShaders_getTranslatedShaderSource_Callback";
  getTranslatedShaderSource_Callback_1_(mthis, __arg_0) => getTranslatedShaderSource_Callback_1(mthis, __arg_0);

  static getTranslatedShaderSource_Callback_2(mthis, __arg_0, __arg_1) native "WebGLDebugShaders_getTranslatedShaderSource_Callback";
  getTranslatedShaderSource_Callback_2_(mthis, __arg_0, __arg_1) => getTranslatedShaderSource_Callback_2(mthis, __arg_0, __arg_1);

  static getTranslatedShaderSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLDebugShaders_getTranslatedShaderSource_Callback";
  getTranslatedShaderSource_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getTranslatedShaderSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkWebGLDepthTexture {
  static final instance = new BlinkWebGLDepthTexture();

}

class BlinkWebGLDrawBuffers {
  static final instance = new BlinkWebGLDrawBuffers();

  static drawBuffersWEBGL_Callback_0(mthis) native "WebGLDrawBuffers_drawBuffersWEBGL_Callback";
  drawBuffersWEBGL_Callback_0_(mthis) => drawBuffersWEBGL_Callback_0(mthis);

  static drawBuffersWEBGL_Callback_1(mthis, __arg_0) native "WebGLDrawBuffers_drawBuffersWEBGL_Callback";
  drawBuffersWEBGL_Callback_1_(mthis, __arg_0) => drawBuffersWEBGL_Callback_1(mthis, __arg_0);

  static drawBuffersWEBGL_Callback_2(mthis, __arg_0, __arg_1) native "WebGLDrawBuffers_drawBuffersWEBGL_Callback";
  drawBuffersWEBGL_Callback_2_(mthis, __arg_0, __arg_1) => drawBuffersWEBGL_Callback_2(mthis, __arg_0, __arg_1);

  static drawBuffersWEBGL_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLDrawBuffers_drawBuffersWEBGL_Callback";
  drawBuffersWEBGL_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => drawBuffersWEBGL_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkWebGLFramebuffer {
  static final instance = new BlinkWebGLFramebuffer();

}

class BlinkWebGLLoseContext {
  static final instance = new BlinkWebGLLoseContext();

  static loseContext_Callback_0(mthis) native "WebGLLoseContext_loseContext_Callback";
  loseContext_Callback_0_(mthis) => loseContext_Callback_0(mthis);

  static loseContext_Callback_1(mthis, __arg_0) native "WebGLLoseContext_loseContext_Callback";
  loseContext_Callback_1_(mthis, __arg_0) => loseContext_Callback_1(mthis, __arg_0);

  static loseContext_Callback_2(mthis, __arg_0, __arg_1) native "WebGLLoseContext_loseContext_Callback";
  loseContext_Callback_2_(mthis, __arg_0, __arg_1) => loseContext_Callback_2(mthis, __arg_0, __arg_1);

  static restoreContext_Callback_0(mthis) native "WebGLLoseContext_restoreContext_Callback";
  restoreContext_Callback_0_(mthis) => restoreContext_Callback_0(mthis);

  static restoreContext_Callback_1(mthis, __arg_0) native "WebGLLoseContext_restoreContext_Callback";
  restoreContext_Callback_1_(mthis, __arg_0) => restoreContext_Callback_1(mthis, __arg_0);

  static restoreContext_Callback_2(mthis, __arg_0, __arg_1) native "WebGLLoseContext_restoreContext_Callback";
  restoreContext_Callback_2_(mthis, __arg_0, __arg_1) => restoreContext_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkWebGLProgram {
  static final instance = new BlinkWebGLProgram();

}

class BlinkWebGLRenderbuffer {
  static final instance = new BlinkWebGLRenderbuffer();

}

class BlinkWebGLRenderingContext {
  static final instance = new BlinkWebGLRenderingContext();

  static activeTexture_Callback_0(mthis) native "WebGLRenderingContext_activeTexture_Callback";
  activeTexture_Callback_0_(mthis) => activeTexture_Callback_0(mthis);

  static activeTexture_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_activeTexture_Callback";
  activeTexture_Callback_1_(mthis, __arg_0) => activeTexture_Callback_1(mthis, __arg_0);

  static activeTexture_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_activeTexture_Callback";
  activeTexture_Callback_2_(mthis, __arg_0, __arg_1) => activeTexture_Callback_2(mthis, __arg_0, __arg_1);

  static activeTexture_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_activeTexture_Callback";
  activeTexture_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => activeTexture_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static attachShader_Callback_0(mthis) native "WebGLRenderingContext_attachShader_Callback";
  attachShader_Callback_0_(mthis) => attachShader_Callback_0(mthis);

  static attachShader_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_attachShader_Callback";
  attachShader_Callback_1_(mthis, __arg_0) => attachShader_Callback_1(mthis, __arg_0);

  static attachShader_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_attachShader_Callback";
  attachShader_Callback_2_(mthis, __arg_0, __arg_1) => attachShader_Callback_2(mthis, __arg_0, __arg_1);

  static attachShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_attachShader_Callback";
  attachShader_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => attachShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static attachShader_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_attachShader_Callback";
  attachShader_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => attachShader_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bindAttribLocation_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_bindAttribLocation_Callback";
  bindAttribLocation_Callback_1_(mthis, __arg_0) => bindAttribLocation_Callback_1(mthis, __arg_0);

  static bindAttribLocation_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_bindAttribLocation_Callback";
  bindAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => bindAttribLocation_Callback_2(mthis, __arg_0, __arg_1);

  static bindAttribLocation_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_bindAttribLocation_Callback";
  bindAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => bindAttribLocation_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static bindAttribLocation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_bindAttribLocation_Callback";
  bindAttribLocation_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => bindAttribLocation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bindAttribLocation_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_bindAttribLocation_Callback";
  bindAttribLocation_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => bindAttribLocation_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static bindBuffer_Callback_0(mthis) native "WebGLRenderingContext_bindBuffer_Callback";
  bindBuffer_Callback_0_(mthis) => bindBuffer_Callback_0(mthis);

  static bindBuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_bindBuffer_Callback";
  bindBuffer_Callback_1_(mthis, __arg_0) => bindBuffer_Callback_1(mthis, __arg_0);

  static bindBuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_bindBuffer_Callback";
  bindBuffer_Callback_2_(mthis, __arg_0, __arg_1) => bindBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static bindBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_bindBuffer_Callback";
  bindBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => bindBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static bindBuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_bindBuffer_Callback";
  bindBuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => bindBuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bindFramebuffer_Callback_0(mthis) native "WebGLRenderingContext_bindFramebuffer_Callback";
  bindFramebuffer_Callback_0_(mthis) => bindFramebuffer_Callback_0(mthis);

  static bindFramebuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_bindFramebuffer_Callback";
  bindFramebuffer_Callback_1_(mthis, __arg_0) => bindFramebuffer_Callback_1(mthis, __arg_0);

  static bindFramebuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_bindFramebuffer_Callback";
  bindFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => bindFramebuffer_Callback_2(mthis, __arg_0, __arg_1);

  static bindFramebuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_bindFramebuffer_Callback";
  bindFramebuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => bindFramebuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static bindFramebuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_bindFramebuffer_Callback";
  bindFramebuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => bindFramebuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bindRenderbuffer_Callback_0(mthis) native "WebGLRenderingContext_bindRenderbuffer_Callback";
  bindRenderbuffer_Callback_0_(mthis) => bindRenderbuffer_Callback_0(mthis);

  static bindRenderbuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_bindRenderbuffer_Callback";
  bindRenderbuffer_Callback_1_(mthis, __arg_0) => bindRenderbuffer_Callback_1(mthis, __arg_0);

  static bindRenderbuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_bindRenderbuffer_Callback";
  bindRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => bindRenderbuffer_Callback_2(mthis, __arg_0, __arg_1);

  static bindRenderbuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_bindRenderbuffer_Callback";
  bindRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => bindRenderbuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static bindRenderbuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_bindRenderbuffer_Callback";
  bindRenderbuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => bindRenderbuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bindTexture_Callback_0(mthis) native "WebGLRenderingContext_bindTexture_Callback";
  bindTexture_Callback_0_(mthis) => bindTexture_Callback_0(mthis);

  static bindTexture_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_bindTexture_Callback";
  bindTexture_Callback_1_(mthis, __arg_0) => bindTexture_Callback_1(mthis, __arg_0);

  static bindTexture_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_bindTexture_Callback";
  bindTexture_Callback_2_(mthis, __arg_0, __arg_1) => bindTexture_Callback_2(mthis, __arg_0, __arg_1);

  static bindTexture_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_bindTexture_Callback";
  bindTexture_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => bindTexture_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static bindTexture_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_bindTexture_Callback";
  bindTexture_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => bindTexture_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static blendColor_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_blendColor_Callback";
  blendColor_Callback_2_(mthis, __arg_0, __arg_1) => blendColor_Callback_2(mthis, __arg_0, __arg_1);

  static blendColor_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_blendColor_Callback";
  blendColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => blendColor_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static blendColor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_blendColor_Callback";
  blendColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => blendColor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static blendColor_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_blendColor_Callback";
  blendColor_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => blendColor_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static blendColor_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_blendColor_Callback";
  blendColor_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => blendColor_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static blendEquationSeparate_Callback_0(mthis) native "WebGLRenderingContext_blendEquationSeparate_Callback";
  blendEquationSeparate_Callback_0_(mthis) => blendEquationSeparate_Callback_0(mthis);

  static blendEquationSeparate_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_blendEquationSeparate_Callback";
  blendEquationSeparate_Callback_1_(mthis, __arg_0) => blendEquationSeparate_Callback_1(mthis, __arg_0);

  static blendEquationSeparate_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_blendEquationSeparate_Callback";
  blendEquationSeparate_Callback_2_(mthis, __arg_0, __arg_1) => blendEquationSeparate_Callback_2(mthis, __arg_0, __arg_1);

  static blendEquationSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_blendEquationSeparate_Callback";
  blendEquationSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => blendEquationSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static blendEquationSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_blendEquationSeparate_Callback";
  blendEquationSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => blendEquationSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static blendEquation_Callback_0(mthis) native "WebGLRenderingContext_blendEquation_Callback";
  blendEquation_Callback_0_(mthis) => blendEquation_Callback_0(mthis);

  static blendEquation_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_blendEquation_Callback";
  blendEquation_Callback_1_(mthis, __arg_0) => blendEquation_Callback_1(mthis, __arg_0);

  static blendEquation_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_blendEquation_Callback";
  blendEquation_Callback_2_(mthis, __arg_0, __arg_1) => blendEquation_Callback_2(mthis, __arg_0, __arg_1);

  static blendEquation_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_blendEquation_Callback";
  blendEquation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => blendEquation_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static blendFuncSeparate_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_blendFuncSeparate_Callback";
  blendFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => blendFuncSeparate_Callback_2(mthis, __arg_0, __arg_1);

  static blendFuncSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_blendFuncSeparate_Callback";
  blendFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => blendFuncSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static blendFuncSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_blendFuncSeparate_Callback";
  blendFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => blendFuncSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static blendFuncSeparate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_blendFuncSeparate_Callback";
  blendFuncSeparate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => blendFuncSeparate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static blendFuncSeparate_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_blendFuncSeparate_Callback";
  blendFuncSeparate_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => blendFuncSeparate_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static blendFunc_Callback_0(mthis) native "WebGLRenderingContext_blendFunc_Callback";
  blendFunc_Callback_0_(mthis) => blendFunc_Callback_0(mthis);

  static blendFunc_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_blendFunc_Callback";
  blendFunc_Callback_1_(mthis, __arg_0) => blendFunc_Callback_1(mthis, __arg_0);

  static blendFunc_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_blendFunc_Callback";
  blendFunc_Callback_2_(mthis, __arg_0, __arg_1) => blendFunc_Callback_2(mthis, __arg_0, __arg_1);

  static blendFunc_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_blendFunc_Callback";
  blendFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => blendFunc_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static blendFunc_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_blendFunc_Callback";
  blendFunc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => blendFunc_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bufferData_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_bufferData_Callback";
  bufferData_Callback_1_(mthis, __arg_0) => bufferData_Callback_1(mthis, __arg_0);

  static bufferData_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_bufferData_Callback";
  bufferData_Callback_2_(mthis, __arg_0, __arg_1) => bufferData_Callback_2(mthis, __arg_0, __arg_1);

  static bufferData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_bufferData_Callback";
  bufferData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => bufferData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static bufferData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_bufferData_Callback";
  bufferData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => bufferData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bufferData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_bufferData_Callback";
  bufferData_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => bufferData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static bufferSubData_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_bufferSubData_Callback";
  bufferSubData_Callback_1_(mthis, __arg_0) => bufferSubData_Callback_1(mthis, __arg_0);

  static bufferSubData_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_bufferSubData_Callback";
  bufferSubData_Callback_2_(mthis, __arg_0, __arg_1) => bufferSubData_Callback_2(mthis, __arg_0, __arg_1);

  static bufferSubData_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_bufferSubData_Callback";
  bufferSubData_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => bufferSubData_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static bufferSubData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_bufferSubData_Callback";
  bufferSubData_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => bufferSubData_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static bufferSubData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_bufferSubData_Callback";
  bufferSubData_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => bufferSubData_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static canvas_Getter(mthis) native "WebGLRenderingContext_canvas_Getter";
  canvas_Getter_(mthis) => canvas_Getter(mthis);

  static checkFramebufferStatus_Callback_0(mthis) native "WebGLRenderingContext_checkFramebufferStatus_Callback";
  checkFramebufferStatus_Callback_0_(mthis) => checkFramebufferStatus_Callback_0(mthis);

  static checkFramebufferStatus_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_checkFramebufferStatus_Callback";
  checkFramebufferStatus_Callback_1_(mthis, __arg_0) => checkFramebufferStatus_Callback_1(mthis, __arg_0);

  static checkFramebufferStatus_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_checkFramebufferStatus_Callback";
  checkFramebufferStatus_Callback_2_(mthis, __arg_0, __arg_1) => checkFramebufferStatus_Callback_2(mthis, __arg_0, __arg_1);

  static checkFramebufferStatus_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_checkFramebufferStatus_Callback";
  checkFramebufferStatus_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => checkFramebufferStatus_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clearColor_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_clearColor_Callback";
  clearColor_Callback_2_(mthis, __arg_0, __arg_1) => clearColor_Callback_2(mthis, __arg_0, __arg_1);

  static clearColor_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_clearColor_Callback";
  clearColor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearColor_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clearColor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_clearColor_Callback";
  clearColor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => clearColor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static clearColor_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_clearColor_Callback";
  clearColor_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => clearColor_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static clearColor_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_clearColor_Callback";
  clearColor_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => clearColor_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static clearDepth_Callback_0(mthis) native "WebGLRenderingContext_clearDepth_Callback";
  clearDepth_Callback_0_(mthis) => clearDepth_Callback_0(mthis);

  static clearDepth_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_clearDepth_Callback";
  clearDepth_Callback_1_(mthis, __arg_0) => clearDepth_Callback_1(mthis, __arg_0);

  static clearDepth_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_clearDepth_Callback";
  clearDepth_Callback_2_(mthis, __arg_0, __arg_1) => clearDepth_Callback_2(mthis, __arg_0, __arg_1);

  static clearDepth_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_clearDepth_Callback";
  clearDepth_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearDepth_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clearStencil_Callback_0(mthis) native "WebGLRenderingContext_clearStencil_Callback";
  clearStencil_Callback_0_(mthis) => clearStencil_Callback_0(mthis);

  static clearStencil_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_clearStencil_Callback";
  clearStencil_Callback_1_(mthis, __arg_0) => clearStencil_Callback_1(mthis, __arg_0);

  static clearStencil_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_clearStencil_Callback";
  clearStencil_Callback_2_(mthis, __arg_0, __arg_1) => clearStencil_Callback_2(mthis, __arg_0, __arg_1);

  static clearStencil_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_clearStencil_Callback";
  clearStencil_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearStencil_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clear_Callback_0(mthis) native "WebGLRenderingContext_clear_Callback";
  clear_Callback_0_(mthis) => clear_Callback_0(mthis);

  static clear_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_clear_Callback";
  clear_Callback_1_(mthis, __arg_0) => clear_Callback_1(mthis, __arg_0);

  static clear_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_clear_Callback";
  clear_Callback_2_(mthis, __arg_0, __arg_1) => clear_Callback_2(mthis, __arg_0, __arg_1);

  static clear_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_clear_Callback";
  clear_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clear_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static colorMask_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_colorMask_Callback";
  colorMask_Callback_2_(mthis, __arg_0, __arg_1) => colorMask_Callback_2(mthis, __arg_0, __arg_1);

  static colorMask_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_colorMask_Callback";
  colorMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => colorMask_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static colorMask_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_colorMask_Callback";
  colorMask_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => colorMask_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static colorMask_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_colorMask_Callback";
  colorMask_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => colorMask_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static colorMask_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_colorMask_Callback";
  colorMask_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => colorMask_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static compileShader_Callback_0(mthis) native "WebGLRenderingContext_compileShader_Callback";
  compileShader_Callback_0_(mthis) => compileShader_Callback_0(mthis);

  static compileShader_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_compileShader_Callback";
  compileShader_Callback_1_(mthis, __arg_0) => compileShader_Callback_1(mthis, __arg_0);

  static compileShader_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_compileShader_Callback";
  compileShader_Callback_2_(mthis, __arg_0, __arg_1) => compileShader_Callback_2(mthis, __arg_0, __arg_1);

  static compileShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_compileShader_Callback";
  compileShader_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => compileShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static compressedTexImage2D_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_compressedTexImage2D_Callback";
  compressedTexImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => compressedTexImage2D_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static compressedTexImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_compressedTexImage2D_Callback";
  compressedTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => compressedTexImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static compressedTexImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_compressedTexImage2D_Callback";
  compressedTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => compressedTexImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static compressedTexImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "WebGLRenderingContext_compressedTexImage2D_Callback";
  compressedTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => compressedTexImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static compressedTexImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "WebGLRenderingContext_compressedTexImage2D_Callback";
  compressedTexImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => compressedTexImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static compressedTexSubImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "WebGLRenderingContext_compressedTexSubImage2D_Callback";
  compressedTexSubImage2D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => compressedTexSubImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static compressedTexSubImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_compressedTexSubImage2D_Callback";
  compressedTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => compressedTexSubImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static compressedTexSubImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_compressedTexSubImage2D_Callback";
  compressedTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => compressedTexSubImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static compressedTexSubImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "WebGLRenderingContext_compressedTexSubImage2D_Callback";
  compressedTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => compressedTexSubImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static compressedTexSubImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "WebGLRenderingContext_compressedTexSubImage2D_Callback";
  compressedTexSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => compressedTexSubImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static copyTexImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "WebGLRenderingContext_copyTexImage2D_Callback";
  copyTexImage2D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => copyTexImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static copyTexImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_copyTexImage2D_Callback";
  copyTexImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => copyTexImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static copyTexImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_copyTexImage2D_Callback";
  copyTexImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => copyTexImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static copyTexImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "WebGLRenderingContext_copyTexImage2D_Callback";
  copyTexImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => copyTexImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static copyTexImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "WebGLRenderingContext_copyTexImage2D_Callback";
  copyTexImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => copyTexImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static copyTexSubImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "WebGLRenderingContext_copyTexSubImage2D_Callback";
  copyTexSubImage2D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => copyTexSubImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static copyTexSubImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_copyTexSubImage2D_Callback";
  copyTexSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => copyTexSubImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static copyTexSubImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_copyTexSubImage2D_Callback";
  copyTexSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => copyTexSubImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static copyTexSubImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "WebGLRenderingContext_copyTexSubImage2D_Callback";
  copyTexSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => copyTexSubImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static copyTexSubImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "WebGLRenderingContext_copyTexSubImage2D_Callback";
  copyTexSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => copyTexSubImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static createBuffer_Callback_0(mthis) native "WebGLRenderingContext_createBuffer_Callback";
  createBuffer_Callback_0_(mthis) => createBuffer_Callback_0(mthis);

  static createBuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_createBuffer_Callback";
  createBuffer_Callback_1_(mthis, __arg_0) => createBuffer_Callback_1(mthis, __arg_0);

  static createBuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_createBuffer_Callback";
  createBuffer_Callback_2_(mthis, __arg_0, __arg_1) => createBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static createFramebuffer_Callback_0(mthis) native "WebGLRenderingContext_createFramebuffer_Callback";
  createFramebuffer_Callback_0_(mthis) => createFramebuffer_Callback_0(mthis);

  static createFramebuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_createFramebuffer_Callback";
  createFramebuffer_Callback_1_(mthis, __arg_0) => createFramebuffer_Callback_1(mthis, __arg_0);

  static createFramebuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_createFramebuffer_Callback";
  createFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => createFramebuffer_Callback_2(mthis, __arg_0, __arg_1);

  static createProgram_Callback_0(mthis) native "WebGLRenderingContext_createProgram_Callback";
  createProgram_Callback_0_(mthis) => createProgram_Callback_0(mthis);

  static createProgram_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_createProgram_Callback";
  createProgram_Callback_1_(mthis, __arg_0) => createProgram_Callback_1(mthis, __arg_0);

  static createProgram_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_createProgram_Callback";
  createProgram_Callback_2_(mthis, __arg_0, __arg_1) => createProgram_Callback_2(mthis, __arg_0, __arg_1);

  static createRenderbuffer_Callback_0(mthis) native "WebGLRenderingContext_createRenderbuffer_Callback";
  createRenderbuffer_Callback_0_(mthis) => createRenderbuffer_Callback_0(mthis);

  static createRenderbuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_createRenderbuffer_Callback";
  createRenderbuffer_Callback_1_(mthis, __arg_0) => createRenderbuffer_Callback_1(mthis, __arg_0);

  static createRenderbuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_createRenderbuffer_Callback";
  createRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => createRenderbuffer_Callback_2(mthis, __arg_0, __arg_1);

  static createShader_Callback_0(mthis) native "WebGLRenderingContext_createShader_Callback";
  createShader_Callback_0_(mthis) => createShader_Callback_0(mthis);

  static createShader_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_createShader_Callback";
  createShader_Callback_1_(mthis, __arg_0) => createShader_Callback_1(mthis, __arg_0);

  static createShader_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_createShader_Callback";
  createShader_Callback_2_(mthis, __arg_0, __arg_1) => createShader_Callback_2(mthis, __arg_0, __arg_1);

  static createShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_createShader_Callback";
  createShader_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createTexture_Callback_0(mthis) native "WebGLRenderingContext_createTexture_Callback";
  createTexture_Callback_0_(mthis) => createTexture_Callback_0(mthis);

  static createTexture_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_createTexture_Callback";
  createTexture_Callback_1_(mthis, __arg_0) => createTexture_Callback_1(mthis, __arg_0);

  static createTexture_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_createTexture_Callback";
  createTexture_Callback_2_(mthis, __arg_0, __arg_1) => createTexture_Callback_2(mthis, __arg_0, __arg_1);

  static cullFace_Callback_0(mthis) native "WebGLRenderingContext_cullFace_Callback";
  cullFace_Callback_0_(mthis) => cullFace_Callback_0(mthis);

  static cullFace_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_cullFace_Callback";
  cullFace_Callback_1_(mthis, __arg_0) => cullFace_Callback_1(mthis, __arg_0);

  static cullFace_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_cullFace_Callback";
  cullFace_Callback_2_(mthis, __arg_0, __arg_1) => cullFace_Callback_2(mthis, __arg_0, __arg_1);

  static cullFace_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_cullFace_Callback";
  cullFace_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => cullFace_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteBuffer_Callback_0(mthis) native "WebGLRenderingContext_deleteBuffer_Callback";
  deleteBuffer_Callback_0_(mthis) => deleteBuffer_Callback_0(mthis);

  static deleteBuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_deleteBuffer_Callback";
  deleteBuffer_Callback_1_(mthis, __arg_0) => deleteBuffer_Callback_1(mthis, __arg_0);

  static deleteBuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_deleteBuffer_Callback";
  deleteBuffer_Callback_2_(mthis, __arg_0, __arg_1) => deleteBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static deleteBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_deleteBuffer_Callback";
  deleteBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteFramebuffer_Callback_0(mthis) native "WebGLRenderingContext_deleteFramebuffer_Callback";
  deleteFramebuffer_Callback_0_(mthis) => deleteFramebuffer_Callback_0(mthis);

  static deleteFramebuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_deleteFramebuffer_Callback";
  deleteFramebuffer_Callback_1_(mthis, __arg_0) => deleteFramebuffer_Callback_1(mthis, __arg_0);

  static deleteFramebuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_deleteFramebuffer_Callback";
  deleteFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => deleteFramebuffer_Callback_2(mthis, __arg_0, __arg_1);

  static deleteFramebuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_deleteFramebuffer_Callback";
  deleteFramebuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteFramebuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteProgram_Callback_0(mthis) native "WebGLRenderingContext_deleteProgram_Callback";
  deleteProgram_Callback_0_(mthis) => deleteProgram_Callback_0(mthis);

  static deleteProgram_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_deleteProgram_Callback";
  deleteProgram_Callback_1_(mthis, __arg_0) => deleteProgram_Callback_1(mthis, __arg_0);

  static deleteProgram_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_deleteProgram_Callback";
  deleteProgram_Callback_2_(mthis, __arg_0, __arg_1) => deleteProgram_Callback_2(mthis, __arg_0, __arg_1);

  static deleteProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_deleteProgram_Callback";
  deleteProgram_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteRenderbuffer_Callback_0(mthis) native "WebGLRenderingContext_deleteRenderbuffer_Callback";
  deleteRenderbuffer_Callback_0_(mthis) => deleteRenderbuffer_Callback_0(mthis);

  static deleteRenderbuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_deleteRenderbuffer_Callback";
  deleteRenderbuffer_Callback_1_(mthis, __arg_0) => deleteRenderbuffer_Callback_1(mthis, __arg_0);

  static deleteRenderbuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_deleteRenderbuffer_Callback";
  deleteRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => deleteRenderbuffer_Callback_2(mthis, __arg_0, __arg_1);

  static deleteRenderbuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_deleteRenderbuffer_Callback";
  deleteRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteRenderbuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteShader_Callback_0(mthis) native "WebGLRenderingContext_deleteShader_Callback";
  deleteShader_Callback_0_(mthis) => deleteShader_Callback_0(mthis);

  static deleteShader_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_deleteShader_Callback";
  deleteShader_Callback_1_(mthis, __arg_0) => deleteShader_Callback_1(mthis, __arg_0);

  static deleteShader_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_deleteShader_Callback";
  deleteShader_Callback_2_(mthis, __arg_0, __arg_1) => deleteShader_Callback_2(mthis, __arg_0, __arg_1);

  static deleteShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_deleteShader_Callback";
  deleteShader_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static deleteTexture_Callback_0(mthis) native "WebGLRenderingContext_deleteTexture_Callback";
  deleteTexture_Callback_0_(mthis) => deleteTexture_Callback_0(mthis);

  static deleteTexture_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_deleteTexture_Callback";
  deleteTexture_Callback_1_(mthis, __arg_0) => deleteTexture_Callback_1(mthis, __arg_0);

  static deleteTexture_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_deleteTexture_Callback";
  deleteTexture_Callback_2_(mthis, __arg_0, __arg_1) => deleteTexture_Callback_2(mthis, __arg_0, __arg_1);

  static deleteTexture_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_deleteTexture_Callback";
  deleteTexture_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => deleteTexture_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static depthFunc_Callback_0(mthis) native "WebGLRenderingContext_depthFunc_Callback";
  depthFunc_Callback_0_(mthis) => depthFunc_Callback_0(mthis);

  static depthFunc_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_depthFunc_Callback";
  depthFunc_Callback_1_(mthis, __arg_0) => depthFunc_Callback_1(mthis, __arg_0);

  static depthFunc_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_depthFunc_Callback";
  depthFunc_Callback_2_(mthis, __arg_0, __arg_1) => depthFunc_Callback_2(mthis, __arg_0, __arg_1);

  static depthFunc_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_depthFunc_Callback";
  depthFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => depthFunc_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static depthMask_Callback_0(mthis) native "WebGLRenderingContext_depthMask_Callback";
  depthMask_Callback_0_(mthis) => depthMask_Callback_0(mthis);

  static depthMask_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_depthMask_Callback";
  depthMask_Callback_1_(mthis, __arg_0) => depthMask_Callback_1(mthis, __arg_0);

  static depthMask_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_depthMask_Callback";
  depthMask_Callback_2_(mthis, __arg_0, __arg_1) => depthMask_Callback_2(mthis, __arg_0, __arg_1);

  static depthMask_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_depthMask_Callback";
  depthMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => depthMask_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static depthRange_Callback_0(mthis) native "WebGLRenderingContext_depthRange_Callback";
  depthRange_Callback_0_(mthis) => depthRange_Callback_0(mthis);

  static depthRange_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_depthRange_Callback";
  depthRange_Callback_1_(mthis, __arg_0) => depthRange_Callback_1(mthis, __arg_0);

  static depthRange_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_depthRange_Callback";
  depthRange_Callback_2_(mthis, __arg_0, __arg_1) => depthRange_Callback_2(mthis, __arg_0, __arg_1);

  static depthRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_depthRange_Callback";
  depthRange_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => depthRange_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static depthRange_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_depthRange_Callback";
  depthRange_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => depthRange_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static detachShader_Callback_0(mthis) native "WebGLRenderingContext_detachShader_Callback";
  detachShader_Callback_0_(mthis) => detachShader_Callback_0(mthis);

  static detachShader_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_detachShader_Callback";
  detachShader_Callback_1_(mthis, __arg_0) => detachShader_Callback_1(mthis, __arg_0);

  static detachShader_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_detachShader_Callback";
  detachShader_Callback_2_(mthis, __arg_0, __arg_1) => detachShader_Callback_2(mthis, __arg_0, __arg_1);

  static detachShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_detachShader_Callback";
  detachShader_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => detachShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static detachShader_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_detachShader_Callback";
  detachShader_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => detachShader_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static disableVertexAttribArray_Callback_0(mthis) native "WebGLRenderingContext_disableVertexAttribArray_Callback";
  disableVertexAttribArray_Callback_0_(mthis) => disableVertexAttribArray_Callback_0(mthis);

  static disableVertexAttribArray_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_disableVertexAttribArray_Callback";
  disableVertexAttribArray_Callback_1_(mthis, __arg_0) => disableVertexAttribArray_Callback_1(mthis, __arg_0);

  static disableVertexAttribArray_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_disableVertexAttribArray_Callback";
  disableVertexAttribArray_Callback_2_(mthis, __arg_0, __arg_1) => disableVertexAttribArray_Callback_2(mthis, __arg_0, __arg_1);

  static disableVertexAttribArray_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_disableVertexAttribArray_Callback";
  disableVertexAttribArray_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => disableVertexAttribArray_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static disable_Callback_0(mthis) native "WebGLRenderingContext_disable_Callback";
  disable_Callback_0_(mthis) => disable_Callback_0(mthis);

  static disable_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_disable_Callback";
  disable_Callback_1_(mthis, __arg_0) => disable_Callback_1(mthis, __arg_0);

  static disable_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_disable_Callback";
  disable_Callback_2_(mthis, __arg_0, __arg_1) => disable_Callback_2(mthis, __arg_0, __arg_1);

  static disable_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_disable_Callback";
  disable_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => disable_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static drawArrays_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_drawArrays_Callback";
  drawArrays_Callback_1_(mthis, __arg_0) => drawArrays_Callback_1(mthis, __arg_0);

  static drawArrays_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_drawArrays_Callback";
  drawArrays_Callback_2_(mthis, __arg_0, __arg_1) => drawArrays_Callback_2(mthis, __arg_0, __arg_1);

  static drawArrays_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_drawArrays_Callback";
  drawArrays_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => drawArrays_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static drawArrays_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_drawArrays_Callback";
  drawArrays_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => drawArrays_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static drawArrays_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_drawArrays_Callback";
  drawArrays_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => drawArrays_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static drawElements_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_drawElements_Callback";
  drawElements_Callback_2_(mthis, __arg_0, __arg_1) => drawElements_Callback_2(mthis, __arg_0, __arg_1);

  static drawElements_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_drawElements_Callback";
  drawElements_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => drawElements_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static drawElements_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_drawElements_Callback";
  drawElements_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => drawElements_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static drawElements_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_drawElements_Callback";
  drawElements_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => drawElements_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static drawElements_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_drawElements_Callback";
  drawElements_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => drawElements_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static drawingBufferHeight_Getter(mthis) native "WebGLRenderingContext_drawingBufferHeight_Getter";
  drawingBufferHeight_Getter_(mthis) => drawingBufferHeight_Getter(mthis);

  static drawingBufferWidth_Getter(mthis) native "WebGLRenderingContext_drawingBufferWidth_Getter";
  drawingBufferWidth_Getter_(mthis) => drawingBufferWidth_Getter(mthis);

  static enableVertexAttribArray_Callback_0(mthis) native "WebGLRenderingContext_enableVertexAttribArray_Callback";
  enableVertexAttribArray_Callback_0_(mthis) => enableVertexAttribArray_Callback_0(mthis);

  static enableVertexAttribArray_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_enableVertexAttribArray_Callback";
  enableVertexAttribArray_Callback_1_(mthis, __arg_0) => enableVertexAttribArray_Callback_1(mthis, __arg_0);

  static enableVertexAttribArray_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_enableVertexAttribArray_Callback";
  enableVertexAttribArray_Callback_2_(mthis, __arg_0, __arg_1) => enableVertexAttribArray_Callback_2(mthis, __arg_0, __arg_1);

  static enableVertexAttribArray_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_enableVertexAttribArray_Callback";
  enableVertexAttribArray_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => enableVertexAttribArray_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static enable_Callback_0(mthis) native "WebGLRenderingContext_enable_Callback";
  enable_Callback_0_(mthis) => enable_Callback_0(mthis);

  static enable_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_enable_Callback";
  enable_Callback_1_(mthis, __arg_0) => enable_Callback_1(mthis, __arg_0);

  static enable_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_enable_Callback";
  enable_Callback_2_(mthis, __arg_0, __arg_1) => enable_Callback_2(mthis, __arg_0, __arg_1);

  static enable_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_enable_Callback";
  enable_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => enable_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static finish_Callback_0(mthis) native "WebGLRenderingContext_finish_Callback";
  finish_Callback_0_(mthis) => finish_Callback_0(mthis);

  static finish_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_finish_Callback";
  finish_Callback_1_(mthis, __arg_0) => finish_Callback_1(mthis, __arg_0);

  static finish_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_finish_Callback";
  finish_Callback_2_(mthis, __arg_0, __arg_1) => finish_Callback_2(mthis, __arg_0, __arg_1);

  static flush_Callback_0(mthis) native "WebGLRenderingContext_flush_Callback";
  flush_Callback_0_(mthis) => flush_Callback_0(mthis);

  static flush_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_flush_Callback";
  flush_Callback_1_(mthis, __arg_0) => flush_Callback_1(mthis, __arg_0);

  static flush_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_flush_Callback";
  flush_Callback_2_(mthis, __arg_0, __arg_1) => flush_Callback_2(mthis, __arg_0, __arg_1);

  static framebufferRenderbuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_framebufferRenderbuffer_Callback";
  framebufferRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => framebufferRenderbuffer_Callback_2(mthis, __arg_0, __arg_1);

  static framebufferRenderbuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_framebufferRenderbuffer_Callback";
  framebufferRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => framebufferRenderbuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static framebufferRenderbuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_framebufferRenderbuffer_Callback";
  framebufferRenderbuffer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => framebufferRenderbuffer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static framebufferRenderbuffer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_framebufferRenderbuffer_Callback";
  framebufferRenderbuffer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => framebufferRenderbuffer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static framebufferRenderbuffer_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_framebufferRenderbuffer_Callback";
  framebufferRenderbuffer_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => framebufferRenderbuffer_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static framebufferTexture2D_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_framebufferTexture2D_Callback";
  framebufferTexture2D_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => framebufferTexture2D_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static framebufferTexture2D_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_framebufferTexture2D_Callback";
  framebufferTexture2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => framebufferTexture2D_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static framebufferTexture2D_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_framebufferTexture2D_Callback";
  framebufferTexture2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => framebufferTexture2D_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static framebufferTexture2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_framebufferTexture2D_Callback";
  framebufferTexture2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => framebufferTexture2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static framebufferTexture2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_framebufferTexture2D_Callback";
  framebufferTexture2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => framebufferTexture2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static frontFace_Callback_0(mthis) native "WebGLRenderingContext_frontFace_Callback";
  frontFace_Callback_0_(mthis) => frontFace_Callback_0(mthis);

  static frontFace_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_frontFace_Callback";
  frontFace_Callback_1_(mthis, __arg_0) => frontFace_Callback_1(mthis, __arg_0);

  static frontFace_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_frontFace_Callback";
  frontFace_Callback_2_(mthis, __arg_0, __arg_1) => frontFace_Callback_2(mthis, __arg_0, __arg_1);

  static frontFace_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_frontFace_Callback";
  frontFace_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => frontFace_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static generateMipmap_Callback_0(mthis) native "WebGLRenderingContext_generateMipmap_Callback";
  generateMipmap_Callback_0_(mthis) => generateMipmap_Callback_0(mthis);

  static generateMipmap_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_generateMipmap_Callback";
  generateMipmap_Callback_1_(mthis, __arg_0) => generateMipmap_Callback_1(mthis, __arg_0);

  static generateMipmap_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_generateMipmap_Callback";
  generateMipmap_Callback_2_(mthis, __arg_0, __arg_1) => generateMipmap_Callback_2(mthis, __arg_0, __arg_1);

  static generateMipmap_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_generateMipmap_Callback";
  generateMipmap_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => generateMipmap_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getActiveAttrib_Callback_0(mthis) native "WebGLRenderingContext_getActiveAttrib_Callback";
  getActiveAttrib_Callback_0_(mthis) => getActiveAttrib_Callback_0(mthis);

  static getActiveAttrib_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getActiveAttrib_Callback";
  getActiveAttrib_Callback_1_(mthis, __arg_0) => getActiveAttrib_Callback_1(mthis, __arg_0);

  static getActiveAttrib_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getActiveAttrib_Callback";
  getActiveAttrib_Callback_2_(mthis, __arg_0, __arg_1) => getActiveAttrib_Callback_2(mthis, __arg_0, __arg_1);

  static getActiveAttrib_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getActiveAttrib_Callback";
  getActiveAttrib_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getActiveAttrib_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getActiveAttrib_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getActiveAttrib_Callback";
  getActiveAttrib_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getActiveAttrib_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getActiveUniform_Callback_0(mthis) native "WebGLRenderingContext_getActiveUniform_Callback";
  getActiveUniform_Callback_0_(mthis) => getActiveUniform_Callback_0(mthis);

  static getActiveUniform_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getActiveUniform_Callback";
  getActiveUniform_Callback_1_(mthis, __arg_0) => getActiveUniform_Callback_1(mthis, __arg_0);

  static getActiveUniform_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getActiveUniform_Callback";
  getActiveUniform_Callback_2_(mthis, __arg_0, __arg_1) => getActiveUniform_Callback_2(mthis, __arg_0, __arg_1);

  static getActiveUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getActiveUniform_Callback";
  getActiveUniform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getActiveUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getActiveUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getActiveUniform_Callback";
  getActiveUniform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getActiveUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getAttachedShaders_Callback_0(mthis) native "WebGLRenderingContext_getAttachedShaders_Callback";
  getAttachedShaders_Callback_0_(mthis) => getAttachedShaders_Callback_0(mthis);

  static getAttachedShaders_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getAttachedShaders_Callback";
  getAttachedShaders_Callback_1_(mthis, __arg_0) => getAttachedShaders_Callback_1(mthis, __arg_0);

  static getAttachedShaders_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getAttachedShaders_Callback";
  getAttachedShaders_Callback_2_(mthis, __arg_0, __arg_1) => getAttachedShaders_Callback_2(mthis, __arg_0, __arg_1);

  static getAttachedShaders_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getAttachedShaders_Callback";
  getAttachedShaders_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getAttachedShaders_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getAttribLocation_Callback_0(mthis) native "WebGLRenderingContext_getAttribLocation_Callback";
  getAttribLocation_Callback_0_(mthis) => getAttribLocation_Callback_0(mthis);

  static getAttribLocation_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getAttribLocation_Callback";
  getAttribLocation_Callback_1_(mthis, __arg_0) => getAttribLocation_Callback_1(mthis, __arg_0);

  static getAttribLocation_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getAttribLocation_Callback";
  getAttribLocation_Callback_2_(mthis, __arg_0, __arg_1) => getAttribLocation_Callback_2(mthis, __arg_0, __arg_1);

  static getAttribLocation_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getAttribLocation_Callback";
  getAttribLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getAttribLocation_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getAttribLocation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getAttribLocation_Callback";
  getAttribLocation_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getAttribLocation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getBufferParameter_Callback_0(mthis) native "WebGLRenderingContext_getBufferParameter_Callback";
  getBufferParameter_Callback_0_(mthis) => getBufferParameter_Callback_0(mthis);

  static getBufferParameter_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getBufferParameter_Callback";
  getBufferParameter_Callback_1_(mthis, __arg_0) => getBufferParameter_Callback_1(mthis, __arg_0);

  static getBufferParameter_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getBufferParameter_Callback";
  getBufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => getBufferParameter_Callback_2(mthis, __arg_0, __arg_1);

  static getBufferParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getBufferParameter_Callback";
  getBufferParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getBufferParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getBufferParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getBufferParameter_Callback";
  getBufferParameter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getBufferParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getContextAttributes_Callback_0(mthis) native "WebGLRenderingContext_getContextAttributes_Callback";
  getContextAttributes_Callback_0_(mthis) => getContextAttributes_Callback_0(mthis);

  static getContextAttributes_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getContextAttributes_Callback";
  getContextAttributes_Callback_1_(mthis, __arg_0) => getContextAttributes_Callback_1(mthis, __arg_0);

  static getContextAttributes_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getContextAttributes_Callback";
  getContextAttributes_Callback_2_(mthis, __arg_0, __arg_1) => getContextAttributes_Callback_2(mthis, __arg_0, __arg_1);

  static getError_Callback_0(mthis) native "WebGLRenderingContext_getError_Callback";
  getError_Callback_0_(mthis) => getError_Callback_0(mthis);

  static getError_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getError_Callback";
  getError_Callback_1_(mthis, __arg_0) => getError_Callback_1(mthis, __arg_0);

  static getError_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getError_Callback";
  getError_Callback_2_(mthis, __arg_0, __arg_1) => getError_Callback_2(mthis, __arg_0, __arg_1);

  static getExtension_Callback_0(mthis) native "WebGLRenderingContext_getExtension_Callback";
  getExtension_Callback_0_(mthis) => getExtension_Callback_0(mthis);

  static getExtension_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getExtension_Callback";
  getExtension_Callback_1_(mthis, __arg_0) => getExtension_Callback_1(mthis, __arg_0);

  static getExtension_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getExtension_Callback";
  getExtension_Callback_2_(mthis, __arg_0, __arg_1) => getExtension_Callback_2(mthis, __arg_0, __arg_1);

  static getExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getExtension_Callback";
  getExtension_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getExtension_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getFramebufferAttachmentParameter_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
  getFramebufferAttachmentParameter_Callback_1_(mthis, __arg_0) => getFramebufferAttachmentParameter_Callback_1(mthis, __arg_0);

  static getFramebufferAttachmentParameter_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
  getFramebufferAttachmentParameter_Callback_2_(mthis, __arg_0, __arg_1) => getFramebufferAttachmentParameter_Callback_2(mthis, __arg_0, __arg_1);

  static getFramebufferAttachmentParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
  getFramebufferAttachmentParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getFramebufferAttachmentParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getFramebufferAttachmentParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
  getFramebufferAttachmentParameter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getFramebufferAttachmentParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getFramebufferAttachmentParameter_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_getFramebufferAttachmentParameter_Callback";
  getFramebufferAttachmentParameter_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => getFramebufferAttachmentParameter_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static getParameter_Callback_0(mthis) native "WebGLRenderingContext_getParameter_Callback";
  getParameter_Callback_0_(mthis) => getParameter_Callback_0(mthis);

  static getParameter_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getParameter_Callback";
  getParameter_Callback_1_(mthis, __arg_0) => getParameter_Callback_1(mthis, __arg_0);

  static getParameter_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getParameter_Callback";
  getParameter_Callback_2_(mthis, __arg_0, __arg_1) => getParameter_Callback_2(mthis, __arg_0, __arg_1);

  static getParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getParameter_Callback";
  getParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getProgramInfoLog_Callback_0(mthis) native "WebGLRenderingContext_getProgramInfoLog_Callback";
  getProgramInfoLog_Callback_0_(mthis) => getProgramInfoLog_Callback_0(mthis);

  static getProgramInfoLog_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getProgramInfoLog_Callback";
  getProgramInfoLog_Callback_1_(mthis, __arg_0) => getProgramInfoLog_Callback_1(mthis, __arg_0);

  static getProgramInfoLog_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getProgramInfoLog_Callback";
  getProgramInfoLog_Callback_2_(mthis, __arg_0, __arg_1) => getProgramInfoLog_Callback_2(mthis, __arg_0, __arg_1);

  static getProgramInfoLog_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getProgramInfoLog_Callback";
  getProgramInfoLog_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getProgramInfoLog_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getProgramParameter_Callback_0(mthis) native "WebGLRenderingContext_getProgramParameter_Callback";
  getProgramParameter_Callback_0_(mthis) => getProgramParameter_Callback_0(mthis);

  static getProgramParameter_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getProgramParameter_Callback";
  getProgramParameter_Callback_1_(mthis, __arg_0) => getProgramParameter_Callback_1(mthis, __arg_0);

  static getProgramParameter_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getProgramParameter_Callback";
  getProgramParameter_Callback_2_(mthis, __arg_0, __arg_1) => getProgramParameter_Callback_2(mthis, __arg_0, __arg_1);

  static getProgramParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getProgramParameter_Callback";
  getProgramParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getProgramParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getProgramParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getProgramParameter_Callback";
  getProgramParameter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getProgramParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getRenderbufferParameter_Callback_0(mthis) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
  getRenderbufferParameter_Callback_0_(mthis) => getRenderbufferParameter_Callback_0(mthis);

  static getRenderbufferParameter_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
  getRenderbufferParameter_Callback_1_(mthis, __arg_0) => getRenderbufferParameter_Callback_1(mthis, __arg_0);

  static getRenderbufferParameter_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
  getRenderbufferParameter_Callback_2_(mthis, __arg_0, __arg_1) => getRenderbufferParameter_Callback_2(mthis, __arg_0, __arg_1);

  static getRenderbufferParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
  getRenderbufferParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getRenderbufferParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getRenderbufferParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getRenderbufferParameter_Callback";
  getRenderbufferParameter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getRenderbufferParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getShaderInfoLog_Callback_0(mthis) native "WebGLRenderingContext_getShaderInfoLog_Callback";
  getShaderInfoLog_Callback_0_(mthis) => getShaderInfoLog_Callback_0(mthis);

  static getShaderInfoLog_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getShaderInfoLog_Callback";
  getShaderInfoLog_Callback_1_(mthis, __arg_0) => getShaderInfoLog_Callback_1(mthis, __arg_0);

  static getShaderInfoLog_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getShaderInfoLog_Callback";
  getShaderInfoLog_Callback_2_(mthis, __arg_0, __arg_1) => getShaderInfoLog_Callback_2(mthis, __arg_0, __arg_1);

  static getShaderInfoLog_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getShaderInfoLog_Callback";
  getShaderInfoLog_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getShaderInfoLog_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getShaderParameter_Callback_0(mthis) native "WebGLRenderingContext_getShaderParameter_Callback";
  getShaderParameter_Callback_0_(mthis) => getShaderParameter_Callback_0(mthis);

  static getShaderParameter_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getShaderParameter_Callback";
  getShaderParameter_Callback_1_(mthis, __arg_0) => getShaderParameter_Callback_1(mthis, __arg_0);

  static getShaderParameter_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getShaderParameter_Callback";
  getShaderParameter_Callback_2_(mthis, __arg_0, __arg_1) => getShaderParameter_Callback_2(mthis, __arg_0, __arg_1);

  static getShaderParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getShaderParameter_Callback";
  getShaderParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getShaderParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getShaderParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getShaderParameter_Callback";
  getShaderParameter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getShaderParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getShaderPrecisionFormat_Callback_0(mthis) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback";
  getShaderPrecisionFormat_Callback_0_(mthis) => getShaderPrecisionFormat_Callback_0(mthis);

  static getShaderPrecisionFormat_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback";
  getShaderPrecisionFormat_Callback_1_(mthis, __arg_0) => getShaderPrecisionFormat_Callback_1(mthis, __arg_0);

  static getShaderPrecisionFormat_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback";
  getShaderPrecisionFormat_Callback_2_(mthis, __arg_0, __arg_1) => getShaderPrecisionFormat_Callback_2(mthis, __arg_0, __arg_1);

  static getShaderPrecisionFormat_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback";
  getShaderPrecisionFormat_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getShaderPrecisionFormat_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getShaderPrecisionFormat_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getShaderPrecisionFormat_Callback";
  getShaderPrecisionFormat_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getShaderPrecisionFormat_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getShaderSource_Callback_0(mthis) native "WebGLRenderingContext_getShaderSource_Callback";
  getShaderSource_Callback_0_(mthis) => getShaderSource_Callback_0(mthis);

  static getShaderSource_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getShaderSource_Callback";
  getShaderSource_Callback_1_(mthis, __arg_0) => getShaderSource_Callback_1(mthis, __arg_0);

  static getShaderSource_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getShaderSource_Callback";
  getShaderSource_Callback_2_(mthis, __arg_0, __arg_1) => getShaderSource_Callback_2(mthis, __arg_0, __arg_1);

  static getShaderSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getShaderSource_Callback";
  getShaderSource_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getShaderSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getSupportedExtensions_Callback_0(mthis) native "WebGLRenderingContext_getSupportedExtensions_Callback";
  getSupportedExtensions_Callback_0_(mthis) => getSupportedExtensions_Callback_0(mthis);

  static getSupportedExtensions_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getSupportedExtensions_Callback";
  getSupportedExtensions_Callback_1_(mthis, __arg_0) => getSupportedExtensions_Callback_1(mthis, __arg_0);

  static getSupportedExtensions_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getSupportedExtensions_Callback";
  getSupportedExtensions_Callback_2_(mthis, __arg_0, __arg_1) => getSupportedExtensions_Callback_2(mthis, __arg_0, __arg_1);

  static getTexParameter_Callback_0(mthis) native "WebGLRenderingContext_getTexParameter_Callback";
  getTexParameter_Callback_0_(mthis) => getTexParameter_Callback_0(mthis);

  static getTexParameter_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getTexParameter_Callback";
  getTexParameter_Callback_1_(mthis, __arg_0) => getTexParameter_Callback_1(mthis, __arg_0);

  static getTexParameter_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getTexParameter_Callback";
  getTexParameter_Callback_2_(mthis, __arg_0, __arg_1) => getTexParameter_Callback_2(mthis, __arg_0, __arg_1);

  static getTexParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getTexParameter_Callback";
  getTexParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getTexParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getTexParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getTexParameter_Callback";
  getTexParameter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getTexParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getUniformLocation_Callback_0(mthis) native "WebGLRenderingContext_getUniformLocation_Callback";
  getUniformLocation_Callback_0_(mthis) => getUniformLocation_Callback_0(mthis);

  static getUniformLocation_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getUniformLocation_Callback";
  getUniformLocation_Callback_1_(mthis, __arg_0) => getUniformLocation_Callback_1(mthis, __arg_0);

  static getUniformLocation_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getUniformLocation_Callback";
  getUniformLocation_Callback_2_(mthis, __arg_0, __arg_1) => getUniformLocation_Callback_2(mthis, __arg_0, __arg_1);

  static getUniformLocation_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getUniformLocation_Callback";
  getUniformLocation_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getUniformLocation_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getUniformLocation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getUniformLocation_Callback";
  getUniformLocation_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getUniformLocation_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getUniform_Callback_0(mthis) native "WebGLRenderingContext_getUniform_Callback";
  getUniform_Callback_0_(mthis) => getUniform_Callback_0(mthis);

  static getUniform_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getUniform_Callback";
  getUniform_Callback_1_(mthis, __arg_0) => getUniform_Callback_1(mthis, __arg_0);

  static getUniform_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getUniform_Callback";
  getUniform_Callback_2_(mthis, __arg_0, __arg_1) => getUniform_Callback_2(mthis, __arg_0, __arg_1);

  static getUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getUniform_Callback";
  getUniform_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getUniform_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getUniform_Callback";
  getUniform_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getUniform_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getVertexAttribOffset_Callback_0(mthis) native "WebGLRenderingContext_getVertexAttribOffset_Callback";
  getVertexAttribOffset_Callback_0_(mthis) => getVertexAttribOffset_Callback_0(mthis);

  static getVertexAttribOffset_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getVertexAttribOffset_Callback";
  getVertexAttribOffset_Callback_1_(mthis, __arg_0) => getVertexAttribOffset_Callback_1(mthis, __arg_0);

  static getVertexAttribOffset_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getVertexAttribOffset_Callback";
  getVertexAttribOffset_Callback_2_(mthis, __arg_0, __arg_1) => getVertexAttribOffset_Callback_2(mthis, __arg_0, __arg_1);

  static getVertexAttribOffset_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getVertexAttribOffset_Callback";
  getVertexAttribOffset_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getVertexAttribOffset_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getVertexAttribOffset_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getVertexAttribOffset_Callback";
  getVertexAttribOffset_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getVertexAttribOffset_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getVertexAttrib_Callback_0(mthis) native "WebGLRenderingContext_getVertexAttrib_Callback";
  getVertexAttrib_Callback_0_(mthis) => getVertexAttrib_Callback_0(mthis);

  static getVertexAttrib_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_getVertexAttrib_Callback";
  getVertexAttrib_Callback_1_(mthis, __arg_0) => getVertexAttrib_Callback_1(mthis, __arg_0);

  static getVertexAttrib_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_getVertexAttrib_Callback";
  getVertexAttrib_Callback_2_(mthis, __arg_0, __arg_1) => getVertexAttrib_Callback_2(mthis, __arg_0, __arg_1);

  static getVertexAttrib_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_getVertexAttrib_Callback";
  getVertexAttrib_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getVertexAttrib_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getVertexAttrib_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_getVertexAttrib_Callback";
  getVertexAttrib_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getVertexAttrib_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static hint_Callback_0(mthis) native "WebGLRenderingContext_hint_Callback";
  hint_Callback_0_(mthis) => hint_Callback_0(mthis);

  static hint_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_hint_Callback";
  hint_Callback_1_(mthis, __arg_0) => hint_Callback_1(mthis, __arg_0);

  static hint_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_hint_Callback";
  hint_Callback_2_(mthis, __arg_0, __arg_1) => hint_Callback_2(mthis, __arg_0, __arg_1);

  static hint_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_hint_Callback";
  hint_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => hint_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static hint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_hint_Callback";
  hint_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => hint_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static isBuffer_Callback_0(mthis) native "WebGLRenderingContext_isBuffer_Callback";
  isBuffer_Callback_0_(mthis) => isBuffer_Callback_0(mthis);

  static isBuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_isBuffer_Callback";
  isBuffer_Callback_1_(mthis, __arg_0) => isBuffer_Callback_1(mthis, __arg_0);

  static isBuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_isBuffer_Callback";
  isBuffer_Callback_2_(mthis, __arg_0, __arg_1) => isBuffer_Callback_2(mthis, __arg_0, __arg_1);

  static isBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_isBuffer_Callback";
  isBuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isBuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isContextLost_Callback_0(mthis) native "WebGLRenderingContext_isContextLost_Callback";
  isContextLost_Callback_0_(mthis) => isContextLost_Callback_0(mthis);

  static isContextLost_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_isContextLost_Callback";
  isContextLost_Callback_1_(mthis, __arg_0) => isContextLost_Callback_1(mthis, __arg_0);

  static isContextLost_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_isContextLost_Callback";
  isContextLost_Callback_2_(mthis, __arg_0, __arg_1) => isContextLost_Callback_2(mthis, __arg_0, __arg_1);

  static isEnabled_Callback_0(mthis) native "WebGLRenderingContext_isEnabled_Callback";
  isEnabled_Callback_0_(mthis) => isEnabled_Callback_0(mthis);

  static isEnabled_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_isEnabled_Callback";
  isEnabled_Callback_1_(mthis, __arg_0) => isEnabled_Callback_1(mthis, __arg_0);

  static isEnabled_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_isEnabled_Callback";
  isEnabled_Callback_2_(mthis, __arg_0, __arg_1) => isEnabled_Callback_2(mthis, __arg_0, __arg_1);

  static isEnabled_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_isEnabled_Callback";
  isEnabled_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isEnabled_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isFramebuffer_Callback_0(mthis) native "WebGLRenderingContext_isFramebuffer_Callback";
  isFramebuffer_Callback_0_(mthis) => isFramebuffer_Callback_0(mthis);

  static isFramebuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_isFramebuffer_Callback";
  isFramebuffer_Callback_1_(mthis, __arg_0) => isFramebuffer_Callback_1(mthis, __arg_0);

  static isFramebuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_isFramebuffer_Callback";
  isFramebuffer_Callback_2_(mthis, __arg_0, __arg_1) => isFramebuffer_Callback_2(mthis, __arg_0, __arg_1);

  static isFramebuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_isFramebuffer_Callback";
  isFramebuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isFramebuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isProgram_Callback_0(mthis) native "WebGLRenderingContext_isProgram_Callback";
  isProgram_Callback_0_(mthis) => isProgram_Callback_0(mthis);

  static isProgram_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_isProgram_Callback";
  isProgram_Callback_1_(mthis, __arg_0) => isProgram_Callback_1(mthis, __arg_0);

  static isProgram_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_isProgram_Callback";
  isProgram_Callback_2_(mthis, __arg_0, __arg_1) => isProgram_Callback_2(mthis, __arg_0, __arg_1);

  static isProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_isProgram_Callback";
  isProgram_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isRenderbuffer_Callback_0(mthis) native "WebGLRenderingContext_isRenderbuffer_Callback";
  isRenderbuffer_Callback_0_(mthis) => isRenderbuffer_Callback_0(mthis);

  static isRenderbuffer_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_isRenderbuffer_Callback";
  isRenderbuffer_Callback_1_(mthis, __arg_0) => isRenderbuffer_Callback_1(mthis, __arg_0);

  static isRenderbuffer_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_isRenderbuffer_Callback";
  isRenderbuffer_Callback_2_(mthis, __arg_0, __arg_1) => isRenderbuffer_Callback_2(mthis, __arg_0, __arg_1);

  static isRenderbuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_isRenderbuffer_Callback";
  isRenderbuffer_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isRenderbuffer_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isShader_Callback_0(mthis) native "WebGLRenderingContext_isShader_Callback";
  isShader_Callback_0_(mthis) => isShader_Callback_0(mthis);

  static isShader_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_isShader_Callback";
  isShader_Callback_1_(mthis, __arg_0) => isShader_Callback_1(mthis, __arg_0);

  static isShader_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_isShader_Callback";
  isShader_Callback_2_(mthis, __arg_0, __arg_1) => isShader_Callback_2(mthis, __arg_0, __arg_1);

  static isShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_isShader_Callback";
  isShader_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isShader_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static isTexture_Callback_0(mthis) native "WebGLRenderingContext_isTexture_Callback";
  isTexture_Callback_0_(mthis) => isTexture_Callback_0(mthis);

  static isTexture_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_isTexture_Callback";
  isTexture_Callback_1_(mthis, __arg_0) => isTexture_Callback_1(mthis, __arg_0);

  static isTexture_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_isTexture_Callback";
  isTexture_Callback_2_(mthis, __arg_0, __arg_1) => isTexture_Callback_2(mthis, __arg_0, __arg_1);

  static isTexture_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_isTexture_Callback";
  isTexture_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => isTexture_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static lineWidth_Callback_0(mthis) native "WebGLRenderingContext_lineWidth_Callback";
  lineWidth_Callback_0_(mthis) => lineWidth_Callback_0(mthis);

  static lineWidth_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_lineWidth_Callback";
  lineWidth_Callback_1_(mthis, __arg_0) => lineWidth_Callback_1(mthis, __arg_0);

  static lineWidth_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_lineWidth_Callback";
  lineWidth_Callback_2_(mthis, __arg_0, __arg_1) => lineWidth_Callback_2(mthis, __arg_0, __arg_1);

  static lineWidth_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_lineWidth_Callback";
  lineWidth_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => lineWidth_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static linkProgram_Callback_0(mthis) native "WebGLRenderingContext_linkProgram_Callback";
  linkProgram_Callback_0_(mthis) => linkProgram_Callback_0(mthis);

  static linkProgram_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_linkProgram_Callback";
  linkProgram_Callback_1_(mthis, __arg_0) => linkProgram_Callback_1(mthis, __arg_0);

  static linkProgram_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_linkProgram_Callback";
  linkProgram_Callback_2_(mthis, __arg_0, __arg_1) => linkProgram_Callback_2(mthis, __arg_0, __arg_1);

  static linkProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_linkProgram_Callback";
  linkProgram_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => linkProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static pixelStorei_Callback_0(mthis) native "WebGLRenderingContext_pixelStorei_Callback";
  pixelStorei_Callback_0_(mthis) => pixelStorei_Callback_0(mthis);

  static pixelStorei_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_pixelStorei_Callback";
  pixelStorei_Callback_1_(mthis, __arg_0) => pixelStorei_Callback_1(mthis, __arg_0);

  static pixelStorei_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_pixelStorei_Callback";
  pixelStorei_Callback_2_(mthis, __arg_0, __arg_1) => pixelStorei_Callback_2(mthis, __arg_0, __arg_1);

  static pixelStorei_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_pixelStorei_Callback";
  pixelStorei_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => pixelStorei_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static pixelStorei_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_pixelStorei_Callback";
  pixelStorei_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => pixelStorei_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static polygonOffset_Callback_0(mthis) native "WebGLRenderingContext_polygonOffset_Callback";
  polygonOffset_Callback_0_(mthis) => polygonOffset_Callback_0(mthis);

  static polygonOffset_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_polygonOffset_Callback";
  polygonOffset_Callback_1_(mthis, __arg_0) => polygonOffset_Callback_1(mthis, __arg_0);

  static polygonOffset_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_polygonOffset_Callback";
  polygonOffset_Callback_2_(mthis, __arg_0, __arg_1) => polygonOffset_Callback_2(mthis, __arg_0, __arg_1);

  static polygonOffset_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_polygonOffset_Callback";
  polygonOffset_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => polygonOffset_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static polygonOffset_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_polygonOffset_Callback";
  polygonOffset_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => polygonOffset_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static readPixels_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_readPixels_Callback";
  readPixels_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => readPixels_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static readPixels_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_readPixels_Callback";
  readPixels_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => readPixels_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static readPixels_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_readPixels_Callback";
  readPixels_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => readPixels_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static readPixels_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "WebGLRenderingContext_readPixels_Callback";
  readPixels_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => readPixels_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static readPixels_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "WebGLRenderingContext_readPixels_Callback";
  readPixels_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => readPixels_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static renderbufferStorage_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_renderbufferStorage_Callback";
  renderbufferStorage_Callback_2_(mthis, __arg_0, __arg_1) => renderbufferStorage_Callback_2(mthis, __arg_0, __arg_1);

  static renderbufferStorage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_renderbufferStorage_Callback";
  renderbufferStorage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => renderbufferStorage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static renderbufferStorage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_renderbufferStorage_Callback";
  renderbufferStorage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => renderbufferStorage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static renderbufferStorage_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_renderbufferStorage_Callback";
  renderbufferStorage_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => renderbufferStorage_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static renderbufferStorage_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_renderbufferStorage_Callback";
  renderbufferStorage_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => renderbufferStorage_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static sampleCoverage_Callback_0(mthis) native "WebGLRenderingContext_sampleCoverage_Callback";
  sampleCoverage_Callback_0_(mthis) => sampleCoverage_Callback_0(mthis);

  static sampleCoverage_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_sampleCoverage_Callback";
  sampleCoverage_Callback_1_(mthis, __arg_0) => sampleCoverage_Callback_1(mthis, __arg_0);

  static sampleCoverage_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_sampleCoverage_Callback";
  sampleCoverage_Callback_2_(mthis, __arg_0, __arg_1) => sampleCoverage_Callback_2(mthis, __arg_0, __arg_1);

  static sampleCoverage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_sampleCoverage_Callback";
  sampleCoverage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => sampleCoverage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static sampleCoverage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_sampleCoverage_Callback";
  sampleCoverage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => sampleCoverage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scissor_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_scissor_Callback";
  scissor_Callback_2_(mthis, __arg_0, __arg_1) => scissor_Callback_2(mthis, __arg_0, __arg_1);

  static scissor_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_scissor_Callback";
  scissor_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scissor_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scissor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_scissor_Callback";
  scissor_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scissor_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scissor_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_scissor_Callback";
  scissor_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scissor_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static scissor_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_scissor_Callback";
  scissor_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => scissor_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static shaderSource_Callback_0(mthis) native "WebGLRenderingContext_shaderSource_Callback";
  shaderSource_Callback_0_(mthis) => shaderSource_Callback_0(mthis);

  static shaderSource_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_shaderSource_Callback";
  shaderSource_Callback_1_(mthis, __arg_0) => shaderSource_Callback_1(mthis, __arg_0);

  static shaderSource_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_shaderSource_Callback";
  shaderSource_Callback_2_(mthis, __arg_0, __arg_1) => shaderSource_Callback_2(mthis, __arg_0, __arg_1);

  static shaderSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_shaderSource_Callback";
  shaderSource_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => shaderSource_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static shaderSource_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_shaderSource_Callback";
  shaderSource_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => shaderSource_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static stencilFuncSeparate_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_stencilFuncSeparate_Callback";
  stencilFuncSeparate_Callback_2_(mthis, __arg_0, __arg_1) => stencilFuncSeparate_Callback_2(mthis, __arg_0, __arg_1);

  static stencilFuncSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_stencilFuncSeparate_Callback";
  stencilFuncSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stencilFuncSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static stencilFuncSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_stencilFuncSeparate_Callback";
  stencilFuncSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => stencilFuncSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static stencilFuncSeparate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_stencilFuncSeparate_Callback";
  stencilFuncSeparate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => stencilFuncSeparate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static stencilFuncSeparate_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_stencilFuncSeparate_Callback";
  stencilFuncSeparate_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => stencilFuncSeparate_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static stencilFunc_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_stencilFunc_Callback";
  stencilFunc_Callback_1_(mthis, __arg_0) => stencilFunc_Callback_1(mthis, __arg_0);

  static stencilFunc_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_stencilFunc_Callback";
  stencilFunc_Callback_2_(mthis, __arg_0, __arg_1) => stencilFunc_Callback_2(mthis, __arg_0, __arg_1);

  static stencilFunc_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_stencilFunc_Callback";
  stencilFunc_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stencilFunc_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static stencilFunc_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_stencilFunc_Callback";
  stencilFunc_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => stencilFunc_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static stencilFunc_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_stencilFunc_Callback";
  stencilFunc_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => stencilFunc_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static stencilMaskSeparate_Callback_0(mthis) native "WebGLRenderingContext_stencilMaskSeparate_Callback";
  stencilMaskSeparate_Callback_0_(mthis) => stencilMaskSeparate_Callback_0(mthis);

  static stencilMaskSeparate_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_stencilMaskSeparate_Callback";
  stencilMaskSeparate_Callback_1_(mthis, __arg_0) => stencilMaskSeparate_Callback_1(mthis, __arg_0);

  static stencilMaskSeparate_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_stencilMaskSeparate_Callback";
  stencilMaskSeparate_Callback_2_(mthis, __arg_0, __arg_1) => stencilMaskSeparate_Callback_2(mthis, __arg_0, __arg_1);

  static stencilMaskSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_stencilMaskSeparate_Callback";
  stencilMaskSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stencilMaskSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static stencilMaskSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_stencilMaskSeparate_Callback";
  stencilMaskSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => stencilMaskSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static stencilMask_Callback_0(mthis) native "WebGLRenderingContext_stencilMask_Callback";
  stencilMask_Callback_0_(mthis) => stencilMask_Callback_0(mthis);

  static stencilMask_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_stencilMask_Callback";
  stencilMask_Callback_1_(mthis, __arg_0) => stencilMask_Callback_1(mthis, __arg_0);

  static stencilMask_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_stencilMask_Callback";
  stencilMask_Callback_2_(mthis, __arg_0, __arg_1) => stencilMask_Callback_2(mthis, __arg_0, __arg_1);

  static stencilMask_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_stencilMask_Callback";
  stencilMask_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stencilMask_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static stencilOpSeparate_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_stencilOpSeparate_Callback";
  stencilOpSeparate_Callback_2_(mthis, __arg_0, __arg_1) => stencilOpSeparate_Callback_2(mthis, __arg_0, __arg_1);

  static stencilOpSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_stencilOpSeparate_Callback";
  stencilOpSeparate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stencilOpSeparate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static stencilOpSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_stencilOpSeparate_Callback";
  stencilOpSeparate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => stencilOpSeparate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static stencilOpSeparate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_stencilOpSeparate_Callback";
  stencilOpSeparate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => stencilOpSeparate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static stencilOpSeparate_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_stencilOpSeparate_Callback";
  stencilOpSeparate_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => stencilOpSeparate_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static stencilOp_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_stencilOp_Callback";
  stencilOp_Callback_1_(mthis, __arg_0) => stencilOp_Callback_1(mthis, __arg_0);

  static stencilOp_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_stencilOp_Callback";
  stencilOp_Callback_2_(mthis, __arg_0, __arg_1) => stencilOp_Callback_2(mthis, __arg_0, __arg_1);

  static stencilOp_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_stencilOp_Callback";
  stencilOp_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => stencilOp_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static stencilOp_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_stencilOp_Callback";
  stencilOp_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => stencilOp_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static stencilOp_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_stencilOp_Callback";
  stencilOp_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => stencilOp_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static texImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "WebGLRenderingContext_texImage2D_Callback";
  texImage2D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => texImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static texImage2D_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) native "WebGLRenderingContext_texImage2D_Callback";
  texImage2D_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => texImage2D_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10);

  static texImage2D_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_texImage2D_Callback";
  texImage2D_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => texImage2D_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static texImage2D_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_texImage2D_Callback";
  texImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => texImage2D_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static texImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_texImage2D_Callback";
  texImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => texImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static texImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_texImage2D_Callback";
  texImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => texImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static texImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "WebGLRenderingContext_texImage2D_Callback";
  texImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => texImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static texImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "WebGLRenderingContext_texImage2D_Callback";
  texImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => texImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static texParameterf_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_texParameterf_Callback";
  texParameterf_Callback_1_(mthis, __arg_0) => texParameterf_Callback_1(mthis, __arg_0);

  static texParameterf_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_texParameterf_Callback";
  texParameterf_Callback_2_(mthis, __arg_0, __arg_1) => texParameterf_Callback_2(mthis, __arg_0, __arg_1);

  static texParameterf_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_texParameterf_Callback";
  texParameterf_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => texParameterf_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static texParameterf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_texParameterf_Callback";
  texParameterf_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => texParameterf_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static texParameterf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_texParameterf_Callback";
  texParameterf_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => texParameterf_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static texParameteri_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_texParameteri_Callback";
  texParameteri_Callback_1_(mthis, __arg_0) => texParameteri_Callback_1(mthis, __arg_0);

  static texParameteri_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_texParameteri_Callback";
  texParameteri_Callback_2_(mthis, __arg_0, __arg_1) => texParameteri_Callback_2(mthis, __arg_0, __arg_1);

  static texParameteri_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_texParameteri_Callback";
  texParameteri_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => texParameteri_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static texParameteri_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_texParameteri_Callback";
  texParameteri_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => texParameteri_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static texParameteri_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_texParameteri_Callback";
  texParameteri_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => texParameteri_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static texSubImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) native "WebGLRenderingContext_texSubImage2D_Callback";
  texSubImage2D_Callback_10_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9) => texSubImage2D_Callback_10(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9);

  static texSubImage2D_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) native "WebGLRenderingContext_texSubImage2D_Callback";
  texSubImage2D_Callback_11_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10) => texSubImage2D_Callback_11(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8, __arg_9, __arg_10);

  static texSubImage2D_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_texSubImage2D_Callback";
  texSubImage2D_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => texSubImage2D_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static texSubImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_texSubImage2D_Callback";
  texSubImage2D_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => texSubImage2D_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static texSubImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_texSubImage2D_Callback";
  texSubImage2D_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => texSubImage2D_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static texSubImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "WebGLRenderingContext_texSubImage2D_Callback";
  texSubImage2D_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => texSubImage2D_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static texSubImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "WebGLRenderingContext_texSubImage2D_Callback";
  texSubImage2D_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => texSubImage2D_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static uniform1f_Callback_0(mthis) native "WebGLRenderingContext_uniform1f_Callback";
  uniform1f_Callback_0_(mthis) => uniform1f_Callback_0(mthis);

  static uniform1f_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform1f_Callback";
  uniform1f_Callback_1_(mthis, __arg_0) => uniform1f_Callback_1(mthis, __arg_0);

  static uniform1f_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform1f_Callback";
  uniform1f_Callback_2_(mthis, __arg_0, __arg_1) => uniform1f_Callback_2(mthis, __arg_0, __arg_1);

  static uniform1f_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform1f_Callback";
  uniform1f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform1f_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform1f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform1f_Callback";
  uniform1f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform1f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform1fv_Callback_0(mthis) native "WebGLRenderingContext_uniform1fv_Callback";
  uniform1fv_Callback_0_(mthis) => uniform1fv_Callback_0(mthis);

  static uniform1fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform1fv_Callback";
  uniform1fv_Callback_1_(mthis, __arg_0) => uniform1fv_Callback_1(mthis, __arg_0);

  static uniform1fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform1fv_Callback";
  uniform1fv_Callback_2_(mthis, __arg_0, __arg_1) => uniform1fv_Callback_2(mthis, __arg_0, __arg_1);

  static uniform1fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform1fv_Callback";
  uniform1fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform1fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform1fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform1fv_Callback";
  uniform1fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform1fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform1i_Callback_0(mthis) native "WebGLRenderingContext_uniform1i_Callback";
  uniform1i_Callback_0_(mthis) => uniform1i_Callback_0(mthis);

  static uniform1i_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform1i_Callback";
  uniform1i_Callback_1_(mthis, __arg_0) => uniform1i_Callback_1(mthis, __arg_0);

  static uniform1i_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform1i_Callback";
  uniform1i_Callback_2_(mthis, __arg_0, __arg_1) => uniform1i_Callback_2(mthis, __arg_0, __arg_1);

  static uniform1i_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform1i_Callback";
  uniform1i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform1i_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform1i_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform1i_Callback";
  uniform1i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform1i_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform1iv_Callback_0(mthis) native "WebGLRenderingContext_uniform1iv_Callback";
  uniform1iv_Callback_0_(mthis) => uniform1iv_Callback_0(mthis);

  static uniform1iv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform1iv_Callback";
  uniform1iv_Callback_1_(mthis, __arg_0) => uniform1iv_Callback_1(mthis, __arg_0);

  static uniform1iv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform1iv_Callback";
  uniform1iv_Callback_2_(mthis, __arg_0, __arg_1) => uniform1iv_Callback_2(mthis, __arg_0, __arg_1);

  static uniform1iv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform1iv_Callback";
  uniform1iv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform1iv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform1iv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform1iv_Callback";
  uniform1iv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform1iv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform2f_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform2f_Callback";
  uniform2f_Callback_1_(mthis, __arg_0) => uniform2f_Callback_1(mthis, __arg_0);

  static uniform2f_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform2f_Callback";
  uniform2f_Callback_2_(mthis, __arg_0, __arg_1) => uniform2f_Callback_2(mthis, __arg_0, __arg_1);

  static uniform2f_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform2f_Callback";
  uniform2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform2f_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform2f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform2f_Callback";
  uniform2f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform2f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform2f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_uniform2f_Callback";
  uniform2f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => uniform2f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static uniform2fv_Callback_0(mthis) native "WebGLRenderingContext_uniform2fv_Callback";
  uniform2fv_Callback_0_(mthis) => uniform2fv_Callback_0(mthis);

  static uniform2fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform2fv_Callback";
  uniform2fv_Callback_1_(mthis, __arg_0) => uniform2fv_Callback_1(mthis, __arg_0);

  static uniform2fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform2fv_Callback";
  uniform2fv_Callback_2_(mthis, __arg_0, __arg_1) => uniform2fv_Callback_2(mthis, __arg_0, __arg_1);

  static uniform2fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform2fv_Callback";
  uniform2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform2fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform2fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform2fv_Callback";
  uniform2fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform2fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform2i_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform2i_Callback";
  uniform2i_Callback_1_(mthis, __arg_0) => uniform2i_Callback_1(mthis, __arg_0);

  static uniform2i_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform2i_Callback";
  uniform2i_Callback_2_(mthis, __arg_0, __arg_1) => uniform2i_Callback_2(mthis, __arg_0, __arg_1);

  static uniform2i_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform2i_Callback";
  uniform2i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform2i_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform2i_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform2i_Callback";
  uniform2i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform2i_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform2i_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_uniform2i_Callback";
  uniform2i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => uniform2i_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static uniform2iv_Callback_0(mthis) native "WebGLRenderingContext_uniform2iv_Callback";
  uniform2iv_Callback_0_(mthis) => uniform2iv_Callback_0(mthis);

  static uniform2iv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform2iv_Callback";
  uniform2iv_Callback_1_(mthis, __arg_0) => uniform2iv_Callback_1(mthis, __arg_0);

  static uniform2iv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform2iv_Callback";
  uniform2iv_Callback_2_(mthis, __arg_0, __arg_1) => uniform2iv_Callback_2(mthis, __arg_0, __arg_1);

  static uniform2iv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform2iv_Callback";
  uniform2iv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform2iv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform2iv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform2iv_Callback";
  uniform2iv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform2iv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform3f_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform3f_Callback";
  uniform3f_Callback_2_(mthis, __arg_0, __arg_1) => uniform3f_Callback_2(mthis, __arg_0, __arg_1);

  static uniform3f_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform3f_Callback";
  uniform3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform3f_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform3f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform3f_Callback";
  uniform3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform3f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform3f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_uniform3f_Callback";
  uniform3f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => uniform3f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static uniform3f_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_uniform3f_Callback";
  uniform3f_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => uniform3f_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static uniform3fv_Callback_0(mthis) native "WebGLRenderingContext_uniform3fv_Callback";
  uniform3fv_Callback_0_(mthis) => uniform3fv_Callback_0(mthis);

  static uniform3fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform3fv_Callback";
  uniform3fv_Callback_1_(mthis, __arg_0) => uniform3fv_Callback_1(mthis, __arg_0);

  static uniform3fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform3fv_Callback";
  uniform3fv_Callback_2_(mthis, __arg_0, __arg_1) => uniform3fv_Callback_2(mthis, __arg_0, __arg_1);

  static uniform3fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform3fv_Callback";
  uniform3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform3fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform3fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform3fv_Callback";
  uniform3fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform3fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform3i_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform3i_Callback";
  uniform3i_Callback_2_(mthis, __arg_0, __arg_1) => uniform3i_Callback_2(mthis, __arg_0, __arg_1);

  static uniform3i_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform3i_Callback";
  uniform3i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform3i_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform3i_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform3i_Callback";
  uniform3i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform3i_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform3i_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_uniform3i_Callback";
  uniform3i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => uniform3i_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static uniform3i_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_uniform3i_Callback";
  uniform3i_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => uniform3i_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static uniform3iv_Callback_0(mthis) native "WebGLRenderingContext_uniform3iv_Callback";
  uniform3iv_Callback_0_(mthis) => uniform3iv_Callback_0(mthis);

  static uniform3iv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform3iv_Callback";
  uniform3iv_Callback_1_(mthis, __arg_0) => uniform3iv_Callback_1(mthis, __arg_0);

  static uniform3iv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform3iv_Callback";
  uniform3iv_Callback_2_(mthis, __arg_0, __arg_1) => uniform3iv_Callback_2(mthis, __arg_0, __arg_1);

  static uniform3iv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform3iv_Callback";
  uniform3iv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform3iv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform3iv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform3iv_Callback";
  uniform3iv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform3iv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform4f_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform4f_Callback";
  uniform4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform4f_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform4f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform4f_Callback";
  uniform4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform4f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform4f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_uniform4f_Callback";
  uniform4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => uniform4f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static uniform4f_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_uniform4f_Callback";
  uniform4f_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => uniform4f_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static uniform4f_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_uniform4f_Callback";
  uniform4f_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => uniform4f_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static uniform4fv_Callback_0(mthis) native "WebGLRenderingContext_uniform4fv_Callback";
  uniform4fv_Callback_0_(mthis) => uniform4fv_Callback_0(mthis);

  static uniform4fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform4fv_Callback";
  uniform4fv_Callback_1_(mthis, __arg_0) => uniform4fv_Callback_1(mthis, __arg_0);

  static uniform4fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform4fv_Callback";
  uniform4fv_Callback_2_(mthis, __arg_0, __arg_1) => uniform4fv_Callback_2(mthis, __arg_0, __arg_1);

  static uniform4fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform4fv_Callback";
  uniform4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform4fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform4fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform4fv_Callback";
  uniform4fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform4fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform4i_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform4i_Callback";
  uniform4i_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform4i_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform4i_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform4i_Callback";
  uniform4i_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform4i_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniform4i_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_uniform4i_Callback";
  uniform4i_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => uniform4i_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static uniform4i_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_uniform4i_Callback";
  uniform4i_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => uniform4i_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static uniform4i_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_uniform4i_Callback";
  uniform4i_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => uniform4i_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static uniform4iv_Callback_0(mthis) native "WebGLRenderingContext_uniform4iv_Callback";
  uniform4iv_Callback_0_(mthis) => uniform4iv_Callback_0(mthis);

  static uniform4iv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniform4iv_Callback";
  uniform4iv_Callback_1_(mthis, __arg_0) => uniform4iv_Callback_1(mthis, __arg_0);

  static uniform4iv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniform4iv_Callback";
  uniform4iv_Callback_2_(mthis, __arg_0, __arg_1) => uniform4iv_Callback_2(mthis, __arg_0, __arg_1);

  static uniform4iv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniform4iv_Callback";
  uniform4iv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniform4iv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniform4iv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniform4iv_Callback";
  uniform4iv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniform4iv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniformMatrix2fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
  uniformMatrix2fv_Callback_1_(mthis, __arg_0) => uniformMatrix2fv_Callback_1(mthis, __arg_0);

  static uniformMatrix2fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
  uniformMatrix2fv_Callback_2_(mthis, __arg_0, __arg_1) => uniformMatrix2fv_Callback_2(mthis, __arg_0, __arg_1);

  static uniformMatrix2fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
  uniformMatrix2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniformMatrix2fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniformMatrix2fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
  uniformMatrix2fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniformMatrix2fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniformMatrix2fv_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_uniformMatrix2fv_Callback";
  uniformMatrix2fv_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => uniformMatrix2fv_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static uniformMatrix3fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
  uniformMatrix3fv_Callback_1_(mthis, __arg_0) => uniformMatrix3fv_Callback_1(mthis, __arg_0);

  static uniformMatrix3fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
  uniformMatrix3fv_Callback_2_(mthis, __arg_0, __arg_1) => uniformMatrix3fv_Callback_2(mthis, __arg_0, __arg_1);

  static uniformMatrix3fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
  uniformMatrix3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniformMatrix3fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniformMatrix3fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
  uniformMatrix3fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniformMatrix3fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniformMatrix3fv_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_uniformMatrix3fv_Callback";
  uniformMatrix3fv_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => uniformMatrix3fv_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static uniformMatrix4fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
  uniformMatrix4fv_Callback_1_(mthis, __arg_0) => uniformMatrix4fv_Callback_1(mthis, __arg_0);

  static uniformMatrix4fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
  uniformMatrix4fv_Callback_2_(mthis, __arg_0, __arg_1) => uniformMatrix4fv_Callback_2(mthis, __arg_0, __arg_1);

  static uniformMatrix4fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
  uniformMatrix4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => uniformMatrix4fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static uniformMatrix4fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
  uniformMatrix4fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => uniformMatrix4fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static uniformMatrix4fv_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_uniformMatrix4fv_Callback";
  uniformMatrix4fv_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => uniformMatrix4fv_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static useProgram_Callback_0(mthis) native "WebGLRenderingContext_useProgram_Callback";
  useProgram_Callback_0_(mthis) => useProgram_Callback_0(mthis);

  static useProgram_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_useProgram_Callback";
  useProgram_Callback_1_(mthis, __arg_0) => useProgram_Callback_1(mthis, __arg_0);

  static useProgram_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_useProgram_Callback";
  useProgram_Callback_2_(mthis, __arg_0, __arg_1) => useProgram_Callback_2(mthis, __arg_0, __arg_1);

  static useProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_useProgram_Callback";
  useProgram_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => useProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static validateProgram_Callback_0(mthis) native "WebGLRenderingContext_validateProgram_Callback";
  validateProgram_Callback_0_(mthis) => validateProgram_Callback_0(mthis);

  static validateProgram_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_validateProgram_Callback";
  validateProgram_Callback_1_(mthis, __arg_0) => validateProgram_Callback_1(mthis, __arg_0);

  static validateProgram_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_validateProgram_Callback";
  validateProgram_Callback_2_(mthis, __arg_0, __arg_1) => validateProgram_Callback_2(mthis, __arg_0, __arg_1);

  static validateProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_validateProgram_Callback";
  validateProgram_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => validateProgram_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttrib1f_Callback_0(mthis) native "WebGLRenderingContext_vertexAttrib1f_Callback";
  vertexAttrib1f_Callback_0_(mthis) => vertexAttrib1f_Callback_0(mthis);

  static vertexAttrib1f_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_vertexAttrib1f_Callback";
  vertexAttrib1f_Callback_1_(mthis, __arg_0) => vertexAttrib1f_Callback_1(mthis, __arg_0);

  static vertexAttrib1f_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_vertexAttrib1f_Callback";
  vertexAttrib1f_Callback_2_(mthis, __arg_0, __arg_1) => vertexAttrib1f_Callback_2(mthis, __arg_0, __arg_1);

  static vertexAttrib1f_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_vertexAttrib1f_Callback";
  vertexAttrib1f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vertexAttrib1f_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttrib1f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_vertexAttrib1f_Callback";
  vertexAttrib1f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttrib1f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static vertexAttrib1fv_Callback_0(mthis) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
  vertexAttrib1fv_Callback_0_(mthis) => vertexAttrib1fv_Callback_0(mthis);

  static vertexAttrib1fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
  vertexAttrib1fv_Callback_1_(mthis, __arg_0) => vertexAttrib1fv_Callback_1(mthis, __arg_0);

  static vertexAttrib1fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
  vertexAttrib1fv_Callback_2_(mthis, __arg_0, __arg_1) => vertexAttrib1fv_Callback_2(mthis, __arg_0, __arg_1);

  static vertexAttrib1fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
  vertexAttrib1fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vertexAttrib1fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttrib1fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_vertexAttrib1fv_Callback";
  vertexAttrib1fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttrib1fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static vertexAttrib2f_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_vertexAttrib2f_Callback";
  vertexAttrib2f_Callback_1_(mthis, __arg_0) => vertexAttrib2f_Callback_1(mthis, __arg_0);

  static vertexAttrib2f_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_vertexAttrib2f_Callback";
  vertexAttrib2f_Callback_2_(mthis, __arg_0, __arg_1) => vertexAttrib2f_Callback_2(mthis, __arg_0, __arg_1);

  static vertexAttrib2f_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_vertexAttrib2f_Callback";
  vertexAttrib2f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vertexAttrib2f_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttrib2f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_vertexAttrib2f_Callback";
  vertexAttrib2f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttrib2f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static vertexAttrib2f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_vertexAttrib2f_Callback";
  vertexAttrib2f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => vertexAttrib2f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static vertexAttrib2fv_Callback_0(mthis) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
  vertexAttrib2fv_Callback_0_(mthis) => vertexAttrib2fv_Callback_0(mthis);

  static vertexAttrib2fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
  vertexAttrib2fv_Callback_1_(mthis, __arg_0) => vertexAttrib2fv_Callback_1(mthis, __arg_0);

  static vertexAttrib2fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
  vertexAttrib2fv_Callback_2_(mthis, __arg_0, __arg_1) => vertexAttrib2fv_Callback_2(mthis, __arg_0, __arg_1);

  static vertexAttrib2fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
  vertexAttrib2fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vertexAttrib2fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttrib2fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_vertexAttrib2fv_Callback";
  vertexAttrib2fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttrib2fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static vertexAttrib3f_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_vertexAttrib3f_Callback";
  vertexAttrib3f_Callback_2_(mthis, __arg_0, __arg_1) => vertexAttrib3f_Callback_2(mthis, __arg_0, __arg_1);

  static vertexAttrib3f_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_vertexAttrib3f_Callback";
  vertexAttrib3f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vertexAttrib3f_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttrib3f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_vertexAttrib3f_Callback";
  vertexAttrib3f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttrib3f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static vertexAttrib3f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_vertexAttrib3f_Callback";
  vertexAttrib3f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => vertexAttrib3f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static vertexAttrib3f_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_vertexAttrib3f_Callback";
  vertexAttrib3f_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => vertexAttrib3f_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static vertexAttrib3fv_Callback_0(mthis) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
  vertexAttrib3fv_Callback_0_(mthis) => vertexAttrib3fv_Callback_0(mthis);

  static vertexAttrib3fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
  vertexAttrib3fv_Callback_1_(mthis, __arg_0) => vertexAttrib3fv_Callback_1(mthis, __arg_0);

  static vertexAttrib3fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
  vertexAttrib3fv_Callback_2_(mthis, __arg_0, __arg_1) => vertexAttrib3fv_Callback_2(mthis, __arg_0, __arg_1);

  static vertexAttrib3fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
  vertexAttrib3fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vertexAttrib3fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttrib3fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_vertexAttrib3fv_Callback";
  vertexAttrib3fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttrib3fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static vertexAttrib4f_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_vertexAttrib4f_Callback";
  vertexAttrib4f_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vertexAttrib4f_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttrib4f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_vertexAttrib4f_Callback";
  vertexAttrib4f_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttrib4f_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static vertexAttrib4f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_vertexAttrib4f_Callback";
  vertexAttrib4f_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => vertexAttrib4f_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static vertexAttrib4f_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_vertexAttrib4f_Callback";
  vertexAttrib4f_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => vertexAttrib4f_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static vertexAttrib4f_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_vertexAttrib4f_Callback";
  vertexAttrib4f_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => vertexAttrib4f_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static vertexAttrib4fv_Callback_0(mthis) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
  vertexAttrib4fv_Callback_0_(mthis) => vertexAttrib4fv_Callback_0(mthis);

  static vertexAttrib4fv_Callback_1(mthis, __arg_0) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
  vertexAttrib4fv_Callback_1_(mthis, __arg_0) => vertexAttrib4fv_Callback_1(mthis, __arg_0);

  static vertexAttrib4fv_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
  vertexAttrib4fv_Callback_2_(mthis, __arg_0, __arg_1) => vertexAttrib4fv_Callback_2(mthis, __arg_0, __arg_1);

  static vertexAttrib4fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
  vertexAttrib4fv_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => vertexAttrib4fv_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static vertexAttrib4fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_vertexAttrib4fv_Callback";
  vertexAttrib4fv_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttrib4fv_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static vertexAttribPointer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_vertexAttribPointer_Callback";
  vertexAttribPointer_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => vertexAttribPointer_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static vertexAttribPointer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_vertexAttribPointer_Callback";
  vertexAttribPointer_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => vertexAttribPointer_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static vertexAttribPointer_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_vertexAttribPointer_Callback";
  vertexAttribPointer_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => vertexAttribPointer_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static vertexAttribPointer_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WebGLRenderingContext_vertexAttribPointer_Callback";
  vertexAttribPointer_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => vertexAttribPointer_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static vertexAttribPointer_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "WebGLRenderingContext_vertexAttribPointer_Callback";
  vertexAttribPointer_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => vertexAttribPointer_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static viewport_Callback_2(mthis, __arg_0, __arg_1) native "WebGLRenderingContext_viewport_Callback";
  viewport_Callback_2_(mthis, __arg_0, __arg_1) => viewport_Callback_2(mthis, __arg_0, __arg_1);

  static viewport_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebGLRenderingContext_viewport_Callback";
  viewport_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => viewport_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static viewport_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebGLRenderingContext_viewport_Callback";
  viewport_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => viewport_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static viewport_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebGLRenderingContext_viewport_Callback";
  viewport_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => viewport_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static viewport_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebGLRenderingContext_viewport_Callback";
  viewport_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => viewport_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

}

class BlinkWebGLShader {
  static final instance = new BlinkWebGLShader();

}

class BlinkWebGLShaderPrecisionFormat {
  static final instance = new BlinkWebGLShaderPrecisionFormat();

  static precision_Getter(mthis) native "WebGLShaderPrecisionFormat_precision_Getter";
  precision_Getter_(mthis) => precision_Getter(mthis);

  static rangeMax_Getter(mthis) native "WebGLShaderPrecisionFormat_rangeMax_Getter";
  rangeMax_Getter_(mthis) => rangeMax_Getter(mthis);

  static rangeMin_Getter(mthis) native "WebGLShaderPrecisionFormat_rangeMin_Getter";
  rangeMin_Getter_(mthis) => rangeMin_Getter(mthis);

}

class BlinkWebGLTexture {
  static final instance = new BlinkWebGLTexture();

}

class BlinkWebGLUniformLocation {
  static final instance = new BlinkWebGLUniformLocation();

}

class BlinkWebGLVertexArrayObjectOES {
  static final instance = new BlinkWebGLVertexArrayObjectOES();

}

class BlinkWebKitAnimationEvent extends BlinkEvent {
  static final instance = new BlinkWebKitAnimationEvent();

  static animationName_Getter(mthis) native "WebKitAnimationEvent_animationName_Getter";
  animationName_Getter_(mthis) => animationName_Getter(mthis);

  static constructorCallback_2(__arg_0, __arg_1) native "WebKitAnimationEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static elapsedTime_Getter(mthis) native "WebKitAnimationEvent_elapsedTime_Getter";
  elapsedTime_Getter_(mthis) => elapsedTime_Getter(mthis);

}

class BlinkWebKitCSSFilterRule extends BlinkCSSRule {
  static final instance = new BlinkWebKitCSSFilterRule();

  static style_Getter(mthis) native "WebKitCSSFilterRule_style_Getter";
  style_Getter_(mthis) => style_Getter(mthis);

}

class BlinkWebKitCSSFilterValue extends BlinkCSSValueList {
  static final instance = new BlinkWebKitCSSFilterValue();

  static $__getter___Callback_1(mthis, __arg_0) native "WebKitCSSFilterValue___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static operationType_Getter(mthis) native "WebKitCSSFilterValue_operationType_Getter";
  operationType_Getter_(mthis) => operationType_Getter(mthis);

}

class BlinkWebKitCSSMatrix {
  static final instance = new BlinkWebKitCSSMatrix();

  static a_Getter(mthis) native "WebKitCSSMatrix_a_Getter";
  a_Getter_(mthis) => a_Getter(mthis);

  static a_Setter(mthis, __arg_0) native "WebKitCSSMatrix_a_Setter";
  a_Setter_(mthis, __arg_0) => a_Setter(mthis, __arg_0);

  static b_Getter(mthis) native "WebKitCSSMatrix_b_Getter";
  b_Getter_(mthis) => b_Getter(mthis);

  static b_Setter(mthis, __arg_0) native "WebKitCSSMatrix_b_Setter";
  b_Setter_(mthis, __arg_0) => b_Setter(mthis, __arg_0);

  static c_Getter(mthis) native "WebKitCSSMatrix_c_Getter";
  c_Getter_(mthis) => c_Getter(mthis);

  static c_Setter(mthis, __arg_0) native "WebKitCSSMatrix_c_Setter";
  c_Setter_(mthis, __arg_0) => c_Setter(mthis, __arg_0);

  static constructorCallback_0() native "WebKitCSSMatrix_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "WebKitCSSMatrix_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "WebKitCSSMatrix_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "WebKitCSSMatrix_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static d_Getter(mthis) native "WebKitCSSMatrix_d_Getter";
  d_Getter_(mthis) => d_Getter(mthis);

  static d_Setter(mthis, __arg_0) native "WebKitCSSMatrix_d_Setter";
  d_Setter_(mthis, __arg_0) => d_Setter(mthis, __arg_0);

  static e_Getter(mthis) native "WebKitCSSMatrix_e_Getter";
  e_Getter_(mthis) => e_Getter(mthis);

  static e_Setter(mthis, __arg_0) native "WebKitCSSMatrix_e_Setter";
  e_Setter_(mthis, __arg_0) => e_Setter(mthis, __arg_0);

  static f_Getter(mthis) native "WebKitCSSMatrix_f_Getter";
  f_Getter_(mthis) => f_Getter(mthis);

  static f_Setter(mthis, __arg_0) native "WebKitCSSMatrix_f_Setter";
  f_Setter_(mthis, __arg_0) => f_Setter(mthis, __arg_0);

  static inverse_Callback_0(mthis) native "WebKitCSSMatrix_inverse_Callback";
  inverse_Callback_0_(mthis) => inverse_Callback_0(mthis);

  static inverse_Callback_1(mthis, __arg_0) native "WebKitCSSMatrix_inverse_Callback";
  inverse_Callback_1_(mthis, __arg_0) => inverse_Callback_1(mthis, __arg_0);

  static inverse_Callback_2(mthis, __arg_0, __arg_1) native "WebKitCSSMatrix_inverse_Callback";
  inverse_Callback_2_(mthis, __arg_0, __arg_1) => inverse_Callback_2(mthis, __arg_0, __arg_1);

  static m11_Getter(mthis) native "WebKitCSSMatrix_m11_Getter";
  m11_Getter_(mthis) => m11_Getter(mthis);

  static m11_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m11_Setter";
  m11_Setter_(mthis, __arg_0) => m11_Setter(mthis, __arg_0);

  static m12_Getter(mthis) native "WebKitCSSMatrix_m12_Getter";
  m12_Getter_(mthis) => m12_Getter(mthis);

  static m12_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m12_Setter";
  m12_Setter_(mthis, __arg_0) => m12_Setter(mthis, __arg_0);

  static m13_Getter(mthis) native "WebKitCSSMatrix_m13_Getter";
  m13_Getter_(mthis) => m13_Getter(mthis);

  static m13_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m13_Setter";
  m13_Setter_(mthis, __arg_0) => m13_Setter(mthis, __arg_0);

  static m14_Getter(mthis) native "WebKitCSSMatrix_m14_Getter";
  m14_Getter_(mthis) => m14_Getter(mthis);

  static m14_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m14_Setter";
  m14_Setter_(mthis, __arg_0) => m14_Setter(mthis, __arg_0);

  static m21_Getter(mthis) native "WebKitCSSMatrix_m21_Getter";
  m21_Getter_(mthis) => m21_Getter(mthis);

  static m21_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m21_Setter";
  m21_Setter_(mthis, __arg_0) => m21_Setter(mthis, __arg_0);

  static m22_Getter(mthis) native "WebKitCSSMatrix_m22_Getter";
  m22_Getter_(mthis) => m22_Getter(mthis);

  static m22_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m22_Setter";
  m22_Setter_(mthis, __arg_0) => m22_Setter(mthis, __arg_0);

  static m23_Getter(mthis) native "WebKitCSSMatrix_m23_Getter";
  m23_Getter_(mthis) => m23_Getter(mthis);

  static m23_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m23_Setter";
  m23_Setter_(mthis, __arg_0) => m23_Setter(mthis, __arg_0);

  static m24_Getter(mthis) native "WebKitCSSMatrix_m24_Getter";
  m24_Getter_(mthis) => m24_Getter(mthis);

  static m24_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m24_Setter";
  m24_Setter_(mthis, __arg_0) => m24_Setter(mthis, __arg_0);

  static m31_Getter(mthis) native "WebKitCSSMatrix_m31_Getter";
  m31_Getter_(mthis) => m31_Getter(mthis);

  static m31_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m31_Setter";
  m31_Setter_(mthis, __arg_0) => m31_Setter(mthis, __arg_0);

  static m32_Getter(mthis) native "WebKitCSSMatrix_m32_Getter";
  m32_Getter_(mthis) => m32_Getter(mthis);

  static m32_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m32_Setter";
  m32_Setter_(mthis, __arg_0) => m32_Setter(mthis, __arg_0);

  static m33_Getter(mthis) native "WebKitCSSMatrix_m33_Getter";
  m33_Getter_(mthis) => m33_Getter(mthis);

  static m33_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m33_Setter";
  m33_Setter_(mthis, __arg_0) => m33_Setter(mthis, __arg_0);

  static m34_Getter(mthis) native "WebKitCSSMatrix_m34_Getter";
  m34_Getter_(mthis) => m34_Getter(mthis);

  static m34_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m34_Setter";
  m34_Setter_(mthis, __arg_0) => m34_Setter(mthis, __arg_0);

  static m41_Getter(mthis) native "WebKitCSSMatrix_m41_Getter";
  m41_Getter_(mthis) => m41_Getter(mthis);

  static m41_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m41_Setter";
  m41_Setter_(mthis, __arg_0) => m41_Setter(mthis, __arg_0);

  static m42_Getter(mthis) native "WebKitCSSMatrix_m42_Getter";
  m42_Getter_(mthis) => m42_Getter(mthis);

  static m42_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m42_Setter";
  m42_Setter_(mthis, __arg_0) => m42_Setter(mthis, __arg_0);

  static m43_Getter(mthis) native "WebKitCSSMatrix_m43_Getter";
  m43_Getter_(mthis) => m43_Getter(mthis);

  static m43_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m43_Setter";
  m43_Setter_(mthis, __arg_0) => m43_Setter(mthis, __arg_0);

  static m44_Getter(mthis) native "WebKitCSSMatrix_m44_Getter";
  m44_Getter_(mthis) => m44_Getter(mthis);

  static m44_Setter(mthis, __arg_0) native "WebKitCSSMatrix_m44_Setter";
  m44_Setter_(mthis, __arg_0) => m44_Setter(mthis, __arg_0);

  static multiply_Callback_0(mthis) native "WebKitCSSMatrix_multiply_Callback";
  multiply_Callback_0_(mthis) => multiply_Callback_0(mthis);

  static multiply_Callback_1(mthis, __arg_0) native "WebKitCSSMatrix_multiply_Callback";
  multiply_Callback_1_(mthis, __arg_0) => multiply_Callback_1(mthis, __arg_0);

  static multiply_Callback_2(mthis, __arg_0, __arg_1) native "WebKitCSSMatrix_multiply_Callback";
  multiply_Callback_2_(mthis, __arg_0, __arg_1) => multiply_Callback_2(mthis, __arg_0, __arg_1);

  static multiply_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebKitCSSMatrix_multiply_Callback";
  multiply_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => multiply_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rotateAxisAngle_Callback_0(mthis) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
  rotateAxisAngle_Callback_0_(mthis) => rotateAxisAngle_Callback_0(mthis);

  static rotateAxisAngle_Callback_1(mthis, __arg_0) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
  rotateAxisAngle_Callback_1_(mthis, __arg_0) => rotateAxisAngle_Callback_1(mthis, __arg_0);

  static rotateAxisAngle_Callback_2(mthis, __arg_0, __arg_1) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
  rotateAxisAngle_Callback_2_(mthis, __arg_0, __arg_1) => rotateAxisAngle_Callback_2(mthis, __arg_0, __arg_1);

  static rotateAxisAngle_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
  rotateAxisAngle_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => rotateAxisAngle_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rotateAxisAngle_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
  rotateAxisAngle_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => rotateAxisAngle_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static rotateAxisAngle_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
  rotateAxisAngle_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => rotateAxisAngle_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static rotateAxisAngle_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
  rotateAxisAngle_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => rotateAxisAngle_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static rotate_Callback_0(mthis) native "WebKitCSSMatrix_rotate_Callback";
  rotate_Callback_0_(mthis) => rotate_Callback_0(mthis);

  static rotate_Callback_1(mthis, __arg_0) native "WebKitCSSMatrix_rotate_Callback";
  rotate_Callback_1_(mthis, __arg_0) => rotate_Callback_1(mthis, __arg_0);

  static rotate_Callback_2(mthis, __arg_0, __arg_1) native "WebKitCSSMatrix_rotate_Callback";
  rotate_Callback_2_(mthis, __arg_0, __arg_1) => rotate_Callback_2(mthis, __arg_0, __arg_1);

  static rotate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebKitCSSMatrix_rotate_Callback";
  rotate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => rotate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static rotate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebKitCSSMatrix_rotate_Callback";
  rotate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => rotate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static rotate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebKitCSSMatrix_rotate_Callback";
  rotate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => rotate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static scale_Callback_0(mthis) native "WebKitCSSMatrix_scale_Callback";
  scale_Callback_0_(mthis) => scale_Callback_0(mthis);

  static scale_Callback_1(mthis, __arg_0) native "WebKitCSSMatrix_scale_Callback";
  scale_Callback_1_(mthis, __arg_0) => scale_Callback_1(mthis, __arg_0);

  static scale_Callback_2(mthis, __arg_0, __arg_1) native "WebKitCSSMatrix_scale_Callback";
  scale_Callback_2_(mthis, __arg_0, __arg_1) => scale_Callback_2(mthis, __arg_0, __arg_1);

  static scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebKitCSSMatrix_scale_Callback";
  scale_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scale_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebKitCSSMatrix_scale_Callback";
  scale_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scale_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scale_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebKitCSSMatrix_scale_Callback";
  scale_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scale_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static setMatrixValue_Callback_0(mthis) native "WebKitCSSMatrix_setMatrixValue_Callback";
  setMatrixValue_Callback_0_(mthis) => setMatrixValue_Callback_0(mthis);

  static setMatrixValue_Callback_1(mthis, __arg_0) native "WebKitCSSMatrix_setMatrixValue_Callback";
  setMatrixValue_Callback_1_(mthis, __arg_0) => setMatrixValue_Callback_1(mthis, __arg_0);

  static setMatrixValue_Callback_2(mthis, __arg_0, __arg_1) native "WebKitCSSMatrix_setMatrixValue_Callback";
  setMatrixValue_Callback_2_(mthis, __arg_0, __arg_1) => setMatrixValue_Callback_2(mthis, __arg_0, __arg_1);

  static setMatrixValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebKitCSSMatrix_setMatrixValue_Callback";
  setMatrixValue_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setMatrixValue_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static skewX_Callback_0(mthis) native "WebKitCSSMatrix_skewX_Callback";
  skewX_Callback_0_(mthis) => skewX_Callback_0(mthis);

  static skewX_Callback_1(mthis, __arg_0) native "WebKitCSSMatrix_skewX_Callback";
  skewX_Callback_1_(mthis, __arg_0) => skewX_Callback_1(mthis, __arg_0);

  static skewX_Callback_2(mthis, __arg_0, __arg_1) native "WebKitCSSMatrix_skewX_Callback";
  skewX_Callback_2_(mthis, __arg_0, __arg_1) => skewX_Callback_2(mthis, __arg_0, __arg_1);

  static skewX_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebKitCSSMatrix_skewX_Callback";
  skewX_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => skewX_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static skewY_Callback_0(mthis) native "WebKitCSSMatrix_skewY_Callback";
  skewY_Callback_0_(mthis) => skewY_Callback_0(mthis);

  static skewY_Callback_1(mthis, __arg_0) native "WebKitCSSMatrix_skewY_Callback";
  skewY_Callback_1_(mthis, __arg_0) => skewY_Callback_1(mthis, __arg_0);

  static skewY_Callback_2(mthis, __arg_0, __arg_1) native "WebKitCSSMatrix_skewY_Callback";
  skewY_Callback_2_(mthis, __arg_0, __arg_1) => skewY_Callback_2(mthis, __arg_0, __arg_1);

  static skewY_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebKitCSSMatrix_skewY_Callback";
  skewY_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => skewY_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static translate_Callback_0(mthis) native "WebKitCSSMatrix_translate_Callback";
  translate_Callback_0_(mthis) => translate_Callback_0(mthis);

  static translate_Callback_1(mthis, __arg_0) native "WebKitCSSMatrix_translate_Callback";
  translate_Callback_1_(mthis, __arg_0) => translate_Callback_1(mthis, __arg_0);

  static translate_Callback_2(mthis, __arg_0, __arg_1) native "WebKitCSSMatrix_translate_Callback";
  translate_Callback_2_(mthis, __arg_0, __arg_1) => translate_Callback_2(mthis, __arg_0, __arg_1);

  static translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebKitCSSMatrix_translate_Callback";
  translate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => translate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebKitCSSMatrix_translate_Callback";
  translate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => translate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static translate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WebKitCSSMatrix_translate_Callback";
  translate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => translate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkWebKitCSSTransformValue extends BlinkCSSValueList {
  static final instance = new BlinkWebKitCSSTransformValue();

  static $__getter___Callback_1(mthis, __arg_0) native "WebKitCSSTransformValue___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static operationType_Getter(mthis) native "WebKitCSSTransformValue_operationType_Getter";
  operationType_Getter_(mthis) => operationType_Getter(mthis);

}

class BlinkWebKitGamepad {
  static final instance = new BlinkWebKitGamepad();

  static axes_Getter(mthis) native "WebKitGamepad_axes_Getter";
  axes_Getter_(mthis) => axes_Getter(mthis);

  static buttons_Getter(mthis) native "WebKitGamepad_buttons_Getter";
  buttons_Getter_(mthis) => buttons_Getter(mthis);

  static connected_Getter(mthis) native "WebKitGamepad_connected_Getter";
  connected_Getter_(mthis) => connected_Getter(mthis);

  static id_Getter(mthis) native "WebKitGamepad_id_Getter";
  id_Getter_(mthis) => id_Getter(mthis);

  static index_Getter(mthis) native "WebKitGamepad_index_Getter";
  index_Getter_(mthis) => index_Getter(mthis);

  static mapping_Getter(mthis) native "WebKitGamepad_mapping_Getter";
  mapping_Getter_(mthis) => mapping_Getter(mthis);

  static timestamp_Getter(mthis) native "WebKitGamepad_timestamp_Getter";
  timestamp_Getter_(mthis) => timestamp_Getter(mthis);

}

class BlinkWebKitGamepadList {
  static final instance = new BlinkWebKitGamepadList();

  static $__getter___Callback_1(mthis, __arg_0) native "WebKitGamepadList___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static item_Callback_0(mthis) native "WebKitGamepadList_item_Callback";
  item_Callback_0_(mthis) => item_Callback_0(mthis);

  static item_Callback_1(mthis, __arg_0) native "WebKitGamepadList_item_Callback";
  item_Callback_1_(mthis, __arg_0) => item_Callback_1(mthis, __arg_0);

  static item_Callback_2(mthis, __arg_0, __arg_1) native "WebKitGamepadList_item_Callback";
  item_Callback_2_(mthis, __arg_0, __arg_1) => item_Callback_2(mthis, __arg_0, __arg_1);

  static item_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebKitGamepadList_item_Callback";
  item_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => item_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static length_Getter(mthis) native "WebKitGamepadList_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

}

class BlinkWebSocket extends BlinkEventTarget {
  static final instance = new BlinkWebSocket();

  static URL_Getter(mthis) native "WebSocket_URL_Getter";
  URL_Getter_(mthis) => URL_Getter(mthis);

  static binaryType_Getter(mthis) native "WebSocket_binaryType_Getter";
  binaryType_Getter_(mthis) => binaryType_Getter(mthis);

  static binaryType_Setter(mthis, __arg_0) native "WebSocket_binaryType_Setter";
  binaryType_Setter_(mthis, __arg_0) => binaryType_Setter(mthis, __arg_0);

  static bufferedAmount_Getter(mthis) native "WebSocket_bufferedAmount_Getter";
  bufferedAmount_Getter_(mthis) => bufferedAmount_Getter(mthis);

  static close_Callback_0(mthis) native "WebSocket_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "WebSocket_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "WebSocket_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static close_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebSocket_close_Callback";
  close_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => close_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static close_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WebSocket_close_Callback";
  close_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => close_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static constructorCallback_0() native "WebSocket_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "WebSocket_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "WebSocket_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "WebSocket_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3) native "WebSocket_constructorCallback";
  constructorCallback_4_(__arg_0, __arg_1, __arg_2, __arg_3) => constructorCallback_4(__arg_0, __arg_1, __arg_2, __arg_3);

  static extensions_Getter(mthis) native "WebSocket_extensions_Getter";
  extensions_Getter_(mthis) => extensions_Getter(mthis);

  static onclose_Getter(mthis) native "WebSocket_onclose_Getter";
  onclose_Getter_(mthis) => onclose_Getter(mthis);

  static onclose_Setter(mthis, __arg_0) native "WebSocket_onclose_Setter";
  onclose_Setter_(mthis, __arg_0) => onclose_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "WebSocket_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "WebSocket_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onmessage_Getter(mthis) native "WebSocket_onmessage_Getter";
  onmessage_Getter_(mthis) => onmessage_Getter(mthis);

  static onmessage_Setter(mthis, __arg_0) native "WebSocket_onmessage_Setter";
  onmessage_Setter_(mthis, __arg_0) => onmessage_Setter(mthis, __arg_0);

  static onopen_Getter(mthis) native "WebSocket_onopen_Getter";
  onopen_Getter_(mthis) => onopen_Getter(mthis);

  static onopen_Setter(mthis, __arg_0) native "WebSocket_onopen_Setter";
  onopen_Setter_(mthis, __arg_0) => onopen_Setter(mthis, __arg_0);

  static protocol_Getter(mthis) native "WebSocket_protocol_Getter";
  protocol_Getter_(mthis) => protocol_Getter(mthis);

  static readyState_Getter(mthis) native "WebSocket_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static send_Callback_0(mthis) native "WebSocket_send_Callback";
  send_Callback_0_(mthis) => send_Callback_0(mthis);

  static send_Callback_1(mthis, __arg_0) native "WebSocket_send_Callback";
  send_Callback_1_(mthis, __arg_0) => send_Callback_1(mthis, __arg_0);

  static send_Callback_2(mthis, __arg_0, __arg_1) native "WebSocket_send_Callback";
  send_Callback_2_(mthis, __arg_0, __arg_1) => send_Callback_2(mthis, __arg_0, __arg_1);

  static send_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WebSocket_send_Callback";
  send_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => send_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static url_Getter(mthis) native "WebSocket_url_Getter";
  url_Getter_(mthis) => url_Getter(mthis);

}

class BlinkWheelEvent extends BlinkMouseEvent {
  static final instance = new BlinkWheelEvent();

  static constructorCallback_2(__arg_0, __arg_1) native "WheelEvent_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static deltaMode_Getter(mthis) native "WheelEvent_deltaMode_Getter";
  deltaMode_Getter_(mthis) => deltaMode_Getter(mthis);

  static deltaX_Getter(mthis) native "WheelEvent_deltaX_Getter";
  deltaX_Getter_(mthis) => deltaX_Getter(mthis);

  static deltaY_Getter(mthis) native "WheelEvent_deltaY_Getter";
  deltaY_Getter_(mthis) => deltaY_Getter(mthis);

  static deltaZ_Getter(mthis) native "WheelEvent_deltaZ_Getter";
  deltaZ_Getter_(mthis) => deltaZ_Getter(mthis);

  static wheelDeltaX_Getter(mthis) native "WheelEvent_wheelDeltaX_Getter";
  wheelDeltaX_Getter_(mthis) => wheelDeltaX_Getter(mthis);

  static wheelDeltaY_Getter(mthis) native "WheelEvent_wheelDeltaY_Getter";
  wheelDeltaY_Getter_(mthis) => wheelDeltaY_Getter(mthis);

}

class BlinkWindow extends BlinkEventTarget {
  static final instance = new BlinkWindow();

  static $__getter___Callback_1(mthis, __arg_0) native "Window___getter___Callback";
  $__getter___Callback_1_(mthis, __arg_0) => $__getter___Callback_1(mthis, __arg_0);

  static CSS_Getter(mthis) native "Window_CSS_Getter";
  CSS_Getter_(mthis) => CSS_Getter(mthis);

  static alert_Callback_0(mthis) native "Window_alert_Callback";
  alert_Callback_0_(mthis) => alert_Callback_0(mthis);

  static alert_Callback_1(mthis, __arg_0) native "Window_alert_Callback";
  alert_Callback_1_(mthis, __arg_0) => alert_Callback_1(mthis, __arg_0);

  static alert_Callback_2(mthis, __arg_0, __arg_1) native "Window_alert_Callback";
  alert_Callback_2_(mthis, __arg_0, __arg_1) => alert_Callback_2(mthis, __arg_0, __arg_1);

  static alert_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_alert_Callback";
  alert_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => alert_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static applicationCache_Getter(mthis) native "Window_applicationCache_Getter";
  applicationCache_Getter_(mthis) => applicationCache_Getter(mthis);

  static atob_Callback_0(mthis) native "Window_atob_Callback";
  atob_Callback_0_(mthis) => atob_Callback_0(mthis);

  static atob_Callback_1(mthis, __arg_0) native "Window_atob_Callback";
  atob_Callback_1_(mthis, __arg_0) => atob_Callback_1(mthis, __arg_0);

  static atob_Callback_2(mthis, __arg_0, __arg_1) native "Window_atob_Callback";
  atob_Callback_2_(mthis, __arg_0, __arg_1) => atob_Callback_2(mthis, __arg_0, __arg_1);

  static atob_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_atob_Callback";
  atob_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => atob_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static blur_Callback_0(mthis) native "Window_blur_Callback";
  blur_Callback_0_(mthis) => blur_Callback_0(mthis);

  static blur_Callback_1(mthis, __arg_0) native "Window_blur_Callback";
  blur_Callback_1_(mthis, __arg_0) => blur_Callback_1(mthis, __arg_0);

  static blur_Callback_2(mthis, __arg_0, __arg_1) native "Window_blur_Callback";
  blur_Callback_2_(mthis, __arg_0, __arg_1) => blur_Callback_2(mthis, __arg_0, __arg_1);

  static btoa_Callback_0(mthis) native "Window_btoa_Callback";
  btoa_Callback_0_(mthis) => btoa_Callback_0(mthis);

  static btoa_Callback_1(mthis, __arg_0) native "Window_btoa_Callback";
  btoa_Callback_1_(mthis, __arg_0) => btoa_Callback_1(mthis, __arg_0);

  static btoa_Callback_2(mthis, __arg_0, __arg_1) native "Window_btoa_Callback";
  btoa_Callback_2_(mthis, __arg_0, __arg_1) => btoa_Callback_2(mthis, __arg_0, __arg_1);

  static btoa_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_btoa_Callback";
  btoa_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => btoa_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static cancelAnimationFrame_Callback_0(mthis) native "Window_cancelAnimationFrame_Callback";
  cancelAnimationFrame_Callback_0_(mthis) => cancelAnimationFrame_Callback_0(mthis);

  static cancelAnimationFrame_Callback_1(mthis, __arg_0) native "Window_cancelAnimationFrame_Callback";
  cancelAnimationFrame_Callback_1_(mthis, __arg_0) => cancelAnimationFrame_Callback_1(mthis, __arg_0);

  static cancelAnimationFrame_Callback_2(mthis, __arg_0, __arg_1) native "Window_cancelAnimationFrame_Callback";
  cancelAnimationFrame_Callback_2_(mthis, __arg_0, __arg_1) => cancelAnimationFrame_Callback_2(mthis, __arg_0, __arg_1);

  static cancelAnimationFrame_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_cancelAnimationFrame_Callback";
  cancelAnimationFrame_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => cancelAnimationFrame_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static captureEvents_Callback_0(mthis) native "Window_captureEvents_Callback";
  captureEvents_Callback_0_(mthis) => captureEvents_Callback_0(mthis);

  static captureEvents_Callback_1(mthis, __arg_0) native "Window_captureEvents_Callback";
  captureEvents_Callback_1_(mthis, __arg_0) => captureEvents_Callback_1(mthis, __arg_0);

  static captureEvents_Callback_2(mthis, __arg_0, __arg_1) native "Window_captureEvents_Callback";
  captureEvents_Callback_2_(mthis, __arg_0, __arg_1) => captureEvents_Callback_2(mthis, __arg_0, __arg_1);

  static clearInterval_Callback_0(mthis) native "Window_clearInterval_Callback";
  clearInterval_Callback_0_(mthis) => clearInterval_Callback_0(mthis);

  static clearInterval_Callback_1(mthis, __arg_0) native "Window_clearInterval_Callback";
  clearInterval_Callback_1_(mthis, __arg_0) => clearInterval_Callback_1(mthis, __arg_0);

  static clearInterval_Callback_2(mthis, __arg_0, __arg_1) native "Window_clearInterval_Callback";
  clearInterval_Callback_2_(mthis, __arg_0, __arg_1) => clearInterval_Callback_2(mthis, __arg_0, __arg_1);

  static clearInterval_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_clearInterval_Callback";
  clearInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearInterval_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clearTimeout_Callback_0(mthis) native "Window_clearTimeout_Callback";
  clearTimeout_Callback_0_(mthis) => clearTimeout_Callback_0(mthis);

  static clearTimeout_Callback_1(mthis, __arg_0) native "Window_clearTimeout_Callback";
  clearTimeout_Callback_1_(mthis, __arg_0) => clearTimeout_Callback_1(mthis, __arg_0);

  static clearTimeout_Callback_2(mthis, __arg_0, __arg_1) native "Window_clearTimeout_Callback";
  clearTimeout_Callback_2_(mthis, __arg_0, __arg_1) => clearTimeout_Callback_2(mthis, __arg_0, __arg_1);

  static clearTimeout_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_clearTimeout_Callback";
  clearTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearTimeout_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static close_Callback_0(mthis) native "Window_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "Window_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "Window_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static closed_Getter(mthis) native "Window_closed_Getter";
  closed_Getter_(mthis) => closed_Getter(mthis);

  static confirm_Callback_0(mthis) native "Window_confirm_Callback";
  confirm_Callback_0_(mthis) => confirm_Callback_0(mthis);

  static confirm_Callback_1(mthis, __arg_0) native "Window_confirm_Callback";
  confirm_Callback_1_(mthis, __arg_0) => confirm_Callback_1(mthis, __arg_0);

  static confirm_Callback_2(mthis, __arg_0, __arg_1) native "Window_confirm_Callback";
  confirm_Callback_2_(mthis, __arg_0, __arg_1) => confirm_Callback_2(mthis, __arg_0, __arg_1);

  static confirm_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_confirm_Callback";
  confirm_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => confirm_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static console_Getter(mthis) native "Window_console_Getter";
  console_Getter_(mthis) => console_Getter(mthis);

  static crypto_Getter(mthis) native "Window_crypto_Getter";
  crypto_Getter_(mthis) => crypto_Getter(mthis);

  static defaultStatus_Getter(mthis) native "Window_defaultStatus_Getter";
  defaultStatus_Getter_(mthis) => defaultStatus_Getter(mthis);

  static defaultStatus_Setter(mthis, __arg_0) native "Window_defaultStatus_Setter";
  defaultStatus_Setter_(mthis, __arg_0) => defaultStatus_Setter(mthis, __arg_0);

  static defaultstatus_Getter(mthis) native "Window_defaultstatus_Getter";
  defaultstatus_Getter_(mthis) => defaultstatus_Getter(mthis);

  static defaultstatus_Setter(mthis, __arg_0) native "Window_defaultstatus_Setter";
  defaultstatus_Setter_(mthis, __arg_0) => defaultstatus_Setter(mthis, __arg_0);

  static devicePixelRatio_Getter(mthis) native "Window_devicePixelRatio_Getter";
  devicePixelRatio_Getter_(mthis) => devicePixelRatio_Getter(mthis);

  static document_Getter(mthis) native "Window_document_Getter";
  document_Getter_(mthis) => document_Getter(mthis);

  static event_Getter(mthis) native "Window_event_Getter";
  event_Getter_(mthis) => event_Getter(mthis);

  static event_Setter(mthis, __arg_0) native "Window_event_Setter";
  event_Setter_(mthis, __arg_0) => event_Setter(mthis, __arg_0);

  static find_Callback_0(mthis) native "Window_find_Callback";
  find_Callback_0_(mthis) => find_Callback_0(mthis);

  static find_Callback_1(mthis, __arg_0) native "Window_find_Callback";
  find_Callback_1_(mthis, __arg_0) => find_Callback_1(mthis, __arg_0);

  static find_Callback_2(mthis, __arg_0, __arg_1) native "Window_find_Callback";
  find_Callback_2_(mthis, __arg_0, __arg_1) => find_Callback_2(mthis, __arg_0, __arg_1);

  static find_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_find_Callback";
  find_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => find_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static find_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_find_Callback";
  find_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => find_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static find_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_find_Callback";
  find_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => find_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static find_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Window_find_Callback";
  find_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => find_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static find_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "Window_find_Callback";
  find_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => find_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static find_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) native "Window_find_Callback";
  find_Callback_8_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7) => find_Callback_8(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7);

  static find_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) native "Window_find_Callback";
  find_Callback_9_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8) => find_Callback_9(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6, __arg_7, __arg_8);

  static focus_Callback_0(mthis) native "Window_focus_Callback";
  focus_Callback_0_(mthis) => focus_Callback_0(mthis);

  static focus_Callback_1(mthis, __arg_0) native "Window_focus_Callback";
  focus_Callback_1_(mthis, __arg_0) => focus_Callback_1(mthis, __arg_0);

  static focus_Callback_2(mthis, __arg_0, __arg_1) native "Window_focus_Callback";
  focus_Callback_2_(mthis, __arg_0, __arg_1) => focus_Callback_2(mthis, __arg_0, __arg_1);

  static frameElement_Getter(mthis) native "Window_frameElement_Getter";
  frameElement_Getter_(mthis) => frameElement_Getter(mthis);

  static frames_Getter(mthis) native "Window_frames_Getter";
  frames_Getter_(mthis) => frames_Getter(mthis);

  static getComputedStyle_Callback_0(mthis) native "Window_getComputedStyle_Callback";
  getComputedStyle_Callback_0_(mthis) => getComputedStyle_Callback_0(mthis);

  static getComputedStyle_Callback_1(mthis, __arg_0) native "Window_getComputedStyle_Callback";
  getComputedStyle_Callback_1_(mthis, __arg_0) => getComputedStyle_Callback_1(mthis, __arg_0);

  static getComputedStyle_Callback_2(mthis, __arg_0, __arg_1) native "Window_getComputedStyle_Callback";
  getComputedStyle_Callback_2_(mthis, __arg_0, __arg_1) => getComputedStyle_Callback_2(mthis, __arg_0, __arg_1);

  static getComputedStyle_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_getComputedStyle_Callback";
  getComputedStyle_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getComputedStyle_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getComputedStyle_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_getComputedStyle_Callback";
  getComputedStyle_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getComputedStyle_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getMatchedCSSRules_Callback_0(mthis) native "Window_getMatchedCSSRules_Callback";
  getMatchedCSSRules_Callback_0_(mthis) => getMatchedCSSRules_Callback_0(mthis);

  static getMatchedCSSRules_Callback_1(mthis, __arg_0) native "Window_getMatchedCSSRules_Callback";
  getMatchedCSSRules_Callback_1_(mthis, __arg_0) => getMatchedCSSRules_Callback_1(mthis, __arg_0);

  static getMatchedCSSRules_Callback_2(mthis, __arg_0, __arg_1) native "Window_getMatchedCSSRules_Callback";
  getMatchedCSSRules_Callback_2_(mthis, __arg_0, __arg_1) => getMatchedCSSRules_Callback_2(mthis, __arg_0, __arg_1);

  static getMatchedCSSRules_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_getMatchedCSSRules_Callback";
  getMatchedCSSRules_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getMatchedCSSRules_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getMatchedCSSRules_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_getMatchedCSSRules_Callback";
  getMatchedCSSRules_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getMatchedCSSRules_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static getSelection_Callback_0(mthis) native "Window_getSelection_Callback";
  getSelection_Callback_0_(mthis) => getSelection_Callback_0(mthis);

  static getSelection_Callback_1(mthis, __arg_0) native "Window_getSelection_Callback";
  getSelection_Callback_1_(mthis, __arg_0) => getSelection_Callback_1(mthis, __arg_0);

  static getSelection_Callback_2(mthis, __arg_0, __arg_1) native "Window_getSelection_Callback";
  getSelection_Callback_2_(mthis, __arg_0, __arg_1) => getSelection_Callback_2(mthis, __arg_0, __arg_1);

  static history_Getter(mthis) native "Window_history_Getter";
  history_Getter_(mthis) => history_Getter(mthis);

  static indexedDB_Getter(mthis) native "Window_indexedDB_Getter";
  indexedDB_Getter_(mthis) => indexedDB_Getter(mthis);

  static innerHeight_Getter(mthis) native "Window_innerHeight_Getter";
  innerHeight_Getter_(mthis) => innerHeight_Getter(mthis);

  static innerWidth_Getter(mthis) native "Window_innerWidth_Getter";
  innerWidth_Getter_(mthis) => innerWidth_Getter(mthis);

  static length_Getter(mthis) native "Window_length_Getter";
  length_Getter_(mthis) => length_Getter(mthis);

  static localStorage_Getter(mthis) native "Window_localStorage_Getter";
  localStorage_Getter_(mthis) => localStorage_Getter(mthis);

  static location_Getter(mthis) native "Window_location_Getter";
  location_Getter_(mthis) => location_Getter(mthis);

  static location_Setter(mthis, __arg_0) native "Window_location_Setter";
  location_Setter_(mthis, __arg_0) => location_Setter(mthis, __arg_0);

  static locationbar_Getter(mthis) native "Window_locationbar_Getter";
  locationbar_Getter_(mthis) => locationbar_Getter(mthis);

  static matchMedia_Callback_0(mthis) native "Window_matchMedia_Callback";
  matchMedia_Callback_0_(mthis) => matchMedia_Callback_0(mthis);

  static matchMedia_Callback_1(mthis, __arg_0) native "Window_matchMedia_Callback";
  matchMedia_Callback_1_(mthis, __arg_0) => matchMedia_Callback_1(mthis, __arg_0);

  static matchMedia_Callback_2(mthis, __arg_0, __arg_1) native "Window_matchMedia_Callback";
  matchMedia_Callback_2_(mthis, __arg_0, __arg_1) => matchMedia_Callback_2(mthis, __arg_0, __arg_1);

  static matchMedia_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_matchMedia_Callback";
  matchMedia_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => matchMedia_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static menubar_Getter(mthis) native "Window_menubar_Getter";
  menubar_Getter_(mthis) => menubar_Getter(mthis);

  static moveBy_Callback_0(mthis) native "Window_moveBy_Callback";
  moveBy_Callback_0_(mthis) => moveBy_Callback_0(mthis);

  static moveBy_Callback_1(mthis, __arg_0) native "Window_moveBy_Callback";
  moveBy_Callback_1_(mthis, __arg_0) => moveBy_Callback_1(mthis, __arg_0);

  static moveBy_Callback_2(mthis, __arg_0, __arg_1) native "Window_moveBy_Callback";
  moveBy_Callback_2_(mthis, __arg_0, __arg_1) => moveBy_Callback_2(mthis, __arg_0, __arg_1);

  static moveBy_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_moveBy_Callback";
  moveBy_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => moveBy_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static moveBy_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_moveBy_Callback";
  moveBy_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => moveBy_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static moveTo_Callback_0(mthis) native "Window_moveTo_Callback";
  moveTo_Callback_0_(mthis) => moveTo_Callback_0(mthis);

  static moveTo_Callback_1(mthis, __arg_0) native "Window_moveTo_Callback";
  moveTo_Callback_1_(mthis, __arg_0) => moveTo_Callback_1(mthis, __arg_0);

  static moveTo_Callback_2(mthis, __arg_0, __arg_1) native "Window_moveTo_Callback";
  moveTo_Callback_2_(mthis, __arg_0, __arg_1) => moveTo_Callback_2(mthis, __arg_0, __arg_1);

  static moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_moveTo_Callback";
  moveTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => moveTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_moveTo_Callback";
  moveTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => moveTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static name_Getter(mthis) native "Window_name_Getter";
  name_Getter_(mthis) => name_Getter(mthis);

  static name_Setter(mthis, __arg_0) native "Window_name_Setter";
  name_Setter_(mthis, __arg_0) => name_Setter(mthis, __arg_0);

  static navigator_Getter(mthis) native "Window_navigator_Getter";
  navigator_Getter_(mthis) => navigator_Getter(mthis);

  static offscreenBuffering_Getter(mthis) native "Window_offscreenBuffering_Getter";
  offscreenBuffering_Getter_(mthis) => offscreenBuffering_Getter(mthis);

  static onabort_Getter(mthis) native "Window_onabort_Getter";
  onabort_Getter_(mthis) => onabort_Getter(mthis);

  static onabort_Setter(mthis, __arg_0) native "Window_onabort_Setter";
  onabort_Setter_(mthis, __arg_0) => onabort_Setter(mthis, __arg_0);

  static onanimationend_Getter(mthis) native "Window_onanimationend_Getter";
  onanimationend_Getter_(mthis) => onanimationend_Getter(mthis);

  static onanimationend_Setter(mthis, __arg_0) native "Window_onanimationend_Setter";
  onanimationend_Setter_(mthis, __arg_0) => onanimationend_Setter(mthis, __arg_0);

  static onanimationiteration_Getter(mthis) native "Window_onanimationiteration_Getter";
  onanimationiteration_Getter_(mthis) => onanimationiteration_Getter(mthis);

  static onanimationiteration_Setter(mthis, __arg_0) native "Window_onanimationiteration_Setter";
  onanimationiteration_Setter_(mthis, __arg_0) => onanimationiteration_Setter(mthis, __arg_0);

  static onanimationstart_Getter(mthis) native "Window_onanimationstart_Getter";
  onanimationstart_Getter_(mthis) => onanimationstart_Getter(mthis);

  static onanimationstart_Setter(mthis, __arg_0) native "Window_onanimationstart_Setter";
  onanimationstart_Setter_(mthis, __arg_0) => onanimationstart_Setter(mthis, __arg_0);

  static onautocomplete_Getter(mthis) native "Window_onautocomplete_Getter";
  onautocomplete_Getter_(mthis) => onautocomplete_Getter(mthis);

  static onautocomplete_Setter(mthis, __arg_0) native "Window_onautocomplete_Setter";
  onautocomplete_Setter_(mthis, __arg_0) => onautocomplete_Setter(mthis, __arg_0);

  static onautocompleteerror_Getter(mthis) native "Window_onautocompleteerror_Getter";
  onautocompleteerror_Getter_(mthis) => onautocompleteerror_Getter(mthis);

  static onautocompleteerror_Setter(mthis, __arg_0) native "Window_onautocompleteerror_Setter";
  onautocompleteerror_Setter_(mthis, __arg_0) => onautocompleteerror_Setter(mthis, __arg_0);

  static onbeforeunload_Getter(mthis) native "Window_onbeforeunload_Getter";
  onbeforeunload_Getter_(mthis) => onbeforeunload_Getter(mthis);

  static onbeforeunload_Setter(mthis, __arg_0) native "Window_onbeforeunload_Setter";
  onbeforeunload_Setter_(mthis, __arg_0) => onbeforeunload_Setter(mthis, __arg_0);

  static onblur_Getter(mthis) native "Window_onblur_Getter";
  onblur_Getter_(mthis) => onblur_Getter(mthis);

  static onblur_Setter(mthis, __arg_0) native "Window_onblur_Setter";
  onblur_Setter_(mthis, __arg_0) => onblur_Setter(mthis, __arg_0);

  static oncancel_Getter(mthis) native "Window_oncancel_Getter";
  oncancel_Getter_(mthis) => oncancel_Getter(mthis);

  static oncancel_Setter(mthis, __arg_0) native "Window_oncancel_Setter";
  oncancel_Setter_(mthis, __arg_0) => oncancel_Setter(mthis, __arg_0);

  static oncanplay_Getter(mthis) native "Window_oncanplay_Getter";
  oncanplay_Getter_(mthis) => oncanplay_Getter(mthis);

  static oncanplay_Setter(mthis, __arg_0) native "Window_oncanplay_Setter";
  oncanplay_Setter_(mthis, __arg_0) => oncanplay_Setter(mthis, __arg_0);

  static oncanplaythrough_Getter(mthis) native "Window_oncanplaythrough_Getter";
  oncanplaythrough_Getter_(mthis) => oncanplaythrough_Getter(mthis);

  static oncanplaythrough_Setter(mthis, __arg_0) native "Window_oncanplaythrough_Setter";
  oncanplaythrough_Setter_(mthis, __arg_0) => oncanplaythrough_Setter(mthis, __arg_0);

  static onchange_Getter(mthis) native "Window_onchange_Getter";
  onchange_Getter_(mthis) => onchange_Getter(mthis);

  static onchange_Setter(mthis, __arg_0) native "Window_onchange_Setter";
  onchange_Setter_(mthis, __arg_0) => onchange_Setter(mthis, __arg_0);

  static onclick_Getter(mthis) native "Window_onclick_Getter";
  onclick_Getter_(mthis) => onclick_Getter(mthis);

  static onclick_Setter(mthis, __arg_0) native "Window_onclick_Setter";
  onclick_Setter_(mthis, __arg_0) => onclick_Setter(mthis, __arg_0);

  static onclose_Getter(mthis) native "Window_onclose_Getter";
  onclose_Getter_(mthis) => onclose_Getter(mthis);

  static onclose_Setter(mthis, __arg_0) native "Window_onclose_Setter";
  onclose_Setter_(mthis, __arg_0) => onclose_Setter(mthis, __arg_0);

  static oncontextmenu_Getter(mthis) native "Window_oncontextmenu_Getter";
  oncontextmenu_Getter_(mthis) => oncontextmenu_Getter(mthis);

  static oncontextmenu_Setter(mthis, __arg_0) native "Window_oncontextmenu_Setter";
  oncontextmenu_Setter_(mthis, __arg_0) => oncontextmenu_Setter(mthis, __arg_0);

  static oncuechange_Getter(mthis) native "Window_oncuechange_Getter";
  oncuechange_Getter_(mthis) => oncuechange_Getter(mthis);

  static oncuechange_Setter(mthis, __arg_0) native "Window_oncuechange_Setter";
  oncuechange_Setter_(mthis, __arg_0) => oncuechange_Setter(mthis, __arg_0);

  static ondblclick_Getter(mthis) native "Window_ondblclick_Getter";
  ondblclick_Getter_(mthis) => ondblclick_Getter(mthis);

  static ondblclick_Setter(mthis, __arg_0) native "Window_ondblclick_Setter";
  ondblclick_Setter_(mthis, __arg_0) => ondblclick_Setter(mthis, __arg_0);

  static ondevicelight_Getter(mthis) native "Window_ondevicelight_Getter";
  ondevicelight_Getter_(mthis) => ondevicelight_Getter(mthis);

  static ondevicelight_Setter(mthis, __arg_0) native "Window_ondevicelight_Setter";
  ondevicelight_Setter_(mthis, __arg_0) => ondevicelight_Setter(mthis, __arg_0);

  static ondevicemotion_Getter(mthis) native "Window_ondevicemotion_Getter";
  ondevicemotion_Getter_(mthis) => ondevicemotion_Getter(mthis);

  static ondevicemotion_Setter(mthis, __arg_0) native "Window_ondevicemotion_Setter";
  ondevicemotion_Setter_(mthis, __arg_0) => ondevicemotion_Setter(mthis, __arg_0);

  static ondeviceorientation_Getter(mthis) native "Window_ondeviceorientation_Getter";
  ondeviceorientation_Getter_(mthis) => ondeviceorientation_Getter(mthis);

  static ondeviceorientation_Setter(mthis, __arg_0) native "Window_ondeviceorientation_Setter";
  ondeviceorientation_Setter_(mthis, __arg_0) => ondeviceorientation_Setter(mthis, __arg_0);

  static ondrag_Getter(mthis) native "Window_ondrag_Getter";
  ondrag_Getter_(mthis) => ondrag_Getter(mthis);

  static ondrag_Setter(mthis, __arg_0) native "Window_ondrag_Setter";
  ondrag_Setter_(mthis, __arg_0) => ondrag_Setter(mthis, __arg_0);

  static ondragend_Getter(mthis) native "Window_ondragend_Getter";
  ondragend_Getter_(mthis) => ondragend_Getter(mthis);

  static ondragend_Setter(mthis, __arg_0) native "Window_ondragend_Setter";
  ondragend_Setter_(mthis, __arg_0) => ondragend_Setter(mthis, __arg_0);

  static ondragenter_Getter(mthis) native "Window_ondragenter_Getter";
  ondragenter_Getter_(mthis) => ondragenter_Getter(mthis);

  static ondragenter_Setter(mthis, __arg_0) native "Window_ondragenter_Setter";
  ondragenter_Setter_(mthis, __arg_0) => ondragenter_Setter(mthis, __arg_0);

  static ondragleave_Getter(mthis) native "Window_ondragleave_Getter";
  ondragleave_Getter_(mthis) => ondragleave_Getter(mthis);

  static ondragleave_Setter(mthis, __arg_0) native "Window_ondragleave_Setter";
  ondragleave_Setter_(mthis, __arg_0) => ondragleave_Setter(mthis, __arg_0);

  static ondragover_Getter(mthis) native "Window_ondragover_Getter";
  ondragover_Getter_(mthis) => ondragover_Getter(mthis);

  static ondragover_Setter(mthis, __arg_0) native "Window_ondragover_Setter";
  ondragover_Setter_(mthis, __arg_0) => ondragover_Setter(mthis, __arg_0);

  static ondragstart_Getter(mthis) native "Window_ondragstart_Getter";
  ondragstart_Getter_(mthis) => ondragstart_Getter(mthis);

  static ondragstart_Setter(mthis, __arg_0) native "Window_ondragstart_Setter";
  ondragstart_Setter_(mthis, __arg_0) => ondragstart_Setter(mthis, __arg_0);

  static ondrop_Getter(mthis) native "Window_ondrop_Getter";
  ondrop_Getter_(mthis) => ondrop_Getter(mthis);

  static ondrop_Setter(mthis, __arg_0) native "Window_ondrop_Setter";
  ondrop_Setter_(mthis, __arg_0) => ondrop_Setter(mthis, __arg_0);

  static ondurationchange_Getter(mthis) native "Window_ondurationchange_Getter";
  ondurationchange_Getter_(mthis) => ondurationchange_Getter(mthis);

  static ondurationchange_Setter(mthis, __arg_0) native "Window_ondurationchange_Setter";
  ondurationchange_Setter_(mthis, __arg_0) => ondurationchange_Setter(mthis, __arg_0);

  static onemptied_Getter(mthis) native "Window_onemptied_Getter";
  onemptied_Getter_(mthis) => onemptied_Getter(mthis);

  static onemptied_Setter(mthis, __arg_0) native "Window_onemptied_Setter";
  onemptied_Setter_(mthis, __arg_0) => onemptied_Setter(mthis, __arg_0);

  static onended_Getter(mthis) native "Window_onended_Getter";
  onended_Getter_(mthis) => onended_Getter(mthis);

  static onended_Setter(mthis, __arg_0) native "Window_onended_Setter";
  onended_Setter_(mthis, __arg_0) => onended_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "Window_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "Window_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onfocus_Getter(mthis) native "Window_onfocus_Getter";
  onfocus_Getter_(mthis) => onfocus_Getter(mthis);

  static onfocus_Setter(mthis, __arg_0) native "Window_onfocus_Setter";
  onfocus_Setter_(mthis, __arg_0) => onfocus_Setter(mthis, __arg_0);

  static onhashchange_Getter(mthis) native "Window_onhashchange_Getter";
  onhashchange_Getter_(mthis) => onhashchange_Getter(mthis);

  static onhashchange_Setter(mthis, __arg_0) native "Window_onhashchange_Setter";
  onhashchange_Setter_(mthis, __arg_0) => onhashchange_Setter(mthis, __arg_0);

  static oninput_Getter(mthis) native "Window_oninput_Getter";
  oninput_Getter_(mthis) => oninput_Getter(mthis);

  static oninput_Setter(mthis, __arg_0) native "Window_oninput_Setter";
  oninput_Setter_(mthis, __arg_0) => oninput_Setter(mthis, __arg_0);

  static oninvalid_Getter(mthis) native "Window_oninvalid_Getter";
  oninvalid_Getter_(mthis) => oninvalid_Getter(mthis);

  static oninvalid_Setter(mthis, __arg_0) native "Window_oninvalid_Setter";
  oninvalid_Setter_(mthis, __arg_0) => oninvalid_Setter(mthis, __arg_0);

  static onkeydown_Getter(mthis) native "Window_onkeydown_Getter";
  onkeydown_Getter_(mthis) => onkeydown_Getter(mthis);

  static onkeydown_Setter(mthis, __arg_0) native "Window_onkeydown_Setter";
  onkeydown_Setter_(mthis, __arg_0) => onkeydown_Setter(mthis, __arg_0);

  static onkeypress_Getter(mthis) native "Window_onkeypress_Getter";
  onkeypress_Getter_(mthis) => onkeypress_Getter(mthis);

  static onkeypress_Setter(mthis, __arg_0) native "Window_onkeypress_Setter";
  onkeypress_Setter_(mthis, __arg_0) => onkeypress_Setter(mthis, __arg_0);

  static onkeyup_Getter(mthis) native "Window_onkeyup_Getter";
  onkeyup_Getter_(mthis) => onkeyup_Getter(mthis);

  static onkeyup_Setter(mthis, __arg_0) native "Window_onkeyup_Setter";
  onkeyup_Setter_(mthis, __arg_0) => onkeyup_Setter(mthis, __arg_0);

  static onlanguagechange_Getter(mthis) native "Window_onlanguagechange_Getter";
  onlanguagechange_Getter_(mthis) => onlanguagechange_Getter(mthis);

  static onlanguagechange_Setter(mthis, __arg_0) native "Window_onlanguagechange_Setter";
  onlanguagechange_Setter_(mthis, __arg_0) => onlanguagechange_Setter(mthis, __arg_0);

  static onload_Getter(mthis) native "Window_onload_Getter";
  onload_Getter_(mthis) => onload_Getter(mthis);

  static onload_Setter(mthis, __arg_0) native "Window_onload_Setter";
  onload_Setter_(mthis, __arg_0) => onload_Setter(mthis, __arg_0);

  static onloadeddata_Getter(mthis) native "Window_onloadeddata_Getter";
  onloadeddata_Getter_(mthis) => onloadeddata_Getter(mthis);

  static onloadeddata_Setter(mthis, __arg_0) native "Window_onloadeddata_Setter";
  onloadeddata_Setter_(mthis, __arg_0) => onloadeddata_Setter(mthis, __arg_0);

  static onloadedmetadata_Getter(mthis) native "Window_onloadedmetadata_Getter";
  onloadedmetadata_Getter_(mthis) => onloadedmetadata_Getter(mthis);

  static onloadedmetadata_Setter(mthis, __arg_0) native "Window_onloadedmetadata_Setter";
  onloadedmetadata_Setter_(mthis, __arg_0) => onloadedmetadata_Setter(mthis, __arg_0);

  static onloadstart_Getter(mthis) native "Window_onloadstart_Getter";
  onloadstart_Getter_(mthis) => onloadstart_Getter(mthis);

  static onloadstart_Setter(mthis, __arg_0) native "Window_onloadstart_Setter";
  onloadstart_Setter_(mthis, __arg_0) => onloadstart_Setter(mthis, __arg_0);

  static onmessage_Getter(mthis) native "Window_onmessage_Getter";
  onmessage_Getter_(mthis) => onmessage_Getter(mthis);

  static onmessage_Setter(mthis, __arg_0) native "Window_onmessage_Setter";
  onmessage_Setter_(mthis, __arg_0) => onmessage_Setter(mthis, __arg_0);

  static onmousedown_Getter(mthis) native "Window_onmousedown_Getter";
  onmousedown_Getter_(mthis) => onmousedown_Getter(mthis);

  static onmousedown_Setter(mthis, __arg_0) native "Window_onmousedown_Setter";
  onmousedown_Setter_(mthis, __arg_0) => onmousedown_Setter(mthis, __arg_0);

  static onmouseenter_Getter(mthis) native "Window_onmouseenter_Getter";
  onmouseenter_Getter_(mthis) => onmouseenter_Getter(mthis);

  static onmouseenter_Setter(mthis, __arg_0) native "Window_onmouseenter_Setter";
  onmouseenter_Setter_(mthis, __arg_0) => onmouseenter_Setter(mthis, __arg_0);

  static onmouseleave_Getter(mthis) native "Window_onmouseleave_Getter";
  onmouseleave_Getter_(mthis) => onmouseleave_Getter(mthis);

  static onmouseleave_Setter(mthis, __arg_0) native "Window_onmouseleave_Setter";
  onmouseleave_Setter_(mthis, __arg_0) => onmouseleave_Setter(mthis, __arg_0);

  static onmousemove_Getter(mthis) native "Window_onmousemove_Getter";
  onmousemove_Getter_(mthis) => onmousemove_Getter(mthis);

  static onmousemove_Setter(mthis, __arg_0) native "Window_onmousemove_Setter";
  onmousemove_Setter_(mthis, __arg_0) => onmousemove_Setter(mthis, __arg_0);

  static onmouseout_Getter(mthis) native "Window_onmouseout_Getter";
  onmouseout_Getter_(mthis) => onmouseout_Getter(mthis);

  static onmouseout_Setter(mthis, __arg_0) native "Window_onmouseout_Setter";
  onmouseout_Setter_(mthis, __arg_0) => onmouseout_Setter(mthis, __arg_0);

  static onmouseover_Getter(mthis) native "Window_onmouseover_Getter";
  onmouseover_Getter_(mthis) => onmouseover_Getter(mthis);

  static onmouseover_Setter(mthis, __arg_0) native "Window_onmouseover_Setter";
  onmouseover_Setter_(mthis, __arg_0) => onmouseover_Setter(mthis, __arg_0);

  static onmouseup_Getter(mthis) native "Window_onmouseup_Getter";
  onmouseup_Getter_(mthis) => onmouseup_Getter(mthis);

  static onmouseup_Setter(mthis, __arg_0) native "Window_onmouseup_Setter";
  onmouseup_Setter_(mthis, __arg_0) => onmouseup_Setter(mthis, __arg_0);

  static onmousewheel_Getter(mthis) native "Window_onmousewheel_Getter";
  onmousewheel_Getter_(mthis) => onmousewheel_Getter(mthis);

  static onmousewheel_Setter(mthis, __arg_0) native "Window_onmousewheel_Setter";
  onmousewheel_Setter_(mthis, __arg_0) => onmousewheel_Setter(mthis, __arg_0);

  static onoffline_Getter(mthis) native "Window_onoffline_Getter";
  onoffline_Getter_(mthis) => onoffline_Getter(mthis);

  static onoffline_Setter(mthis, __arg_0) native "Window_onoffline_Setter";
  onoffline_Setter_(mthis, __arg_0) => onoffline_Setter(mthis, __arg_0);

  static ononline_Getter(mthis) native "Window_ononline_Getter";
  ononline_Getter_(mthis) => ononline_Getter(mthis);

  static ononline_Setter(mthis, __arg_0) native "Window_ononline_Setter";
  ononline_Setter_(mthis, __arg_0) => ononline_Setter(mthis, __arg_0);

  static onorientationchange_Getter(mthis) native "Window_onorientationchange_Getter";
  onorientationchange_Getter_(mthis) => onorientationchange_Getter(mthis);

  static onorientationchange_Setter(mthis, __arg_0) native "Window_onorientationchange_Setter";
  onorientationchange_Setter_(mthis, __arg_0) => onorientationchange_Setter(mthis, __arg_0);

  static onpagehide_Getter(mthis) native "Window_onpagehide_Getter";
  onpagehide_Getter_(mthis) => onpagehide_Getter(mthis);

  static onpagehide_Setter(mthis, __arg_0) native "Window_onpagehide_Setter";
  onpagehide_Setter_(mthis, __arg_0) => onpagehide_Setter(mthis, __arg_0);

  static onpageshow_Getter(mthis) native "Window_onpageshow_Getter";
  onpageshow_Getter_(mthis) => onpageshow_Getter(mthis);

  static onpageshow_Setter(mthis, __arg_0) native "Window_onpageshow_Setter";
  onpageshow_Setter_(mthis, __arg_0) => onpageshow_Setter(mthis, __arg_0);

  static onpause_Getter(mthis) native "Window_onpause_Getter";
  onpause_Getter_(mthis) => onpause_Getter(mthis);

  static onpause_Setter(mthis, __arg_0) native "Window_onpause_Setter";
  onpause_Setter_(mthis, __arg_0) => onpause_Setter(mthis, __arg_0);

  static onplay_Getter(mthis) native "Window_onplay_Getter";
  onplay_Getter_(mthis) => onplay_Getter(mthis);

  static onplay_Setter(mthis, __arg_0) native "Window_onplay_Setter";
  onplay_Setter_(mthis, __arg_0) => onplay_Setter(mthis, __arg_0);

  static onplaying_Getter(mthis) native "Window_onplaying_Getter";
  onplaying_Getter_(mthis) => onplaying_Getter(mthis);

  static onplaying_Setter(mthis, __arg_0) native "Window_onplaying_Setter";
  onplaying_Setter_(mthis, __arg_0) => onplaying_Setter(mthis, __arg_0);

  static onpopstate_Getter(mthis) native "Window_onpopstate_Getter";
  onpopstate_Getter_(mthis) => onpopstate_Getter(mthis);

  static onpopstate_Setter(mthis, __arg_0) native "Window_onpopstate_Setter";
  onpopstate_Setter_(mthis, __arg_0) => onpopstate_Setter(mthis, __arg_0);

  static onprogress_Getter(mthis) native "Window_onprogress_Getter";
  onprogress_Getter_(mthis) => onprogress_Getter(mthis);

  static onprogress_Setter(mthis, __arg_0) native "Window_onprogress_Setter";
  onprogress_Setter_(mthis, __arg_0) => onprogress_Setter(mthis, __arg_0);

  static onratechange_Getter(mthis) native "Window_onratechange_Getter";
  onratechange_Getter_(mthis) => onratechange_Getter(mthis);

  static onratechange_Setter(mthis, __arg_0) native "Window_onratechange_Setter";
  onratechange_Setter_(mthis, __arg_0) => onratechange_Setter(mthis, __arg_0);

  static onreset_Getter(mthis) native "Window_onreset_Getter";
  onreset_Getter_(mthis) => onreset_Getter(mthis);

  static onreset_Setter(mthis, __arg_0) native "Window_onreset_Setter";
  onreset_Setter_(mthis, __arg_0) => onreset_Setter(mthis, __arg_0);

  static onresize_Getter(mthis) native "Window_onresize_Getter";
  onresize_Getter_(mthis) => onresize_Getter(mthis);

  static onresize_Setter(mthis, __arg_0) native "Window_onresize_Setter";
  onresize_Setter_(mthis, __arg_0) => onresize_Setter(mthis, __arg_0);

  static onscroll_Getter(mthis) native "Window_onscroll_Getter";
  onscroll_Getter_(mthis) => onscroll_Getter(mthis);

  static onscroll_Setter(mthis, __arg_0) native "Window_onscroll_Setter";
  onscroll_Setter_(mthis, __arg_0) => onscroll_Setter(mthis, __arg_0);

  static onsearch_Getter(mthis) native "Window_onsearch_Getter";
  onsearch_Getter_(mthis) => onsearch_Getter(mthis);

  static onsearch_Setter(mthis, __arg_0) native "Window_onsearch_Setter";
  onsearch_Setter_(mthis, __arg_0) => onsearch_Setter(mthis, __arg_0);

  static onseeked_Getter(mthis) native "Window_onseeked_Getter";
  onseeked_Getter_(mthis) => onseeked_Getter(mthis);

  static onseeked_Setter(mthis, __arg_0) native "Window_onseeked_Setter";
  onseeked_Setter_(mthis, __arg_0) => onseeked_Setter(mthis, __arg_0);

  static onseeking_Getter(mthis) native "Window_onseeking_Getter";
  onseeking_Getter_(mthis) => onseeking_Getter(mthis);

  static onseeking_Setter(mthis, __arg_0) native "Window_onseeking_Setter";
  onseeking_Setter_(mthis, __arg_0) => onseeking_Setter(mthis, __arg_0);

  static onselect_Getter(mthis) native "Window_onselect_Getter";
  onselect_Getter_(mthis) => onselect_Getter(mthis);

  static onselect_Setter(mthis, __arg_0) native "Window_onselect_Setter";
  onselect_Setter_(mthis, __arg_0) => onselect_Setter(mthis, __arg_0);

  static onshow_Getter(mthis) native "Window_onshow_Getter";
  onshow_Getter_(mthis) => onshow_Getter(mthis);

  static onshow_Setter(mthis, __arg_0) native "Window_onshow_Setter";
  onshow_Setter_(mthis, __arg_0) => onshow_Setter(mthis, __arg_0);

  static onstalled_Getter(mthis) native "Window_onstalled_Getter";
  onstalled_Getter_(mthis) => onstalled_Getter(mthis);

  static onstalled_Setter(mthis, __arg_0) native "Window_onstalled_Setter";
  onstalled_Setter_(mthis, __arg_0) => onstalled_Setter(mthis, __arg_0);

  static onstorage_Getter(mthis) native "Window_onstorage_Getter";
  onstorage_Getter_(mthis) => onstorage_Getter(mthis);

  static onstorage_Setter(mthis, __arg_0) native "Window_onstorage_Setter";
  onstorage_Setter_(mthis, __arg_0) => onstorage_Setter(mthis, __arg_0);

  static onsubmit_Getter(mthis) native "Window_onsubmit_Getter";
  onsubmit_Getter_(mthis) => onsubmit_Getter(mthis);

  static onsubmit_Setter(mthis, __arg_0) native "Window_onsubmit_Setter";
  onsubmit_Setter_(mthis, __arg_0) => onsubmit_Setter(mthis, __arg_0);

  static onsuspend_Getter(mthis) native "Window_onsuspend_Getter";
  onsuspend_Getter_(mthis) => onsuspend_Getter(mthis);

  static onsuspend_Setter(mthis, __arg_0) native "Window_onsuspend_Setter";
  onsuspend_Setter_(mthis, __arg_0) => onsuspend_Setter(mthis, __arg_0);

  static ontimeupdate_Getter(mthis) native "Window_ontimeupdate_Getter";
  ontimeupdate_Getter_(mthis) => ontimeupdate_Getter(mthis);

  static ontimeupdate_Setter(mthis, __arg_0) native "Window_ontimeupdate_Setter";
  ontimeupdate_Setter_(mthis, __arg_0) => ontimeupdate_Setter(mthis, __arg_0);

  static ontoggle_Getter(mthis) native "Window_ontoggle_Getter";
  ontoggle_Getter_(mthis) => ontoggle_Getter(mthis);

  static ontoggle_Setter(mthis, __arg_0) native "Window_ontoggle_Setter";
  ontoggle_Setter_(mthis, __arg_0) => ontoggle_Setter(mthis, __arg_0);

  static ontouchcancel_Getter(mthis) native "Window_ontouchcancel_Getter";
  ontouchcancel_Getter_(mthis) => ontouchcancel_Getter(mthis);

  static ontouchcancel_Setter(mthis, __arg_0) native "Window_ontouchcancel_Setter";
  ontouchcancel_Setter_(mthis, __arg_0) => ontouchcancel_Setter(mthis, __arg_0);

  static ontouchend_Getter(mthis) native "Window_ontouchend_Getter";
  ontouchend_Getter_(mthis) => ontouchend_Getter(mthis);

  static ontouchend_Setter(mthis, __arg_0) native "Window_ontouchend_Setter";
  ontouchend_Setter_(mthis, __arg_0) => ontouchend_Setter(mthis, __arg_0);

  static ontouchmove_Getter(mthis) native "Window_ontouchmove_Getter";
  ontouchmove_Getter_(mthis) => ontouchmove_Getter(mthis);

  static ontouchmove_Setter(mthis, __arg_0) native "Window_ontouchmove_Setter";
  ontouchmove_Setter_(mthis, __arg_0) => ontouchmove_Setter(mthis, __arg_0);

  static ontouchstart_Getter(mthis) native "Window_ontouchstart_Getter";
  ontouchstart_Getter_(mthis) => ontouchstart_Getter(mthis);

  static ontouchstart_Setter(mthis, __arg_0) native "Window_ontouchstart_Setter";
  ontouchstart_Setter_(mthis, __arg_0) => ontouchstart_Setter(mthis, __arg_0);

  static ontransitionend_Getter(mthis) native "Window_ontransitionend_Getter";
  ontransitionend_Getter_(mthis) => ontransitionend_Getter(mthis);

  static ontransitionend_Setter(mthis, __arg_0) native "Window_ontransitionend_Setter";
  ontransitionend_Setter_(mthis, __arg_0) => ontransitionend_Setter(mthis, __arg_0);

  static onunload_Getter(mthis) native "Window_onunload_Getter";
  onunload_Getter_(mthis) => onunload_Getter(mthis);

  static onunload_Setter(mthis, __arg_0) native "Window_onunload_Setter";
  onunload_Setter_(mthis, __arg_0) => onunload_Setter(mthis, __arg_0);

  static onvolumechange_Getter(mthis) native "Window_onvolumechange_Getter";
  onvolumechange_Getter_(mthis) => onvolumechange_Getter(mthis);

  static onvolumechange_Setter(mthis, __arg_0) native "Window_onvolumechange_Setter";
  onvolumechange_Setter_(mthis, __arg_0) => onvolumechange_Setter(mthis, __arg_0);

  static onwaiting_Getter(mthis) native "Window_onwaiting_Getter";
  onwaiting_Getter_(mthis) => onwaiting_Getter(mthis);

  static onwaiting_Setter(mthis, __arg_0) native "Window_onwaiting_Setter";
  onwaiting_Setter_(mthis, __arg_0) => onwaiting_Setter(mthis, __arg_0);

  static onwebkitanimationend_Getter(mthis) native "Window_onwebkitanimationend_Getter";
  onwebkitanimationend_Getter_(mthis) => onwebkitanimationend_Getter(mthis);

  static onwebkitanimationend_Setter(mthis, __arg_0) native "Window_onwebkitanimationend_Setter";
  onwebkitanimationend_Setter_(mthis, __arg_0) => onwebkitanimationend_Setter(mthis, __arg_0);

  static onwebkitanimationiteration_Getter(mthis) native "Window_onwebkitanimationiteration_Getter";
  onwebkitanimationiteration_Getter_(mthis) => onwebkitanimationiteration_Getter(mthis);

  static onwebkitanimationiteration_Setter(mthis, __arg_0) native "Window_onwebkitanimationiteration_Setter";
  onwebkitanimationiteration_Setter_(mthis, __arg_0) => onwebkitanimationiteration_Setter(mthis, __arg_0);

  static onwebkitanimationstart_Getter(mthis) native "Window_onwebkitanimationstart_Getter";
  onwebkitanimationstart_Getter_(mthis) => onwebkitanimationstart_Getter(mthis);

  static onwebkitanimationstart_Setter(mthis, __arg_0) native "Window_onwebkitanimationstart_Setter";
  onwebkitanimationstart_Setter_(mthis, __arg_0) => onwebkitanimationstart_Setter(mthis, __arg_0);

  static onwebkittransitionend_Getter(mthis) native "Window_onwebkittransitionend_Getter";
  onwebkittransitionend_Getter_(mthis) => onwebkittransitionend_Getter(mthis);

  static onwebkittransitionend_Setter(mthis, __arg_0) native "Window_onwebkittransitionend_Setter";
  onwebkittransitionend_Setter_(mthis, __arg_0) => onwebkittransitionend_Setter(mthis, __arg_0);

  static onwheel_Getter(mthis) native "Window_onwheel_Getter";
  onwheel_Getter_(mthis) => onwheel_Getter(mthis);

  static onwheel_Setter(mthis, __arg_0) native "Window_onwheel_Setter";
  onwheel_Setter_(mthis, __arg_0) => onwheel_Setter(mthis, __arg_0);

  static openDatabase_Callback_2(mthis, __arg_0, __arg_1) native "Window_openDatabase_Callback";
  openDatabase_Callback_2_(mthis, __arg_0, __arg_1) => openDatabase_Callback_2(mthis, __arg_0, __arg_1);

  static openDatabase_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_openDatabase_Callback";
  openDatabase_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => openDatabase_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static openDatabase_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_openDatabase_Callback";
  openDatabase_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => openDatabase_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static openDatabase_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_openDatabase_Callback";
  openDatabase_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => openDatabase_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static openDatabase_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Window_openDatabase_Callback";
  openDatabase_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => openDatabase_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static openDatabase_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "Window_openDatabase_Callback";
  openDatabase_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => openDatabase_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static open_Callback_0(mthis) native "Window_open_Callback";
  open_Callback_0_(mthis) => open_Callback_0(mthis);

  static open_Callback_1(mthis, __arg_0) native "Window_open_Callback";
  open_Callback_1_(mthis, __arg_0) => open_Callback_1(mthis, __arg_0);

  static open_Callback_2(mthis, __arg_0, __arg_1) native "Window_open_Callback";
  open_Callback_2_(mthis, __arg_0, __arg_1) => open_Callback_2(mthis, __arg_0, __arg_1);

  static open_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_open_Callback";
  open_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => open_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static open_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_open_Callback";
  open_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => open_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static open_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_open_Callback";
  open_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => open_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static opener_Getter(mthis) native "Window_opener_Getter";
  opener_Getter_(mthis) => opener_Getter(mthis);

  static opener_Setter(mthis, __arg_0) native "Window_opener_Setter";
  opener_Setter_(mthis, __arg_0) => opener_Setter(mthis, __arg_0);

  static orientation_Getter(mthis) native "Window_orientation_Getter";
  orientation_Getter_(mthis) => orientation_Getter(mthis);

  static outerHeight_Getter(mthis) native "Window_outerHeight_Getter";
  outerHeight_Getter_(mthis) => outerHeight_Getter(mthis);

  static outerWidth_Getter(mthis) native "Window_outerWidth_Getter";
  outerWidth_Getter_(mthis) => outerWidth_Getter(mthis);

  static pageXOffset_Getter(mthis) native "Window_pageXOffset_Getter";
  pageXOffset_Getter_(mthis) => pageXOffset_Getter(mthis);

  static pageYOffset_Getter(mthis) native "Window_pageYOffset_Getter";
  pageYOffset_Getter_(mthis) => pageYOffset_Getter(mthis);

  static parent_Getter(mthis) native "Window_parent_Getter";
  parent_Getter_(mthis) => parent_Getter(mthis);

  static performance_Getter(mthis) native "Window_performance_Getter";
  performance_Getter_(mthis) => performance_Getter(mthis);

  static personalbar_Getter(mthis) native "Window_personalbar_Getter";
  personalbar_Getter_(mthis) => personalbar_Getter(mthis);

  static postMessage_Callback_0(mthis) native "Window_postMessage_Callback";
  postMessage_Callback_0_(mthis) => postMessage_Callback_0(mthis);

  static postMessage_Callback_1(mthis, __arg_0) native "Window_postMessage_Callback";
  postMessage_Callback_1_(mthis, __arg_0) => postMessage_Callback_1(mthis, __arg_0);

  static postMessage_Callback_2(mthis, __arg_0, __arg_1) native "Window_postMessage_Callback";
  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => postMessage_Callback_2(mthis, __arg_0, __arg_1);

  static postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_postMessage_Callback";
  postMessage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_postMessage_Callback";
  postMessage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static postMessage_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_postMessage_Callback";
  postMessage_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => postMessage_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static print_Callback_0(mthis) native "Window_print_Callback";
  print_Callback_0_(mthis) => print_Callback_0(mthis);

  static print_Callback_1(mthis, __arg_0) native "Window_print_Callback";
  print_Callback_1_(mthis, __arg_0) => print_Callback_1(mthis, __arg_0);

  static print_Callback_2(mthis, __arg_0, __arg_1) native "Window_print_Callback";
  print_Callback_2_(mthis, __arg_0, __arg_1) => print_Callback_2(mthis, __arg_0, __arg_1);

  static releaseEvents_Callback_0(mthis) native "Window_releaseEvents_Callback";
  releaseEvents_Callback_0_(mthis) => releaseEvents_Callback_0(mthis);

  static releaseEvents_Callback_1(mthis, __arg_0) native "Window_releaseEvents_Callback";
  releaseEvents_Callback_1_(mthis, __arg_0) => releaseEvents_Callback_1(mthis, __arg_0);

  static releaseEvents_Callback_2(mthis, __arg_0, __arg_1) native "Window_releaseEvents_Callback";
  releaseEvents_Callback_2_(mthis, __arg_0, __arg_1) => releaseEvents_Callback_2(mthis, __arg_0, __arg_1);

  static requestAnimationFrame_Callback_0(mthis) native "Window_requestAnimationFrame_Callback";
  requestAnimationFrame_Callback_0_(mthis) => requestAnimationFrame_Callback_0(mthis);

  static requestAnimationFrame_Callback_1(mthis, __arg_0) native "Window_requestAnimationFrame_Callback";
  requestAnimationFrame_Callback_1_(mthis, __arg_0) => requestAnimationFrame_Callback_1(mthis, __arg_0);

  static requestAnimationFrame_Callback_2(mthis, __arg_0, __arg_1) native "Window_requestAnimationFrame_Callback";
  requestAnimationFrame_Callback_2_(mthis, __arg_0, __arg_1) => requestAnimationFrame_Callback_2(mthis, __arg_0, __arg_1);

  static requestAnimationFrame_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_requestAnimationFrame_Callback";
  requestAnimationFrame_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => requestAnimationFrame_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static resizeBy_Callback_0(mthis) native "Window_resizeBy_Callback";
  resizeBy_Callback_0_(mthis) => resizeBy_Callback_0(mthis);

  static resizeBy_Callback_1(mthis, __arg_0) native "Window_resizeBy_Callback";
  resizeBy_Callback_1_(mthis, __arg_0) => resizeBy_Callback_1(mthis, __arg_0);

  static resizeBy_Callback_2(mthis, __arg_0, __arg_1) native "Window_resizeBy_Callback";
  resizeBy_Callback_2_(mthis, __arg_0, __arg_1) => resizeBy_Callback_2(mthis, __arg_0, __arg_1);

  static resizeBy_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_resizeBy_Callback";
  resizeBy_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => resizeBy_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static resizeBy_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_resizeBy_Callback";
  resizeBy_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => resizeBy_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static resizeTo_Callback_0(mthis) native "Window_resizeTo_Callback";
  resizeTo_Callback_0_(mthis) => resizeTo_Callback_0(mthis);

  static resizeTo_Callback_1(mthis, __arg_0) native "Window_resizeTo_Callback";
  resizeTo_Callback_1_(mthis, __arg_0) => resizeTo_Callback_1(mthis, __arg_0);

  static resizeTo_Callback_2(mthis, __arg_0, __arg_1) native "Window_resizeTo_Callback";
  resizeTo_Callback_2_(mthis, __arg_0, __arg_1) => resizeTo_Callback_2(mthis, __arg_0, __arg_1);

  static resizeTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_resizeTo_Callback";
  resizeTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => resizeTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static resizeTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_resizeTo_Callback";
  resizeTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => resizeTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static screenLeft_Getter(mthis) native "Window_screenLeft_Getter";
  screenLeft_Getter_(mthis) => screenLeft_Getter(mthis);

  static screenTop_Getter(mthis) native "Window_screenTop_Getter";
  screenTop_Getter_(mthis) => screenTop_Getter(mthis);

  static screenX_Getter(mthis) native "Window_screenX_Getter";
  screenX_Getter_(mthis) => screenX_Getter(mthis);

  static screenY_Getter(mthis) native "Window_screenY_Getter";
  screenY_Getter_(mthis) => screenY_Getter(mthis);

  static screen_Getter(mthis) native "Window_screen_Getter";
  screen_Getter_(mthis) => screen_Getter(mthis);

  static scrollBy_Callback_0(mthis) native "Window_scrollBy_Callback";
  scrollBy_Callback_0_(mthis) => scrollBy_Callback_0(mthis);

  static scrollBy_Callback_1(mthis, __arg_0) native "Window_scrollBy_Callback";
  scrollBy_Callback_1_(mthis, __arg_0) => scrollBy_Callback_1(mthis, __arg_0);

  static scrollBy_Callback_2(mthis, __arg_0, __arg_1) native "Window_scrollBy_Callback";
  scrollBy_Callback_2_(mthis, __arg_0, __arg_1) => scrollBy_Callback_2(mthis, __arg_0, __arg_1);

  static scrollBy_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_scrollBy_Callback";
  scrollBy_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scrollBy_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scrollBy_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_scrollBy_Callback";
  scrollBy_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scrollBy_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scrollBy_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_scrollBy_Callback";
  scrollBy_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scrollBy_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static scrollTo_Callback_0(mthis) native "Window_scrollTo_Callback";
  scrollTo_Callback_0_(mthis) => scrollTo_Callback_0(mthis);

  static scrollTo_Callback_1(mthis, __arg_0) native "Window_scrollTo_Callback";
  scrollTo_Callback_1_(mthis, __arg_0) => scrollTo_Callback_1(mthis, __arg_0);

  static scrollTo_Callback_2(mthis, __arg_0, __arg_1) native "Window_scrollTo_Callback";
  scrollTo_Callback_2_(mthis, __arg_0, __arg_1) => scrollTo_Callback_2(mthis, __arg_0, __arg_1);

  static scrollTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_scrollTo_Callback";
  scrollTo_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scrollTo_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scrollTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_scrollTo_Callback";
  scrollTo_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scrollTo_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scrollTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_scrollTo_Callback";
  scrollTo_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scrollTo_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static scrollX_Getter(mthis) native "Window_scrollX_Getter";
  scrollX_Getter_(mthis) => scrollX_Getter(mthis);

  static scrollY_Getter(mthis) native "Window_scrollY_Getter";
  scrollY_Getter_(mthis) => scrollY_Getter(mthis);

  static scroll_Callback_0(mthis) native "Window_scroll_Callback";
  scroll_Callback_0_(mthis) => scroll_Callback_0(mthis);

  static scroll_Callback_1(mthis, __arg_0) native "Window_scroll_Callback";
  scroll_Callback_1_(mthis, __arg_0) => scroll_Callback_1(mthis, __arg_0);

  static scroll_Callback_2(mthis, __arg_0, __arg_1) native "Window_scroll_Callback";
  scroll_Callback_2_(mthis, __arg_0, __arg_1) => scroll_Callback_2(mthis, __arg_0, __arg_1);

  static scroll_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_scroll_Callback";
  scroll_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => scroll_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static scroll_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_scroll_Callback";
  scroll_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => scroll_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static scroll_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_scroll_Callback";
  scroll_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => scroll_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static scrollbars_Getter(mthis) native "Window_scrollbars_Getter";
  scrollbars_Getter_(mthis) => scrollbars_Getter(mthis);

  static self_Getter(mthis) native "Window_self_Getter";
  self_Getter_(mthis) => self_Getter(mthis);

  static sessionStorage_Getter(mthis) native "Window_sessionStorage_Getter";
  sessionStorage_Getter_(mthis) => sessionStorage_Getter(mthis);

  static setInterval_Callback_0(mthis) native "Window_setInterval_Callback";
  setInterval_Callback_0_(mthis) => setInterval_Callback_0(mthis);

  static setInterval_Callback_1(mthis, __arg_0) native "Window_setInterval_Callback";
  setInterval_Callback_1_(mthis, __arg_0) => setInterval_Callback_1(mthis, __arg_0);

  static setInterval_Callback_2(mthis, __arg_0, __arg_1) native "Window_setInterval_Callback";
  setInterval_Callback_2_(mthis, __arg_0, __arg_1) => setInterval_Callback_2(mthis, __arg_0, __arg_1);

  static setInterval_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_setInterval_Callback";
  setInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setInterval_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setInterval_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_setInterval_Callback";
  setInterval_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setInterval_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setTimeout_Callback_0(mthis) native "Window_setTimeout_Callback";
  setTimeout_Callback_0_(mthis) => setTimeout_Callback_0(mthis);

  static setTimeout_Callback_1(mthis, __arg_0) native "Window_setTimeout_Callback";
  setTimeout_Callback_1_(mthis, __arg_0) => setTimeout_Callback_1(mthis, __arg_0);

  static setTimeout_Callback_2(mthis, __arg_0, __arg_1) native "Window_setTimeout_Callback";
  setTimeout_Callback_2_(mthis, __arg_0, __arg_1) => setTimeout_Callback_2(mthis, __arg_0, __arg_1);

  static setTimeout_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_setTimeout_Callback";
  setTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setTimeout_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setTimeout_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_setTimeout_Callback";
  setTimeout_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setTimeout_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static showModalDialog_Callback_0(mthis) native "Window_showModalDialog_Callback";
  showModalDialog_Callback_0_(mthis) => showModalDialog_Callback_0(mthis);

  static showModalDialog_Callback_1(mthis, __arg_0) native "Window_showModalDialog_Callback";
  showModalDialog_Callback_1_(mthis, __arg_0) => showModalDialog_Callback_1(mthis, __arg_0);

  static showModalDialog_Callback_2(mthis, __arg_0, __arg_1) native "Window_showModalDialog_Callback";
  showModalDialog_Callback_2_(mthis, __arg_0, __arg_1) => showModalDialog_Callback_2(mthis, __arg_0, __arg_1);

  static showModalDialog_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_showModalDialog_Callback";
  showModalDialog_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => showModalDialog_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static showModalDialog_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_showModalDialog_Callback";
  showModalDialog_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => showModalDialog_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static showModalDialog_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_showModalDialog_Callback";
  showModalDialog_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => showModalDialog_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static speechSynthesis_Getter(mthis) native "Window_speechSynthesis_Getter";
  speechSynthesis_Getter_(mthis) => speechSynthesis_Getter(mthis);

  static status_Getter(mthis) native "Window_status_Getter";
  status_Getter_(mthis) => status_Getter(mthis);

  static status_Setter(mthis, __arg_0) native "Window_status_Setter";
  status_Setter_(mthis, __arg_0) => status_Setter(mthis, __arg_0);

  static statusbar_Getter(mthis) native "Window_statusbar_Getter";
  statusbar_Getter_(mthis) => statusbar_Getter(mthis);

  static stop_Callback_0(mthis) native "Window_stop_Callback";
  stop_Callback_0_(mthis) => stop_Callback_0(mthis);

  static stop_Callback_1(mthis, __arg_0) native "Window_stop_Callback";
  stop_Callback_1_(mthis, __arg_0) => stop_Callback_1(mthis, __arg_0);

  static stop_Callback_2(mthis, __arg_0, __arg_1) native "Window_stop_Callback";
  stop_Callback_2_(mthis, __arg_0, __arg_1) => stop_Callback_2(mthis, __arg_0, __arg_1);

  static styleMedia_Getter(mthis) native "Window_styleMedia_Getter";
  styleMedia_Getter_(mthis) => styleMedia_Getter(mthis);

  static toolbar_Getter(mthis) native "Window_toolbar_Getter";
  toolbar_Getter_(mthis) => toolbar_Getter(mthis);

  static top_Getter(mthis) native "Window_top_Getter";
  top_Getter_(mthis) => top_Getter(mthis);

  static webkitRequestFileSystem_Callback_1(mthis, __arg_0) native "Window_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_1_(mthis, __arg_0) => webkitRequestFileSystem_Callback_1(mthis, __arg_0);

  static webkitRequestFileSystem_Callback_2(mthis, __arg_0, __arg_1) native "Window_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_2_(mthis, __arg_0, __arg_1) => webkitRequestFileSystem_Callback_2(mthis, __arg_0, __arg_1);

  static webkitRequestFileSystem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitRequestFileSystem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitRequestFileSystem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => webkitRequestFileSystem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitRequestFileSystem_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => webkitRequestFileSystem_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static webkitRequestFileSystem_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "Window_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => webkitRequestFileSystem_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static webkitResolveLocalFileSystemURL_Callback_0(mthis) native "Window_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_0_(mthis) => webkitResolveLocalFileSystemURL_Callback_0(mthis);

  static webkitResolveLocalFileSystemURL_Callback_1(mthis, __arg_0) native "Window_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_1_(mthis, __arg_0) => webkitResolveLocalFileSystemURL_Callback_1(mthis, __arg_0);

  static webkitResolveLocalFileSystemURL_Callback_2(mthis, __arg_0, __arg_1) native "Window_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_2_(mthis, __arg_0, __arg_1) => webkitResolveLocalFileSystemURL_Callback_2(mthis, __arg_0, __arg_1);

  static webkitResolveLocalFileSystemURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Window_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitResolveLocalFileSystemURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitResolveLocalFileSystemURL_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Window_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => webkitResolveLocalFileSystemURL_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitResolveLocalFileSystemURL_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "Window_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => webkitResolveLocalFileSystemURL_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static webkitStorageInfo_Getter(mthis) native "Window_webkitStorageInfo_Getter";
  webkitStorageInfo_Getter_(mthis) => webkitStorageInfo_Getter(mthis);

  static window_Getter(mthis) native "Window_window_Getter";
  window_Getter_(mthis) => window_Getter(mthis);

}

class BlinkWorker extends BlinkEventTarget {
  static final instance = new BlinkWorker();

  static constructorCallback_0() native "Worker_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "Worker_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "Worker_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "Worker_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static onerror_Getter(mthis) native "Worker_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "Worker_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onmessage_Getter(mthis) native "Worker_onmessage_Getter";
  onmessage_Getter_(mthis) => onmessage_Getter(mthis);

  static onmessage_Setter(mthis, __arg_0) native "Worker_onmessage_Setter";
  onmessage_Setter_(mthis, __arg_0) => onmessage_Setter(mthis, __arg_0);

  static postMessage_Callback_0(mthis) native "Worker_postMessage_Callback";
  postMessage_Callback_0_(mthis) => postMessage_Callback_0(mthis);

  static postMessage_Callback_1(mthis, __arg_0) native "Worker_postMessage_Callback";
  postMessage_Callback_1_(mthis, __arg_0) => postMessage_Callback_1(mthis, __arg_0);

  static postMessage_Callback_2(mthis, __arg_0, __arg_1) native "Worker_postMessage_Callback";
  postMessage_Callback_2_(mthis, __arg_0, __arg_1) => postMessage_Callback_2(mthis, __arg_0, __arg_1);

  static postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "Worker_postMessage_Callback";
  postMessage_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => postMessage_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "Worker_postMessage_Callback";
  postMessage_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => postMessage_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static terminate_Callback_0(mthis) native "Worker_terminate_Callback";
  terminate_Callback_0_(mthis) => terminate_Callback_0(mthis);

  static terminate_Callback_1(mthis, __arg_0) native "Worker_terminate_Callback";
  terminate_Callback_1_(mthis, __arg_0) => terminate_Callback_1(mthis, __arg_0);

  static terminate_Callback_2(mthis, __arg_0, __arg_1) native "Worker_terminate_Callback";
  terminate_Callback_2_(mthis, __arg_0, __arg_1) => terminate_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkWorkerConsole extends BlinkConsoleBase {
  static final instance = new BlinkWorkerConsole();

}

class BlinkWorkerGlobalScope extends BlinkEventTarget {
  static final instance = new BlinkWorkerGlobalScope();

  static atob_Callback_0(mthis) native "WorkerGlobalScope_atob_Callback";
  atob_Callback_0_(mthis) => atob_Callback_0(mthis);

  static atob_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_atob_Callback";
  atob_Callback_1_(mthis, __arg_0) => atob_Callback_1(mthis, __arg_0);

  static atob_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_atob_Callback";
  atob_Callback_2_(mthis, __arg_0, __arg_1) => atob_Callback_2(mthis, __arg_0, __arg_1);

  static atob_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_atob_Callback";
  atob_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => atob_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static btoa_Callback_0(mthis) native "WorkerGlobalScope_btoa_Callback";
  btoa_Callback_0_(mthis) => btoa_Callback_0(mthis);

  static btoa_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_btoa_Callback";
  btoa_Callback_1_(mthis, __arg_0) => btoa_Callback_1(mthis, __arg_0);

  static btoa_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_btoa_Callback";
  btoa_Callback_2_(mthis, __arg_0, __arg_1) => btoa_Callback_2(mthis, __arg_0, __arg_1);

  static btoa_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_btoa_Callback";
  btoa_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => btoa_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clearInterval_Callback_0(mthis) native "WorkerGlobalScope_clearInterval_Callback";
  clearInterval_Callback_0_(mthis) => clearInterval_Callback_0(mthis);

  static clearInterval_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_clearInterval_Callback";
  clearInterval_Callback_1_(mthis, __arg_0) => clearInterval_Callback_1(mthis, __arg_0);

  static clearInterval_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_clearInterval_Callback";
  clearInterval_Callback_2_(mthis, __arg_0, __arg_1) => clearInterval_Callback_2(mthis, __arg_0, __arg_1);

  static clearInterval_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_clearInterval_Callback";
  clearInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearInterval_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static clearTimeout_Callback_0(mthis) native "WorkerGlobalScope_clearTimeout_Callback";
  clearTimeout_Callback_0_(mthis) => clearTimeout_Callback_0(mthis);

  static clearTimeout_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_clearTimeout_Callback";
  clearTimeout_Callback_1_(mthis, __arg_0) => clearTimeout_Callback_1(mthis, __arg_0);

  static clearTimeout_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_clearTimeout_Callback";
  clearTimeout_Callback_2_(mthis, __arg_0, __arg_1) => clearTimeout_Callback_2(mthis, __arg_0, __arg_1);

  static clearTimeout_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_clearTimeout_Callback";
  clearTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => clearTimeout_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static close_Callback_0(mthis) native "WorkerGlobalScope_close_Callback";
  close_Callback_0_(mthis) => close_Callback_0(mthis);

  static close_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_close_Callback";
  close_Callback_1_(mthis, __arg_0) => close_Callback_1(mthis, __arg_0);

  static close_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_close_Callback";
  close_Callback_2_(mthis, __arg_0, __arg_1) => close_Callback_2(mthis, __arg_0, __arg_1);

  static console_Getter(mthis) native "WorkerGlobalScope_console_Getter";
  console_Getter_(mthis) => console_Getter(mthis);

  static createImageBitmap_Callback_0(mthis) native "WorkerGlobalScope_createImageBitmap_Callback";
  createImageBitmap_Callback_0_(mthis) => createImageBitmap_Callback_0(mthis);

  static createImageBitmap_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_createImageBitmap_Callback";
  createImageBitmap_Callback_1_(mthis, __arg_0) => createImageBitmap_Callback_1(mthis, __arg_0);

  static createImageBitmap_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_createImageBitmap_Callback";
  createImageBitmap_Callback_2_(mthis, __arg_0, __arg_1) => createImageBitmap_Callback_2(mthis, __arg_0, __arg_1);

  static createImageBitmap_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_createImageBitmap_Callback";
  createImageBitmap_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createImageBitmap_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createImageBitmap_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WorkerGlobalScope_createImageBitmap_Callback";
  createImageBitmap_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createImageBitmap_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createImageBitmap_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WorkerGlobalScope_createImageBitmap_Callback";
  createImageBitmap_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => createImageBitmap_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static createImageBitmap_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WorkerGlobalScope_createImageBitmap_Callback";
  createImageBitmap_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => createImageBitmap_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static createImageBitmap_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "WorkerGlobalScope_createImageBitmap_Callback";
  createImageBitmap_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => createImageBitmap_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static crypto_Getter(mthis) native "WorkerGlobalScope_crypto_Getter";
  crypto_Getter_(mthis) => crypto_Getter(mthis);

  static importScripts_Callback_0(mthis) native "WorkerGlobalScope_importScripts_Callback";
  importScripts_Callback_0_(mthis) => importScripts_Callback_0(mthis);

  static importScripts_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_importScripts_Callback";
  importScripts_Callback_1_(mthis, __arg_0) => importScripts_Callback_1(mthis, __arg_0);

  static importScripts_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_importScripts_Callback";
  importScripts_Callback_2_(mthis, __arg_0, __arg_1) => importScripts_Callback_2(mthis, __arg_0, __arg_1);

  static importScripts_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_importScripts_Callback";
  importScripts_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => importScripts_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static indexedDB_Getter(mthis) native "WorkerGlobalScope_indexedDB_Getter";
  indexedDB_Getter_(mthis) => indexedDB_Getter(mthis);

  static location_Getter(mthis) native "WorkerGlobalScope_location_Getter";
  location_Getter_(mthis) => location_Getter(mthis);

  static navigator_Getter(mthis) native "WorkerGlobalScope_navigator_Getter";
  navigator_Getter_(mthis) => navigator_Getter(mthis);

  static onerror_Getter(mthis) native "WorkerGlobalScope_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "WorkerGlobalScope_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static performance_Getter(mthis) native "WorkerGlobalScope_performance_Getter";
  performance_Getter_(mthis) => performance_Getter(mthis);

  static self_Getter(mthis) native "WorkerGlobalScope_self_Getter";
  self_Getter_(mthis) => self_Getter(mthis);

  static setInterval_Callback_0(mthis) native "WorkerGlobalScope_setInterval_Callback";
  setInterval_Callback_0_(mthis) => setInterval_Callback_0(mthis);

  static setInterval_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_setInterval_Callback";
  setInterval_Callback_1_(mthis, __arg_0) => setInterval_Callback_1(mthis, __arg_0);

  static setInterval_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_setInterval_Callback";
  setInterval_Callback_2_(mthis, __arg_0, __arg_1) => setInterval_Callback_2(mthis, __arg_0, __arg_1);

  static setInterval_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_setInterval_Callback";
  setInterval_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setInterval_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setInterval_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WorkerGlobalScope_setInterval_Callback";
  setInterval_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setInterval_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setTimeout_Callback_0(mthis) native "WorkerGlobalScope_setTimeout_Callback";
  setTimeout_Callback_0_(mthis) => setTimeout_Callback_0(mthis);

  static setTimeout_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_setTimeout_Callback";
  setTimeout_Callback_1_(mthis, __arg_0) => setTimeout_Callback_1(mthis, __arg_0);

  static setTimeout_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_setTimeout_Callback";
  setTimeout_Callback_2_(mthis, __arg_0, __arg_1) => setTimeout_Callback_2(mthis, __arg_0, __arg_1);

  static setTimeout_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_setTimeout_Callback";
  setTimeout_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setTimeout_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setTimeout_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WorkerGlobalScope_setTimeout_Callback";
  setTimeout_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setTimeout_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitRequestFileSystemSync_Callback_0(mthis) native "WorkerGlobalScope_webkitRequestFileSystemSync_Callback";
  webkitRequestFileSystemSync_Callback_0_(mthis) => webkitRequestFileSystemSync_Callback_0(mthis);

  static webkitRequestFileSystemSync_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_webkitRequestFileSystemSync_Callback";
  webkitRequestFileSystemSync_Callback_1_(mthis, __arg_0) => webkitRequestFileSystemSync_Callback_1(mthis, __arg_0);

  static webkitRequestFileSystemSync_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_webkitRequestFileSystemSync_Callback";
  webkitRequestFileSystemSync_Callback_2_(mthis, __arg_0, __arg_1) => webkitRequestFileSystemSync_Callback_2(mthis, __arg_0, __arg_1);

  static webkitRequestFileSystemSync_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_webkitRequestFileSystemSync_Callback";
  webkitRequestFileSystemSync_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitRequestFileSystemSync_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitRequestFileSystemSync_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WorkerGlobalScope_webkitRequestFileSystemSync_Callback";
  webkitRequestFileSystemSync_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => webkitRequestFileSystemSync_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitRequestFileSystem_Callback_0(mthis) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_0_(mthis) => webkitRequestFileSystem_Callback_0(mthis);

  static webkitRequestFileSystem_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_1_(mthis, __arg_0) => webkitRequestFileSystem_Callback_1(mthis, __arg_0);

  static webkitRequestFileSystem_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_2_(mthis, __arg_0, __arg_1) => webkitRequestFileSystem_Callback_2(mthis, __arg_0, __arg_1);

  static webkitRequestFileSystem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitRequestFileSystem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitRequestFileSystem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => webkitRequestFileSystem_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitRequestFileSystem_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => webkitRequestFileSystem_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static webkitRequestFileSystem_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "WorkerGlobalScope_webkitRequestFileSystem_Callback";
  webkitRequestFileSystem_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => webkitRequestFileSystem_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static webkitResolveLocalFileSystemSyncURL_Callback_0(mthis) native "WorkerGlobalScope_webkitResolveLocalFileSystemSyncURL_Callback";
  webkitResolveLocalFileSystemSyncURL_Callback_0_(mthis) => webkitResolveLocalFileSystemSyncURL_Callback_0(mthis);

  static webkitResolveLocalFileSystemSyncURL_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_webkitResolveLocalFileSystemSyncURL_Callback";
  webkitResolveLocalFileSystemSyncURL_Callback_1_(mthis, __arg_0) => webkitResolveLocalFileSystemSyncURL_Callback_1(mthis, __arg_0);

  static webkitResolveLocalFileSystemSyncURL_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_webkitResolveLocalFileSystemSyncURL_Callback";
  webkitResolveLocalFileSystemSyncURL_Callback_2_(mthis, __arg_0, __arg_1) => webkitResolveLocalFileSystemSyncURL_Callback_2(mthis, __arg_0, __arg_1);

  static webkitResolveLocalFileSystemSyncURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_webkitResolveLocalFileSystemSyncURL_Callback";
  webkitResolveLocalFileSystemSyncURL_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitResolveLocalFileSystemSyncURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitResolveLocalFileSystemURL_Callback_0(mthis) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_0_(mthis) => webkitResolveLocalFileSystemURL_Callback_0(mthis);

  static webkitResolveLocalFileSystemURL_Callback_1(mthis, __arg_0) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_1_(mthis, __arg_0) => webkitResolveLocalFileSystemURL_Callback_1(mthis, __arg_0);

  static webkitResolveLocalFileSystemURL_Callback_2(mthis, __arg_0, __arg_1) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_2_(mthis, __arg_0, __arg_1) => webkitResolveLocalFileSystemURL_Callback_2(mthis, __arg_0, __arg_1);

  static webkitResolveLocalFileSystemURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => webkitResolveLocalFileSystemURL_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static webkitResolveLocalFileSystemURL_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => webkitResolveLocalFileSystemURL_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static webkitResolveLocalFileSystemURL_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "WorkerGlobalScope_webkitResolveLocalFileSystemURL_Callback";
  webkitResolveLocalFileSystemURL_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => webkitResolveLocalFileSystemURL_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkWorkerLocation {
  static final instance = new BlinkWorkerLocation();

  static hash_Getter(mthis) native "WorkerLocation_hash_Getter";
  hash_Getter_(mthis) => hash_Getter(mthis);

  static host_Getter(mthis) native "WorkerLocation_host_Getter";
  host_Getter_(mthis) => host_Getter(mthis);

  static hostname_Getter(mthis) native "WorkerLocation_hostname_Getter";
  hostname_Getter_(mthis) => hostname_Getter(mthis);

  static href_Getter(mthis) native "WorkerLocation_href_Getter";
  href_Getter_(mthis) => href_Getter(mthis);

  static origin_Getter(mthis) native "WorkerLocation_origin_Getter";
  origin_Getter_(mthis) => origin_Getter(mthis);

  static pathname_Getter(mthis) native "WorkerLocation_pathname_Getter";
  pathname_Getter_(mthis) => pathname_Getter(mthis);

  static port_Getter(mthis) native "WorkerLocation_port_Getter";
  port_Getter_(mthis) => port_Getter(mthis);

  static protocol_Getter(mthis) native "WorkerLocation_protocol_Getter";
  protocol_Getter_(mthis) => protocol_Getter(mthis);

  static search_Getter(mthis) native "WorkerLocation_search_Getter";
  search_Getter_(mthis) => search_Getter(mthis);

  static toString_Callback_0(mthis) native "WorkerLocation_toString_Callback";
  toString_Callback_0_(mthis) => toString_Callback_0(mthis);

  static toString_Callback_1(mthis, __arg_0) native "WorkerLocation_toString_Callback";
  toString_Callback_1_(mthis, __arg_0) => toString_Callback_1(mthis, __arg_0);

  static toString_Callback_2(mthis, __arg_0, __arg_1) native "WorkerLocation_toString_Callback";
  toString_Callback_2_(mthis, __arg_0, __arg_1) => toString_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkWorkerNavigator {
  static final instance = new BlinkWorkerNavigator();

  static appCodeName_Getter(mthis) native "WorkerNavigator_appCodeName_Getter";
  appCodeName_Getter_(mthis) => appCodeName_Getter(mthis);

  static appName_Getter(mthis) native "WorkerNavigator_appName_Getter";
  appName_Getter_(mthis) => appName_Getter(mthis);

  static appVersion_Getter(mthis) native "WorkerNavigator_appVersion_Getter";
  appVersion_Getter_(mthis) => appVersion_Getter(mthis);

  static connection_Getter(mthis) native "WorkerNavigator_connection_Getter";
  connection_Getter_(mthis) => connection_Getter(mthis);

  static dartEnabled_Getter(mthis) native "WorkerNavigator_dartEnabled_Getter";
  dartEnabled_Getter_(mthis) => dartEnabled_Getter(mthis);

  static geofencing_Getter(mthis) native "WorkerNavigator_geofencing_Getter";
  geofencing_Getter_(mthis) => geofencing_Getter(mthis);

  static hardwareConcurrency_Getter(mthis) native "WorkerNavigator_hardwareConcurrency_Getter";
  hardwareConcurrency_Getter_(mthis) => hardwareConcurrency_Getter(mthis);

  static onLine_Getter(mthis) native "WorkerNavigator_onLine_Getter";
  onLine_Getter_(mthis) => onLine_Getter(mthis);

  static platform_Getter(mthis) native "WorkerNavigator_platform_Getter";
  platform_Getter_(mthis) => platform_Getter(mthis);

  static product_Getter(mthis) native "WorkerNavigator_product_Getter";
  product_Getter_(mthis) => product_Getter(mthis);

  static userAgent_Getter(mthis) native "WorkerNavigator_userAgent_Getter";
  userAgent_Getter_(mthis) => userAgent_Getter(mthis);

  static webkitPersistentStorage_Getter(mthis) native "WorkerNavigator_webkitPersistentStorage_Getter";
  webkitPersistentStorage_Getter_(mthis) => webkitPersistentStorage_Getter(mthis);

  static webkitTemporaryStorage_Getter(mthis) native "WorkerNavigator_webkitTemporaryStorage_Getter";
  webkitTemporaryStorage_Getter_(mthis) => webkitTemporaryStorage_Getter(mthis);

}

class BlinkWorkerPerformance {
  static final instance = new BlinkWorkerPerformance();

  static memory_Getter(mthis) native "WorkerPerformance_memory_Getter";
  memory_Getter_(mthis) => memory_Getter(mthis);

  static now_Callback_0(mthis) native "WorkerPerformance_now_Callback";
  now_Callback_0_(mthis) => now_Callback_0(mthis);

  static now_Callback_1(mthis, __arg_0) native "WorkerPerformance_now_Callback";
  now_Callback_1_(mthis, __arg_0) => now_Callback_1(mthis, __arg_0);

  static now_Callback_2(mthis, __arg_0, __arg_1) native "WorkerPerformance_now_Callback";
  now_Callback_2_(mthis, __arg_0, __arg_1) => now_Callback_2(mthis, __arg_0, __arg_1);

}

class BlinkXMLDocument extends BlinkDocument {
  static final instance = new BlinkXMLDocument();

}

class BlinkXMLHttpRequest extends BlinkXMLHttpRequestEventTarget {
  static final instance = new BlinkXMLHttpRequest();

  static abort_Callback_0(mthis) native "XMLHttpRequest_abort_Callback";
  abort_Callback_0_(mthis) => abort_Callback_0(mthis);

  static abort_Callback_1(mthis, __arg_0) native "XMLHttpRequest_abort_Callback";
  abort_Callback_1_(mthis, __arg_0) => abort_Callback_1(mthis, __arg_0);

  static abort_Callback_2(mthis, __arg_0, __arg_1) native "XMLHttpRequest_abort_Callback";
  abort_Callback_2_(mthis, __arg_0, __arg_1) => abort_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "XMLHttpRequest_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "XMLHttpRequest_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "XMLHttpRequest_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static constructorCallback_3(__arg_0, __arg_1, __arg_2) native "XMLHttpRequest_constructorCallback";
  constructorCallback_3_(__arg_0, __arg_1, __arg_2) => constructorCallback_3(__arg_0, __arg_1, __arg_2);

  static getAllResponseHeaders_Callback_0(mthis) native "XMLHttpRequest_getAllResponseHeaders_Callback";
  getAllResponseHeaders_Callback_0_(mthis) => getAllResponseHeaders_Callback_0(mthis);

  static getAllResponseHeaders_Callback_1(mthis, __arg_0) native "XMLHttpRequest_getAllResponseHeaders_Callback";
  getAllResponseHeaders_Callback_1_(mthis, __arg_0) => getAllResponseHeaders_Callback_1(mthis, __arg_0);

  static getAllResponseHeaders_Callback_2(mthis, __arg_0, __arg_1) native "XMLHttpRequest_getAllResponseHeaders_Callback";
  getAllResponseHeaders_Callback_2_(mthis, __arg_0, __arg_1) => getAllResponseHeaders_Callback_2(mthis, __arg_0, __arg_1);

  static getResponseHeader_Callback_0(mthis) native "XMLHttpRequest_getResponseHeader_Callback";
  getResponseHeader_Callback_0_(mthis) => getResponseHeader_Callback_0(mthis);

  static getResponseHeader_Callback_1(mthis, __arg_0) native "XMLHttpRequest_getResponseHeader_Callback";
  getResponseHeader_Callback_1_(mthis, __arg_0) => getResponseHeader_Callback_1(mthis, __arg_0);

  static getResponseHeader_Callback_2(mthis, __arg_0, __arg_1) native "XMLHttpRequest_getResponseHeader_Callback";
  getResponseHeader_Callback_2_(mthis, __arg_0, __arg_1) => getResponseHeader_Callback_2(mthis, __arg_0, __arg_1);

  static getResponseHeader_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XMLHttpRequest_getResponseHeader_Callback";
  getResponseHeader_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getResponseHeader_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static onreadystatechange_Getter(mthis) native "XMLHttpRequest_onreadystatechange_Getter";
  onreadystatechange_Getter_(mthis) => onreadystatechange_Getter(mthis);

  static onreadystatechange_Setter(mthis, __arg_0) native "XMLHttpRequest_onreadystatechange_Setter";
  onreadystatechange_Setter_(mthis, __arg_0) => onreadystatechange_Setter(mthis, __arg_0);

  static open_Callback_0(mthis) native "XMLHttpRequest_open_Callback";
  open_Callback_0_(mthis) => open_Callback_0(mthis);

  static open_Callback_1(mthis, __arg_0) native "XMLHttpRequest_open_Callback";
  open_Callback_1_(mthis, __arg_0) => open_Callback_1(mthis, __arg_0);

  static open_Callback_2(mthis, __arg_0, __arg_1) native "XMLHttpRequest_open_Callback";
  open_Callback_2_(mthis, __arg_0, __arg_1) => open_Callback_2(mthis, __arg_0, __arg_1);

  static open_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XMLHttpRequest_open_Callback";
  open_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => open_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static open_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "XMLHttpRequest_open_Callback";
  open_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => open_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static open_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "XMLHttpRequest_open_Callback";
  open_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => open_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static open_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "XMLHttpRequest_open_Callback";
  open_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => open_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static open_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "XMLHttpRequest_open_Callback";
  open_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => open_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

  static overrideMimeType_Callback_0(mthis) native "XMLHttpRequest_overrideMimeType_Callback";
  overrideMimeType_Callback_0_(mthis) => overrideMimeType_Callback_0(mthis);

  static overrideMimeType_Callback_1(mthis, __arg_0) native "XMLHttpRequest_overrideMimeType_Callback";
  overrideMimeType_Callback_1_(mthis, __arg_0) => overrideMimeType_Callback_1(mthis, __arg_0);

  static overrideMimeType_Callback_2(mthis, __arg_0, __arg_1) native "XMLHttpRequest_overrideMimeType_Callback";
  overrideMimeType_Callback_2_(mthis, __arg_0, __arg_1) => overrideMimeType_Callback_2(mthis, __arg_0, __arg_1);

  static overrideMimeType_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XMLHttpRequest_overrideMimeType_Callback";
  overrideMimeType_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => overrideMimeType_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static readyState_Getter(mthis) native "XMLHttpRequest_readyState_Getter";
  readyState_Getter_(mthis) => readyState_Getter(mthis);

  static responseText_Getter(mthis) native "XMLHttpRequest_responseText_Getter";
  responseText_Getter_(mthis) => responseText_Getter(mthis);

  static responseType_Getter(mthis) native "XMLHttpRequest_responseType_Getter";
  responseType_Getter_(mthis) => responseType_Getter(mthis);

  static responseType_Setter(mthis, __arg_0) native "XMLHttpRequest_responseType_Setter";
  responseType_Setter_(mthis, __arg_0) => responseType_Setter(mthis, __arg_0);

  static responseURL_Getter(mthis) native "XMLHttpRequest_responseURL_Getter";
  responseURL_Getter_(mthis) => responseURL_Getter(mthis);

  static responseXML_Getter(mthis) native "XMLHttpRequest_responseXML_Getter";
  responseXML_Getter_(mthis) => responseXML_Getter(mthis);

  static response_Getter(mthis) native "XMLHttpRequest_response_Getter";
  response_Getter_(mthis) => response_Getter(mthis);

  static send_Callback_0(mthis) native "XMLHttpRequest_send_Callback";
  send_Callback_0_(mthis) => send_Callback_0(mthis);

  static send_Callback_1(mthis, __arg_0) native "XMLHttpRequest_send_Callback";
  send_Callback_1_(mthis, __arg_0) => send_Callback_1(mthis, __arg_0);

  static send_Callback_2(mthis, __arg_0, __arg_1) native "XMLHttpRequest_send_Callback";
  send_Callback_2_(mthis, __arg_0, __arg_1) => send_Callback_2(mthis, __arg_0, __arg_1);

  static send_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XMLHttpRequest_send_Callback";
  send_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => send_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setRequestHeader_Callback_0(mthis) native "XMLHttpRequest_setRequestHeader_Callback";
  setRequestHeader_Callback_0_(mthis) => setRequestHeader_Callback_0(mthis);

  static setRequestHeader_Callback_1(mthis, __arg_0) native "XMLHttpRequest_setRequestHeader_Callback";
  setRequestHeader_Callback_1_(mthis, __arg_0) => setRequestHeader_Callback_1(mthis, __arg_0);

  static setRequestHeader_Callback_2(mthis, __arg_0, __arg_1) native "XMLHttpRequest_setRequestHeader_Callback";
  setRequestHeader_Callback_2_(mthis, __arg_0, __arg_1) => setRequestHeader_Callback_2(mthis, __arg_0, __arg_1);

  static setRequestHeader_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XMLHttpRequest_setRequestHeader_Callback";
  setRequestHeader_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setRequestHeader_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setRequestHeader_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "XMLHttpRequest_setRequestHeader_Callback";
  setRequestHeader_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setRequestHeader_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static statusText_Getter(mthis) native "XMLHttpRequest_statusText_Getter";
  statusText_Getter_(mthis) => statusText_Getter(mthis);

  static status_Getter(mthis) native "XMLHttpRequest_status_Getter";
  status_Getter_(mthis) => status_Getter(mthis);

  static timeout_Getter(mthis) native "XMLHttpRequest_timeout_Getter";
  timeout_Getter_(mthis) => timeout_Getter(mthis);

  static timeout_Setter(mthis, __arg_0) native "XMLHttpRequest_timeout_Setter";
  timeout_Setter_(mthis, __arg_0) => timeout_Setter(mthis, __arg_0);

  static upload_Getter(mthis) native "XMLHttpRequest_upload_Getter";
  upload_Getter_(mthis) => upload_Getter(mthis);

  static withCredentials_Getter(mthis) native "XMLHttpRequest_withCredentials_Getter";
  withCredentials_Getter_(mthis) => withCredentials_Getter(mthis);

  static withCredentials_Setter(mthis, __arg_0) native "XMLHttpRequest_withCredentials_Setter";
  withCredentials_Setter_(mthis, __arg_0) => withCredentials_Setter(mthis, __arg_0);

}

class BlinkXMLHttpRequestEventTarget extends BlinkEventTarget {
  static final instance = new BlinkXMLHttpRequestEventTarget();

  static onabort_Getter(mthis) native "XMLHttpRequestEventTarget_onabort_Getter";
  onabort_Getter_(mthis) => onabort_Getter(mthis);

  static onabort_Setter(mthis, __arg_0) native "XMLHttpRequestEventTarget_onabort_Setter";
  onabort_Setter_(mthis, __arg_0) => onabort_Setter(mthis, __arg_0);

  static onerror_Getter(mthis) native "XMLHttpRequestEventTarget_onerror_Getter";
  onerror_Getter_(mthis) => onerror_Getter(mthis);

  static onerror_Setter(mthis, __arg_0) native "XMLHttpRequestEventTarget_onerror_Setter";
  onerror_Setter_(mthis, __arg_0) => onerror_Setter(mthis, __arg_0);

  static onload_Getter(mthis) native "XMLHttpRequestEventTarget_onload_Getter";
  onload_Getter_(mthis) => onload_Getter(mthis);

  static onload_Setter(mthis, __arg_0) native "XMLHttpRequestEventTarget_onload_Setter";
  onload_Setter_(mthis, __arg_0) => onload_Setter(mthis, __arg_0);

  static onloadend_Getter(mthis) native "XMLHttpRequestEventTarget_onloadend_Getter";
  onloadend_Getter_(mthis) => onloadend_Getter(mthis);

  static onloadend_Setter(mthis, __arg_0) native "XMLHttpRequestEventTarget_onloadend_Setter";
  onloadend_Setter_(mthis, __arg_0) => onloadend_Setter(mthis, __arg_0);

  static onloadstart_Getter(mthis) native "XMLHttpRequestEventTarget_onloadstart_Getter";
  onloadstart_Getter_(mthis) => onloadstart_Getter(mthis);

  static onloadstart_Setter(mthis, __arg_0) native "XMLHttpRequestEventTarget_onloadstart_Setter";
  onloadstart_Setter_(mthis, __arg_0) => onloadstart_Setter(mthis, __arg_0);

  static onprogress_Getter(mthis) native "XMLHttpRequestEventTarget_onprogress_Getter";
  onprogress_Getter_(mthis) => onprogress_Getter(mthis);

  static onprogress_Setter(mthis, __arg_0) native "XMLHttpRequestEventTarget_onprogress_Setter";
  onprogress_Setter_(mthis, __arg_0) => onprogress_Setter(mthis, __arg_0);

  static ontimeout_Getter(mthis) native "XMLHttpRequestEventTarget_ontimeout_Getter";
  ontimeout_Getter_(mthis) => ontimeout_Getter(mthis);

  static ontimeout_Setter(mthis, __arg_0) native "XMLHttpRequestEventTarget_ontimeout_Setter";
  ontimeout_Setter_(mthis, __arg_0) => ontimeout_Setter(mthis, __arg_0);

}

class BlinkXMLHttpRequestProgressEvent extends BlinkProgressEvent {
  static final instance = new BlinkXMLHttpRequestProgressEvent();

  static position_Getter(mthis) native "XMLHttpRequestProgressEvent_position_Getter";
  position_Getter_(mthis) => position_Getter(mthis);

  static totalSize_Getter(mthis) native "XMLHttpRequestProgressEvent_totalSize_Getter";
  totalSize_Getter_(mthis) => totalSize_Getter(mthis);

}

class BlinkXMLHttpRequestUpload extends BlinkXMLHttpRequestEventTarget {
  static final instance = new BlinkXMLHttpRequestUpload();

}

class BlinkXMLSerializer {
  static final instance = new BlinkXMLSerializer();

  static constructorCallback_0() native "XMLSerializer_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "XMLSerializer_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "XMLSerializer_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static serializeToString_Callback_0(mthis) native "XMLSerializer_serializeToString_Callback";
  serializeToString_Callback_0_(mthis) => serializeToString_Callback_0(mthis);

  static serializeToString_Callback_1(mthis, __arg_0) native "XMLSerializer_serializeToString_Callback";
  serializeToString_Callback_1_(mthis, __arg_0) => serializeToString_Callback_1(mthis, __arg_0);

  static serializeToString_Callback_2(mthis, __arg_0, __arg_1) native "XMLSerializer_serializeToString_Callback";
  serializeToString_Callback_2_(mthis, __arg_0, __arg_1) => serializeToString_Callback_2(mthis, __arg_0, __arg_1);

  static serializeToString_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XMLSerializer_serializeToString_Callback";
  serializeToString_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => serializeToString_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkXPathEvaluator {
  static final instance = new BlinkXPathEvaluator();

  static constructorCallback_0() native "XPathEvaluator_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "XPathEvaluator_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "XPathEvaluator_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static createExpression_Callback_0(mthis) native "XPathEvaluator_createExpression_Callback";
  createExpression_Callback_0_(mthis) => createExpression_Callback_0(mthis);

  static createExpression_Callback_1(mthis, __arg_0) native "XPathEvaluator_createExpression_Callback";
  createExpression_Callback_1_(mthis, __arg_0) => createExpression_Callback_1(mthis, __arg_0);

  static createExpression_Callback_2(mthis, __arg_0, __arg_1) native "XPathEvaluator_createExpression_Callback";
  createExpression_Callback_2_(mthis, __arg_0, __arg_1) => createExpression_Callback_2(mthis, __arg_0, __arg_1);

  static createExpression_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XPathEvaluator_createExpression_Callback";
  createExpression_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createExpression_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static createExpression_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "XPathEvaluator_createExpression_Callback";
  createExpression_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => createExpression_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static createNSResolver_Callback_0(mthis) native "XPathEvaluator_createNSResolver_Callback";
  createNSResolver_Callback_0_(mthis) => createNSResolver_Callback_0(mthis);

  static createNSResolver_Callback_1(mthis, __arg_0) native "XPathEvaluator_createNSResolver_Callback";
  createNSResolver_Callback_1_(mthis, __arg_0) => createNSResolver_Callback_1(mthis, __arg_0);

  static createNSResolver_Callback_2(mthis, __arg_0, __arg_1) native "XPathEvaluator_createNSResolver_Callback";
  createNSResolver_Callback_2_(mthis, __arg_0, __arg_1) => createNSResolver_Callback_2(mthis, __arg_0, __arg_1);

  static createNSResolver_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XPathEvaluator_createNSResolver_Callback";
  createNSResolver_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => createNSResolver_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static evaluate_Callback_0(mthis) native "XPathEvaluator_evaluate_Callback";
  evaluate_Callback_0_(mthis) => evaluate_Callback_0(mthis);

  static evaluate_Callback_1(mthis, __arg_0) native "XPathEvaluator_evaluate_Callback";
  evaluate_Callback_1_(mthis, __arg_0) => evaluate_Callback_1(mthis, __arg_0);

  static evaluate_Callback_2(mthis, __arg_0, __arg_1) native "XPathEvaluator_evaluate_Callback";
  evaluate_Callback_2_(mthis, __arg_0, __arg_1) => evaluate_Callback_2(mthis, __arg_0, __arg_1);

  static evaluate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XPathEvaluator_evaluate_Callback";
  evaluate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => evaluate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static evaluate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "XPathEvaluator_evaluate_Callback";
  evaluate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => evaluate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static evaluate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "XPathEvaluator_evaluate_Callback";
  evaluate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => evaluate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static evaluate_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) native "XPathEvaluator_evaluate_Callback";
  evaluate_Callback_6_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5) => evaluate_Callback_6(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5);

  static evaluate_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) native "XPathEvaluator_evaluate_Callback";
  evaluate_Callback_7_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6) => evaluate_Callback_7(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4, __arg_5, __arg_6);

}

class BlinkXPathExpression {
  static final instance = new BlinkXPathExpression();

  static evaluate_Callback_0(mthis) native "XPathExpression_evaluate_Callback";
  evaluate_Callback_0_(mthis) => evaluate_Callback_0(mthis);

  static evaluate_Callback_1(mthis, __arg_0) native "XPathExpression_evaluate_Callback";
  evaluate_Callback_1_(mthis, __arg_0) => evaluate_Callback_1(mthis, __arg_0);

  static evaluate_Callback_2(mthis, __arg_0, __arg_1) native "XPathExpression_evaluate_Callback";
  evaluate_Callback_2_(mthis, __arg_0, __arg_1) => evaluate_Callback_2(mthis, __arg_0, __arg_1);

  static evaluate_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XPathExpression_evaluate_Callback";
  evaluate_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => evaluate_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static evaluate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "XPathExpression_evaluate_Callback";
  evaluate_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => evaluate_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static evaluate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "XPathExpression_evaluate_Callback";
  evaluate_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => evaluate_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

}

class BlinkXPathNSResolver {
  static final instance = new BlinkXPathNSResolver();

  static lookupNamespaceURI_Callback_0(mthis) native "XPathNSResolver_lookupNamespaceURI_Callback";
  lookupNamespaceURI_Callback_0_(mthis) => lookupNamespaceURI_Callback_0(mthis);

  static lookupNamespaceURI_Callback_1(mthis, __arg_0) native "XPathNSResolver_lookupNamespaceURI_Callback";
  lookupNamespaceURI_Callback_1_(mthis, __arg_0) => lookupNamespaceURI_Callback_1(mthis, __arg_0);

  static lookupNamespaceURI_Callback_2(mthis, __arg_0, __arg_1) native "XPathNSResolver_lookupNamespaceURI_Callback";
  lookupNamespaceURI_Callback_2_(mthis, __arg_0, __arg_1) => lookupNamespaceURI_Callback_2(mthis, __arg_0, __arg_1);

  static lookupNamespaceURI_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XPathNSResolver_lookupNamespaceURI_Callback";
  lookupNamespaceURI_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => lookupNamespaceURI_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

}

class BlinkXPathResult {
  static final instance = new BlinkXPathResult();

  static booleanValue_Getter(mthis) native "XPathResult_booleanValue_Getter";
  booleanValue_Getter_(mthis) => booleanValue_Getter(mthis);

  static invalidIteratorState_Getter(mthis) native "XPathResult_invalidIteratorState_Getter";
  invalidIteratorState_Getter_(mthis) => invalidIteratorState_Getter(mthis);

  static iterateNext_Callback_0(mthis) native "XPathResult_iterateNext_Callback";
  iterateNext_Callback_0_(mthis) => iterateNext_Callback_0(mthis);

  static iterateNext_Callback_1(mthis, __arg_0) native "XPathResult_iterateNext_Callback";
  iterateNext_Callback_1_(mthis, __arg_0) => iterateNext_Callback_1(mthis, __arg_0);

  static iterateNext_Callback_2(mthis, __arg_0, __arg_1) native "XPathResult_iterateNext_Callback";
  iterateNext_Callback_2_(mthis, __arg_0, __arg_1) => iterateNext_Callback_2(mthis, __arg_0, __arg_1);

  static numberValue_Getter(mthis) native "XPathResult_numberValue_Getter";
  numberValue_Getter_(mthis) => numberValue_Getter(mthis);

  static resultType_Getter(mthis) native "XPathResult_resultType_Getter";
  resultType_Getter_(mthis) => resultType_Getter(mthis);

  static singleNodeValue_Getter(mthis) native "XPathResult_singleNodeValue_Getter";
  singleNodeValue_Getter_(mthis) => singleNodeValue_Getter(mthis);

  static snapshotItem_Callback_0(mthis) native "XPathResult_snapshotItem_Callback";
  snapshotItem_Callback_0_(mthis) => snapshotItem_Callback_0(mthis);

  static snapshotItem_Callback_1(mthis, __arg_0) native "XPathResult_snapshotItem_Callback";
  snapshotItem_Callback_1_(mthis, __arg_0) => snapshotItem_Callback_1(mthis, __arg_0);

  static snapshotItem_Callback_2(mthis, __arg_0, __arg_1) native "XPathResult_snapshotItem_Callback";
  snapshotItem_Callback_2_(mthis, __arg_0, __arg_1) => snapshotItem_Callback_2(mthis, __arg_0, __arg_1);

  static snapshotItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XPathResult_snapshotItem_Callback";
  snapshotItem_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => snapshotItem_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static snapshotLength_Getter(mthis) native "XPathResult_snapshotLength_Getter";
  snapshotLength_Getter_(mthis) => snapshotLength_Getter(mthis);

  static stringValue_Getter(mthis) native "XPathResult_stringValue_Getter";
  stringValue_Getter_(mthis) => stringValue_Getter(mthis);

}

class BlinkXSLTProcessor {
  static final instance = new BlinkXSLTProcessor();

  static clearParameters_Callback_0(mthis) native "XSLTProcessor_clearParameters_Callback";
  clearParameters_Callback_0_(mthis) => clearParameters_Callback_0(mthis);

  static clearParameters_Callback_1(mthis, __arg_0) native "XSLTProcessor_clearParameters_Callback";
  clearParameters_Callback_1_(mthis, __arg_0) => clearParameters_Callback_1(mthis, __arg_0);

  static clearParameters_Callback_2(mthis, __arg_0, __arg_1) native "XSLTProcessor_clearParameters_Callback";
  clearParameters_Callback_2_(mthis, __arg_0, __arg_1) => clearParameters_Callback_2(mthis, __arg_0, __arg_1);

  static constructorCallback_0() native "XSLTProcessor_constructorCallback";
  constructorCallback_0_() => constructorCallback_0();

  static constructorCallback_1(__arg_0) native "XSLTProcessor_constructorCallback";
  constructorCallback_1_(__arg_0) => constructorCallback_1(__arg_0);

  static constructorCallback_2(__arg_0, __arg_1) native "XSLTProcessor_constructorCallback";
  constructorCallback_2_(__arg_0, __arg_1) => constructorCallback_2(__arg_0, __arg_1);

  static getParameter_Callback_0(mthis) native "XSLTProcessor_getParameter_Callback";
  getParameter_Callback_0_(mthis) => getParameter_Callback_0(mthis);

  static getParameter_Callback_1(mthis, __arg_0) native "XSLTProcessor_getParameter_Callback";
  getParameter_Callback_1_(mthis, __arg_0) => getParameter_Callback_1(mthis, __arg_0);

  static getParameter_Callback_2(mthis, __arg_0, __arg_1) native "XSLTProcessor_getParameter_Callback";
  getParameter_Callback_2_(mthis, __arg_0, __arg_1) => getParameter_Callback_2(mthis, __arg_0, __arg_1);

  static getParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XSLTProcessor_getParameter_Callback";
  getParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => getParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static getParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "XSLTProcessor_getParameter_Callback";
  getParameter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => getParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static importStylesheet_Callback_0(mthis) native "XSLTProcessor_importStylesheet_Callback";
  importStylesheet_Callback_0_(mthis) => importStylesheet_Callback_0(mthis);

  static importStylesheet_Callback_1(mthis, __arg_0) native "XSLTProcessor_importStylesheet_Callback";
  importStylesheet_Callback_1_(mthis, __arg_0) => importStylesheet_Callback_1(mthis, __arg_0);

  static importStylesheet_Callback_2(mthis, __arg_0, __arg_1) native "XSLTProcessor_importStylesheet_Callback";
  importStylesheet_Callback_2_(mthis, __arg_0, __arg_1) => importStylesheet_Callback_2(mthis, __arg_0, __arg_1);

  static importStylesheet_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XSLTProcessor_importStylesheet_Callback";
  importStylesheet_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => importStylesheet_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static removeParameter_Callback_0(mthis) native "XSLTProcessor_removeParameter_Callback";
  removeParameter_Callback_0_(mthis) => removeParameter_Callback_0(mthis);

  static removeParameter_Callback_1(mthis, __arg_0) native "XSLTProcessor_removeParameter_Callback";
  removeParameter_Callback_1_(mthis, __arg_0) => removeParameter_Callback_1(mthis, __arg_0);

  static removeParameter_Callback_2(mthis, __arg_0, __arg_1) native "XSLTProcessor_removeParameter_Callback";
  removeParameter_Callback_2_(mthis, __arg_0, __arg_1) => removeParameter_Callback_2(mthis, __arg_0, __arg_1);

  static removeParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XSLTProcessor_removeParameter_Callback";
  removeParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => removeParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static removeParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "XSLTProcessor_removeParameter_Callback";
  removeParameter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => removeParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static reset_Callback_0(mthis) native "XSLTProcessor_reset_Callback";
  reset_Callback_0_(mthis) => reset_Callback_0(mthis);

  static reset_Callback_1(mthis, __arg_0) native "XSLTProcessor_reset_Callback";
  reset_Callback_1_(mthis, __arg_0) => reset_Callback_1(mthis, __arg_0);

  static reset_Callback_2(mthis, __arg_0, __arg_1) native "XSLTProcessor_reset_Callback";
  reset_Callback_2_(mthis, __arg_0, __arg_1) => reset_Callback_2(mthis, __arg_0, __arg_1);

  static setParameter_Callback_1(mthis, __arg_0) native "XSLTProcessor_setParameter_Callback";
  setParameter_Callback_1_(mthis, __arg_0) => setParameter_Callback_1(mthis, __arg_0);

  static setParameter_Callback_2(mthis, __arg_0, __arg_1) native "XSLTProcessor_setParameter_Callback";
  setParameter_Callback_2_(mthis, __arg_0, __arg_1) => setParameter_Callback_2(mthis, __arg_0, __arg_1);

  static setParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XSLTProcessor_setParameter_Callback";
  setParameter_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => setParameter_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static setParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "XSLTProcessor_setParameter_Callback";
  setParameter_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => setParameter_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

  static setParameter_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) native "XSLTProcessor_setParameter_Callback";
  setParameter_Callback_5_(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4) => setParameter_Callback_5(mthis, __arg_0, __arg_1, __arg_2, __arg_3, __arg_4);

  static transformToDocument_Callback_0(mthis) native "XSLTProcessor_transformToDocument_Callback";
  transformToDocument_Callback_0_(mthis) => transformToDocument_Callback_0(mthis);

  static transformToDocument_Callback_1(mthis, __arg_0) native "XSLTProcessor_transformToDocument_Callback";
  transformToDocument_Callback_1_(mthis, __arg_0) => transformToDocument_Callback_1(mthis, __arg_0);

  static transformToDocument_Callback_2(mthis, __arg_0, __arg_1) native "XSLTProcessor_transformToDocument_Callback";
  transformToDocument_Callback_2_(mthis, __arg_0, __arg_1) => transformToDocument_Callback_2(mthis, __arg_0, __arg_1);

  static transformToDocument_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XSLTProcessor_transformToDocument_Callback";
  transformToDocument_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => transformToDocument_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static transformToFragment_Callback_0(mthis) native "XSLTProcessor_transformToFragment_Callback";
  transformToFragment_Callback_0_(mthis) => transformToFragment_Callback_0(mthis);

  static transformToFragment_Callback_1(mthis, __arg_0) native "XSLTProcessor_transformToFragment_Callback";
  transformToFragment_Callback_1_(mthis, __arg_0) => transformToFragment_Callback_1(mthis, __arg_0);

  static transformToFragment_Callback_2(mthis, __arg_0, __arg_1) native "XSLTProcessor_transformToFragment_Callback";
  transformToFragment_Callback_2_(mthis, __arg_0, __arg_1) => transformToFragment_Callback_2(mthis, __arg_0, __arg_1);

  static transformToFragment_Callback_3(mthis, __arg_0, __arg_1, __arg_2) native "XSLTProcessor_transformToFragment_Callback";
  transformToFragment_Callback_3_(mthis, __arg_0, __arg_1, __arg_2) => transformToFragment_Callback_3(mthis, __arg_0, __arg_1, __arg_2);

  static transformToFragment_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3) native "XSLTProcessor_transformToFragment_Callback";
  transformToFragment_Callback_4_(mthis, __arg_0, __arg_1, __arg_2, __arg_3) => transformToFragment_Callback_4(mthis, __arg_0, __arg_1, __arg_2, __arg_3);

}


// _Utils native entry points
class Blink_Utils {
  static window() native "Utils_window";

  static forwardingPrint(message) native "Utils_forwardingPrint";

  static spawnDomUri(uri) native "Utils_spawnDomUri";

  static void spawnDomHelper(Function f, int replyTo) native "Utils_spawnDomHelper";

  static register(document, tag, customType, extendsTagName) native "Utils_register";

  static createElement(document, tagName) native "Utils_createElement";

  static initializeCustomElement(element) native "Utils_initializeCustomElement";

  static changeElementWrapper(element, type) native "Utils_changeElementWrapper";
}

class Blink_DOMWindowCrossFrame {
  // FIXME: Return to using explicit cross frame entry points after roll to M35
  static get_history(_DOMWindowCrossFrame) native "Window_history_cross_frame_Getter";

  static get_location(_DOMWindowCrossFrame) native "Window_location_cross_frame_Getter";

  static get_closed(_DOMWindowCrossFrame) native "Window_closed_Getter";

  static get_opener(_DOMWindowCrossFrame) native "Window_opener_Getter";

  static get_parent(_DOMWindowCrossFrame) native "Window_parent_Getter";

  static get_top(_DOMWindowCrossFrame) native "Window_top_Getter";

  static close(_DOMWindowCrossFrame) native "Window_close_Callback";

  static postMessage(_DOMWindowCrossFrame, message, targetOrigin, [messagePorts]) native "Window_postMessage_Callback";
}

class Blink_HistoryCrossFrame {
  // _HistoryCrossFrame native entry points
  static back(_HistoryCrossFrame) native "History_back_Callback";

  static forward(_HistoryCrossFrame) native "History_forward_Callback";

  static go(_HistoryCrossFrame, distance) native "History_go_Callback";
}

class Blink_LocationCrossFrame {
  // _LocationCrossFrame native entry points
  static set_href(_LocationCrossFrame, h) native "Location_href_Setter";
}

class Blink_DOMStringMap {
  // _DOMStringMap native entry  points
  static containsKey(_DOMStringMap, key) native "DOMStringMap_containsKey_Callback";

  static item(_DOMStringMap, key) native "DOMStringMap_item_Callback";

  static setItem(_DOMStringMap, key, value) native "DOMStringMap_setItem_Callback";

  static remove(_DOMStringMap, key) native "DOMStringMap_remove_Callback";

  static get_keys(_DOMStringMap) native "DOMStringMap_getKeys_Callback";
}
